diff -Nru cantata-1.4.2.ds1/cantata.desktop cantata-1.5.2.ds2/cantata.desktop --- cantata-1.4.2.ds1/cantata.desktop 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/cantata.desktop 1970-01-01 00:00:00.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/cantata.desktop.cmake cantata-1.5.2.ds2/cantata.desktop.cmake --- cantata-1.4.2.ds1/cantata.desktop.cmake 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/cantata.desktop.cmake 2015-03-23 20:09:43.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/cantata_media.qrc cantata-1.5.2.ds2/cantata_media.qrc --- cantata-1.4.2.ds1/cantata_media.qrc 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/cantata_media.qrc 2015-03-23 20:09:43.000000000 +0000 @@ -1,20 +1,16 @@ icons/media-next-dark.svg -icons/media-next-rtl-dark.svg icons/media-pause-dark.svg icons/media-play-dark.svg icons/media-play-rtl-dark.svg icons/media-prev-dark.svg -icons/media-prev-rtl-dark.svg icons/media-stop-dark.svg icons/media-next-light.svg -icons/media-next-rtl-light.svg icons/media-pause-light.svg icons/media-play-light.svg icons/media-play-rtl-light.svg icons/media-prev-light.svg -icons/media-prev-rtl-light.svg icons/media-stop-light.svg diff -Nru cantata-1.4.2.ds1/cantata-play-audiocd.desktop cantata-1.5.2.ds2/cantata-play-audiocd.desktop --- cantata-1.4.2.ds1/cantata-play-audiocd.desktop 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/cantata-play-audiocd.desktop 2015-03-23 20:09:35.000000000 +0000 @@ -7,5 +7,6 @@ [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 -Nru cantata-1.4.2.ds1/cantata.qrc cantata-1.5.2.ds2/cantata.qrc --- cantata-1.4.2.ds1/cantata.qrc 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/cantata.qrc 2015-03-23 20:09:43.000000000 +0000 @@ -1,15 +1,16 @@ scrobbling/lastfm.svg +icons/stars.svg icons/view-media-repeat16.png icons/view-media-repeat22.png +icons/view-media-repeat24.png icons/view-media-repeat32.png -icons/view-media-repeat48.png icons/view-media-shuffle16.png icons/view-media-shuffle22.png +icons/view-media-shuffle24.png icons/view-media-shuffle32.png -icons/view-media-shuffle48.png icons/sidebar-albums-dark.svg icons/sidebar-artists-dark.svg @@ -47,19 +48,7 @@ streams/icons/tunein.svg streams/icons/dirble.svg -icons/view-media-artist-various16.png -icons/view-media-artist-various22.png -icons/view-media-artist-various32.png -icons/view-media-artist-various48.png -icons/view-media-artist-various64.png -icons/view-media-artist-various128.png icons/view-media-artist-various.svg -icons/view-media-artist16.png -icons/view-media-artist22.png -icons/view-media-artist32.png -icons/view-media-artist48.png -icons/view-media-artist64.png -icons/view-media-artist128.png icons/view-media-artist.svg icons/view-radiostream16.png icons/view-radiostream22.png diff -Nru cantata-1.4.2.ds1/cantata-remote.cmake cantata-1.5.2.ds2/cantata-remote.cmake --- cantata-1.4.2.ds1/cantata-remote.cmake 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/cantata-remote.cmake 2015-03-23 20:09:34.000000000 +0000 @@ -0,0 +1,61 @@ +#!/bin/bash + +# +# cantata-remote +# +# Copyright (c) 2011-2014 Craig Drummond +# +# ---- +# +# 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 -Nru cantata-1.4.2.ds1/ChangeLog cantata-1.5.2.ds2/ChangeLog --- cantata-1.4.2.ds1/ChangeLog 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/ChangeLog 2015-03-23 20:09:43.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/cmake/DeployQt5.cmake cantata-1.5.2.ds2/cmake/DeployQt5.cmake --- cantata-1.4.2.ds1/cmake/DeployQt5.cmake 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/cmake/DeployQt5.cmake 2015-03-23 20:09:32.000000000 +0000 @@ -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( ) +# Writes a qt.conf file with the into . +# +# RESOLVE_QT5_PATHS( []) +# Loop through list and if any don't exist resolve them +# relative to the (if supplied) or the CMAKE_INSTALL_PREFIX. +# +# FIXUP_QT5_EXECUTABLE( [ ]) +# 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. +# +# should point to the executable to be fixed-up. +# +# should contain a list of the names or paths of any Qt plugins +# to be installed. +# +# will be passed to BundleUtilities and should be a list of any already +# installed plugins, libraries or executables to also be fixed-up. +# +# will be passed to BundleUtilities and should contain and directories +# to be searched to find library dependencies. +# +# allows an custom plugins directory to be used. +# +# will force a qt.conf file to be written even if not needed. +# +# INSTALL_QT5_PLUGIN_PATH(plugin executable copy installed_plugin_path_var ) +# Install (or copy) a resolved to the default plugins directory +# (or ) relative to and store the result in +# . +# +# If 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 is set then anything installed will use this COMPONENT. +# +# INSTALL_QT5_PLUGIN(plugin executable copy installed_plugin_path_var ) +# Install (or copy) an unresolved to the default plugins directory +# (or ) relative to and store the result in +# . See documentation of INSTALL_QT5_PLUGIN_PATH. +# +# INSTALL_QT5_EXECUTABLE( [ ]) +# 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. +# is the COMPONENT used for bundle fixup and plugin installation. +# See documentation of FIXUP_QT5_BUNDLE. + +#============================================================================= +# Copyright 2011 Mike McQuaid +# Copyright 2013 Mihai Moldovan +# 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 -Nru cantata-1.4.2.ds1/cmake/FindFoundation.cmake cantata-1.5.2.ds2/cmake/FindFoundation.cmake --- cantata-1.4.2.ds1/cmake/FindFoundation.cmake 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/cmake/FindFoundation.cmake 2015-03-23 20:09:32.000000000 +0000 @@ -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 +# +# 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 -Nru cantata-1.4.2.ds1/cmake/FindIOKit.cmake cantata-1.5.2.ds2/cmake/FindIOKit.cmake --- cantata-1.4.2.ds1/cmake/FindIOKit.cmake 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/cmake/FindIOKit.cmake 2015-03-23 20:09:32.000000000 +0000 @@ -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 +# +# 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 -Nru cantata-1.4.2.ds1/CMakeLists.txt cantata-1.5.2.ds2/CMakeLists.txt --- cantata-1.4.2.ds1/CMakeLists.txt 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/CMakeLists.txt 2015-03-23 20:09:38.000000000 +0000 @@ -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_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 ") 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_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_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 @@ 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 @@ 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 (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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ # 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 (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 @@ 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 @@ 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 @@ # 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/config.h.cmake cantata-1.5.2.ds2/config.h.cmake --- cantata-1.4.2.ds1/config.h.cmake 2014-09-28 16:30:21.000000000 +0000 +++ cantata-1.5.2.ds2/config.h.cmake 2015-03-23 20:09:47.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/context/contextwidget.cpp cantata-1.5.2.ds2/context/contextwidget.cpp --- cantata-1.4.2.ds1/context/contextwidget.cpp 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/context/contextwidget.cpp 2015-03-23 20:09:41.000000000 +0000 @@ -209,7 +209,7 @@ 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 -Nru cantata-1.4.2.ds1/context/onlineview.cpp cantata-1.5.2.ds2/context/onlineview.cpp --- cantata-1.4.2.ds1/context/onlineview.cpp 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/context/onlineview.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -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 @@ 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 -Nru cantata-1.4.2.ds1/context/othersettings.cpp cantata-1.5.2.ds2/context/othersettings.cpp --- cantata-1.4.2.ds1/context/othersettings.cpp 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/context/othersettings.cpp 2015-03-23 20:09:41.000000000 +0000 @@ -66,7 +66,7 @@ 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 @@ } 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 -Nru cantata-1.4.2.ds1/context/othersettings.ui cantata-1.5.2.ds2/context/othersettings.ui --- cantata-1.4.2.ds1/context/othersettings.ui 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/context/othersettings.ui 2015-03-23 20:09:41.000000000 +0000 @@ -203,7 +203,7 @@ Always collapse into a single pane - 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. @@ -214,45 +214,14 @@ - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 8 - - - - - - - - - 0 - 0 - - + + - <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> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - Qt::NoTextInteraction + 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). - + Qt::Vertical @@ -277,9 +246,9 @@
support/buddylabel.h
- StateLabel + NoteLabel QLabel -
widgets/statelabel.h
+
widgets/notelabel.h
PathRequester diff -Nru cantata-1.4.2.ds1/context/songview.cpp cantata-1.5.2.ds2/context/songview.cpp --- cantata-1.4.2.ds1/context/songview.cpp 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/context/songview.cpp 2015-03-23 20:09:41.000000000 +0000 @@ -121,7 +121,7 @@ } 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 @@ , 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 @@ 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 @@ searchForInfo(); } +static inline QString fixNewLine(QString s) +{ + return s.replace(QLatin1String("\n"), QLatin1String("
")); +} + static QString createRow(const QString &key, const QString &value) { - return value.isEmpty() ? QString() : QString("%1: %2").arg(key).arg(value); + return value.isEmpty() ? QString() : QString("%1: %2").arg(key).arg(fixNewLine(value)); } struct MapEntry { @@ -461,6 +466,7 @@ QString str; }; +#ifdef TAGLIB_FOUND static QString clean(QString v) { if (v.length()>1) { @@ -469,13 +475,14 @@ } return v; } +#endif -void SongView::loadTags() +void SongView::loadMetadata() { - if (!tagsNeedsUpdating) { + if (!metadataNeedsUpdating) { return; } - tagsNeedsUpdating=false; + metadataNeedsUpdating=false; QMultiMap tags; QMultiMap audioProperties; @@ -553,6 +560,22 @@ } #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 @@ 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 @@ } } } - if (!tagInfo.isEmpty()) { - tagInfo+=QLatin1String(""); + if (tagInfo.isEmpty()) { + tagInfo=QLatin1String(""); + } else { + tagInfo+=QLatin1String(""); + } + if (MPDConnection::self()->getDetails().dirReadable) { + QString path=Utils::getDir(MPDConnection::self()->getDetails().dir+currentSong.filePath()); + tagInfo+=createRow(i18n("Filename"), QLatin1String("")+ + currentSong.filePath()+QLatin1String("")); + } else { + tagInfo+=createRow(i18n("Filename"), currentSong.filePath()); } + tagInfo+=QLatin1String("
"); - setHtml(tagInfo, Page_Tags); + setHtml(tagInfo, Page_Metadata); } void SongView::refreshInfo() @@ -684,7 +717,7 @@ { 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 @@ currentProvider=-1; } - infoNeedsUpdating=tagsNeedsUpdating=lyricsNeedsUpdating=true; + infoNeedsUpdating=metadataNeedsUpdating=lyricsNeedsUpdating=true; setHeader(song.title); curentViewChanged(); } diff -Nru cantata-1.4.2.ds1/context/songview.h cantata-1.5.2.ds2/context/songview.h --- cantata-1.4.2.ds1/context/songview.h 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/context/songview.h 2015-03-23 20:09:41.000000000 +0000 @@ -47,7 +47,7 @@ enum Pages { Page_Lyrics, Page_Information, - Page_Tags + Page_Metadata }; public: @@ -88,7 +88,7 @@ private: void loadLyrics(); void loadInfo(); - void loadTags(); + void loadMetadata(); void searchForInfo(); void hideSpinner(); void abort(); @@ -128,7 +128,7 @@ bool lyricsNeedsUpdating; bool infoNeedsUpdating; - bool tagsNeedsUpdating; + bool metadataNeedsUpdating; Action *refreshInfoAction; Action *cancelInfoJobAction; ContextEngine *engine; diff -Nru cantata-1.4.2.ds1/context/togglelist.ui cantata-1.5.2.ds2/context/togglelist.ui --- cantata-1.4.2.ds1/context/togglelist.ui 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/context/togglelist.ui 2015-03-23 20:09:42.000000000 +0000 @@ -66,18 +66,10 @@
- - - true - - + - - - true - - + @@ -112,18 +104,10 @@ - - - true - - + - - - true - - + @@ -173,4 +157,11 @@ + + + FlatToolButton + QToolButton +
support/flattoolbutton.h
+
+
diff -Nru cantata-1.4.2.ds1/context/view.cpp cantata-1.5.2.ds2/context/view.cpp --- cantata-1.4.2.ds1/context/view.cpp 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/context/view.cpp 2015-03-23 20:09:41.000000000 +0000 @@ -31,10 +31,11 @@ #include "support/action.h" #include "widgets/icons.h" #include "support/localize.h" +#include "support/touchproxystyle.h" #include #include #include -#include +#include #include #include #include @@ -44,6 +45,7 @@ #include #include #include +#include // 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 @@ 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("")+s+QLatin1String(" ")+QChar(0x25BE)+QLatin1String(""); -} - -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(sender()); - if (act) { - setCurrentIndex(act->data().toInt()); - } -} - -bool ViewTextSelector::event(QEvent *e) -{ - switch (e->type()) { - case QEvent::MouseButtonPress: - if (Qt::NoModifier==static_cast(e)->modifiers() && Qt::LeftButton==static_cast(e)->button()) { - menu->exec(mapToGlobal(static_cast(e)->pos())); - } - case QEvent::Wheel: { - int numDegrees = static_cast(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 @@ , 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 @@ 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 @@ 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 @@ 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::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 -Nru cantata-1.4.2.ds1/context/view.h cantata-1.5.2.ds2/context/view.h --- cantata-1.4.2.ds1/context/view.h 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/context/view.h 2015-03-23 20:09:42.000000000 +0000 @@ -28,6 +28,7 @@ #include #include #include "mpd/song.h" +#include "widgets/selectorlabel.h" class QImage; class Spinner; @@ -38,28 +39,6 @@ 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 @@ protected Q_SLOTS: virtual void abort(); +private Q_SLOTS: + void initStyle(); + protected: Song currentSong; QString stdHeader; @@ -106,7 +88,7 @@ Spinner *spinner; Action *cancelJobAction; - ViewTextSelector *selector; + SelectorLabel *selector; QStackedWidget *stack; TextBrowser *text; // short-cut to first text item... QList texts; diff -Nru cantata-1.4.2.ds1/context/wikipediasettings.cpp cantata-1.5.2.ds2/context/wikipediasettings.cpp --- cantata-1.4.2.ds1/context/wikipediasettings.cpp 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/context/wikipediasettings.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -92,7 +92,7 @@ { 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 -Nru cantata-1.4.2.ds1/dbus/gnomemediakeys.cpp cantata-1.5.2.ds2/dbus/gnomemediakeys.cpp --- cantata-1.4.2.ds1/dbus/gnomemediakeys.cpp 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/dbus/gnomemediakeys.cpp 2015-03-23 20:09:35.000000000 +0000 @@ -43,13 +43,21 @@ { } -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 -Nru cantata-1.4.2.ds1/dbus/gnomemediakeys.h cantata-1.5.2.ds2/dbus/gnomemediakeys.h --- cantata-1.4.2.ds1/dbus/gnomemediakeys.h 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/dbus/gnomemediakeys.h 2015-03-23 20:09:35.000000000 +0000 @@ -38,7 +38,8 @@ public: GnomeMediaKeys(QObject *p); - void activate(bool a); + bool activate(); + void deactivate(); private: bool daemonIsRunning(); diff -Nru cantata-1.4.2.ds1/dbus/mpris.h cantata-1.5.2.ds2/dbus/mpris.h --- cantata-1.4.2.ds1/dbus/mpris.h 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/dbus/mpris.h 2015-03-23 20:09:35.000000000 +0000 @@ -79,7 +79,7 @@ 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 -Nru cantata-1.4.2.ds1/dbus/notify.cpp cantata-1.5.2.ds2/dbus/notify.cpp --- cantata-1.4.2.ds1/dbus/notify.cpp 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/dbus/notify.cpp 2015-03-23 20:09:35.000000000 +0000 @@ -75,7 +75,7 @@ { // This is needed to link but shouldn't be called. Q_ASSERT(0); - Q_UNUSED(image); + Q_UNUSED(image) return arg; } diff -Nru cantata-1.4.2.ds1/dbus/org.freedesktop.login1.xml cantata-1.5.2.ds2/dbus/org.freedesktop.login1.xml --- cantata-1.4.2.ds1/dbus/org.freedesktop.login1.xml 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/dbus/org.freedesktop.login1.xml 2015-03-23 20:09:35.000000000 +0000 @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru cantata-1.4.2.ds1/dbus/powermanagement.cpp cantata-1.5.2.ds2/dbus/powermanagement.cpp --- cantata-1.4.2.ds1/dbus/powermanagement.cpp 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/dbus/powermanagement.cpp 2015-03-23 20:09:35.000000000 +0000 @@ -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 @@ 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::prepareForSleep(bool s) +{ + #ifdef ENABLE_KDE_SUPPORT + Q_UNUSED(s) + #else + if (!s) { + emit resuming(); + } + #endif +} diff -Nru cantata-1.4.2.ds1/dbus/powermanagement.h cantata-1.5.2.ds2/dbus/powermanagement.h --- cantata-1.4.2.ds1/dbus/powermanagement.h 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/dbus/powermanagement.h 2015-03-23 20:09:35.000000000 +0000 @@ -31,6 +31,7 @@ class OrgKdeSolidPowerManagementPolicyAgentInterface; class OrgFreedesktopPowerManagementInhibitInterface; class OrgFreedesktopUPowerInterface; +class OrgFreedesktopLogin1ManagerInterface; #endif class PowerManagement : public QObject @@ -50,6 +51,7 @@ private Q_SLOTS: void mpdStatusUpdated(); + void prepareForSleep(bool s); private: bool inhibitSuspendWhilstPlaying; @@ -58,6 +60,7 @@ OrgKdeSolidPowerManagementPolicyAgentInterface *policy; OrgFreedesktopPowerManagementInhibitInterface *inhibit; OrgFreedesktopUPowerInterface *upower; + OrgFreedesktopLogin1ManagerInterface *login1; #endif }; diff -Nru cantata-1.4.2.ds1/debian/changelog cantata-1.5.2.ds2/debian/changelog --- cantata-1.4.2.ds1/debian/changelog 2014-12-18 13:34:25.000000000 +0000 +++ cantata-1.5.2.ds2/debian/changelog 2015-08-14 20:56:44.000000000 +0000 @@ -1,14 +1,23 @@ -cantata (1.4.2.ds1-1ubuntu1) vivid; urgency=medium +cantata (1.5.2.ds2-2ubuntu1) wily; urgency=medium - * Remove install dep on kde-style-oxygen which no longer exists + * Merge with Debian; remaining changes: + - Remove install dep on kde-style-oxygen which no longer exists. - -- Jonathan Riddell Thu, 18 Dec 2014 14:34:02 +0100 + -- Matthias Klose Fri, 14 Aug 2015 22:55:17 +0200 -cantata (1.4.2.ds1-1build1) vivid; urgency=medium +cantata (1.5.2.ds2-2) unstable; urgency=medium - * Rebuild against libmusicbrainz5-1. + * Team upload. + * Look for libmusicbrainz5cc instead of libmusicbrainz5 (Closes: #791880). - -- Colin Watson Thu, 04 Dec 2014 11:57:11 +0000 + -- Sebastian Ramacher Thu, 09 Jul 2015 12:38:44 +0200 + +cantata (1.5.2.ds2-1) unstable; urgency=medium + + * New upstream release. + * Bump standards version (no changes required). + + -- Stuart Prescott Mon, 27 Apr 2015 00:36:16 +1000 cantata (1.4.2.ds1-1) unstable; urgency=medium @@ -16,6 +25,18 @@ -- Stuart Prescott Mon, 29 Sep 2014 20:54:08 +1000 +cantata (1.4.2.ds1-1ubuntu1) vivid; urgency=medium + + * Remove install dep on kde-style-oxygen which no longer exists + + -- Jonathan Riddell Thu, 18 Dec 2014 14:34:02 +0100 + +cantata (1.4.2.ds1-1build1) vivid; urgency=medium + + * Rebuild against libmusicbrainz5-1. + + -- Colin Watson Thu, 04 Dec 2014 11:57:11 +0000 + cantata (1.4.1.ds1-1) unstable; urgency=medium * New upstream release diff -Nru cantata-1.4.2.ds1/debian/control cantata-1.5.2.ds2/debian/control --- cantata-1.4.2.ds1/debian/control 2014-12-18 13:34:42.000000000 +0000 +++ cantata-1.5.2.ds2/debian/control 2015-08-14 20:56:53.000000000 +0000 @@ -1,8 +1,7 @@ Source: cantata Section: sound Priority: optional -Maintainer: Kubuntu Developers -XSBC-Original-Maintainer: Debian Multimedia Maintainers +Maintainer: Debian Multimedia Maintainers Uploaders: Stuart Prescott Build-Depends: cmake, debhelper (>= 9), @@ -13,7 +12,7 @@ libavutil-dev, libcdparanoia-dev, libebur128-dev, - libmusicbrainz5-dev, + libmusicbrainz5-dev (>= 5.1.0+git20150707), libmpg123-dev, libmtp-dev (>= 1.0.0), libphonon-dev, @@ -28,7 +27,7 @@ libx11-dev, pkg-config, pkg-kde-tools -Standards-Version: 3.9.5 +Standards-Version: 3.9.6 Homepage: https://code.google.com/p/cantata/ Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-multimedia/cantata.git Vcs-Git: git://anonscm.debian.org/pkg-multimedia/cantata.git diff -Nru cantata-1.4.2.ds1/debian/copyright cantata-1.5.2.ds2/debian/copyright --- cantata-1.4.2.ds1/debian/copyright 2014-09-29 10:54:23.000000000 +0000 +++ cantata-1.5.2.ds2/debian/copyright 2015-07-09 10:35:23.000000000 +0000 @@ -7,6 +7,7 @@ 3rdparty/qtsingleapplication 3rdparty/qxt 3rdparty/solid-lite + windows/icu Comment: Unneeded 3rd party source code removed License: GPL-3+ diff -Nru cantata-1.4.2.ds1/debian/patches/ebur128-location.patch cantata-1.5.2.ds2/debian/patches/ebur128-location.patch --- cantata-1.4.2.ds1/debian/patches/ebur128-location.patch 2014-09-29 10:54:23.000000000 +0000 +++ cantata-1.5.2.ds2/debian/patches/ebur128-location.patch 2015-07-09 10:35:23.000000000 +0000 @@ -9,7 +9,7 @@ Forwarded: not sure -- check interaction with cmake rules --- a/replaygain/ffmpeginput.cpp +++ b/replaygain/ffmpeginput.cpp -@@ -32,7 +32,7 @@ +@@ -31,7 +31,7 @@ #include #include #include @@ -20,7 +20,7 @@ static QMutex mutex; --- a/replaygain/mpg123input.cpp +++ b/replaygain/mpg123input.cpp -@@ -19,7 +19,7 @@ +@@ -18,7 +18,7 @@ #include #include #include diff -Nru cantata-1.4.2.ds1/debian/patches/libmusicbrainz5cc.patch cantata-1.5.2.ds2/debian/patches/libmusicbrainz5cc.patch --- cantata-1.4.2.ds1/debian/patches/libmusicbrainz5cc.patch 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/debian/patches/libmusicbrainz5cc.patch 2015-07-09 10:35:39.000000000 +0000 @@ -0,0 +1,19 @@ +Description: Look for libmusicbrainz5cc instead of libmusicbrainz5. +Author: Sebastian Ramacher +Last-Update: 2015-07-09 + +--- cantata-1.5.2.ds2.orig/cmake/FindMusicBrainz5.cmake ++++ cantata-1.5.2.ds2/cmake/FindMusicBrainz5.cmake +@@ -16,10 +16,10 @@ endif(MUSICBRAINZ5_INCLUDE_DIRS AND MUSI + + IF (NOT WIN32) + find_package(PkgConfig) +- PKG_SEARCH_MODULE( MUSICBRAINZ5 libmusicbrainz5 ) ++ PKG_SEARCH_MODULE( MUSICBRAINZ5 libmusicbrainz5cc ) + ELSE (NOT WIN32) + FIND_PATH( MUSICBRAINZ5_INCLUDE_DIRS musicbrainz5/Disc.h ) +- FIND_LIBRARY( MUSICBRAINZ5_LIBRARIES NAMES musicbrainz5 ) ++ FIND_LIBRARY( MUSICBRAINZ5_LIBRARIES NAMES musicbrainz5cc ) + ENDIF (NOT WIN32) + + include(FindPackageHandleStandardArgs) diff -Nru cantata-1.4.2.ds1/debian/patches/series cantata-1.5.2.ds2/debian/patches/series --- cantata-1.4.2.ds1/debian/patches/series 2014-09-29 10:54:23.000000000 +0000 +++ cantata-1.5.2.ds2/debian/patches/series 2015-07-09 10:35:39.000000000 +0000 @@ -1,3 +1,4 @@ # only needed for Qt in wheezy #playeradaptor.patch ebur128-location.patch +libmusicbrainz5cc.patch diff -Nru cantata-1.4.2.ds1/devices/actiondialog.cpp cantata-1.5.2.ds2/devices/actiondialog.cpp --- cantata-1.4.2.ds1/devices/actiondialog.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/actiondialog.cpp 2015-03-23 20:09:33.000000000 +0000 @@ -85,8 +85,6 @@ 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 @@ } 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 @@ case Ok: if (haveVariousArtists && ((configureDestLabel->isVisible() && sourceUdi.isEmpty() && // Only warn if copying FROM library - MessageBox::No==MessageBox::warningYesNo(this, i18n("

You have not configured the destination device.
" - "Continue with the default settings?

"), 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("

You have not configured the source device.
" - "Continue with the default settings?

"), 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 @@ #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 songs; diff -Nru cantata-1.4.2.ds1/devices/actiondialog.ui cantata-1.5.2.ds2/devices/actiondialog.ui --- cantata-1.4.2.ds1/devices/actiondialog.ui 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/actiondialog.ui 2015-03-23 20:09:33.000000000 +0000 @@ -200,12 +200,9 @@
- + - <i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i> - - - Qt::NoTextInteraction + Connected to a Mopidy server (manual update required). @@ -410,6 +407,11 @@
support/urllabel.h
+ UrlNoteLabel + QLabel +
widgets/notelabel.h
+
+ SplitLabelWidget QLabel
devices/splitlabelwidget.h
diff -Nru cantata-1.4.2.ds1/devices/albumdetailsdialog.cpp cantata-1.5.2.ds2/devices/albumdetailsdialog.cpp --- cantata-1.4.2.ds1/devices/albumdetailsdialog.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/albumdetailsdialog.cpp 2015-03-23 20:09:33.000000000 +0000 @@ -51,7 +51,7 @@ 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 @@ } 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::applyVa() { if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Apply \"Various Artists\" workaround?")+ - QLatin1String("


")+ - i18n("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\""), i18n("Apply \"Various Artists\" Workaround"), + "\"TrackArtist - TrackTitle\""), i18n("Apply \"Various Artists\" Workaround"), StdGuiItem::apply(), StdGuiItem::cancel())) { return; } @@ -250,14 +250,14 @@ void AlbumDetailsDialog::revertVa() { - if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Revert \"Various Artists\" workaround")+ - QLatin1String("


")+ - i18n("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.

" + "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\"
"), 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::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 -Nru cantata-1.4.2.ds1/devices/audiocddevice.cpp cantata-1.5.2.ds2/devices/audiocddevice.cpp --- cantata-1.4.2.ds1/devices/audiocddevice.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/audiocddevice.cpp 2015-03-23 20:09:33.000000000 +0000 @@ -182,7 +182,7 @@ mb=0; } #else - Q_UNUSED(useCddb); + Q_UNUSED(useCddb) #endif #ifdef CDDB_FOUND diff -Nru cantata-1.4.2.ds1/devices/cdparanoia.cpp cantata-1.5.2.ds2/devices/cdparanoia.cpp --- cantata-1.4.2.ds1/devices/cdparanoia.cpp 2014-09-28 16:30:06.000000000 +0000 +++ cantata-1.5.2.ds2/devices/cdparanoia.cpp 2015-03-23 20:09:32.000000000 +0000 @@ -37,8 +37,6 @@ , neverSkip(noSkip) , maxRetries(20) { - paranoia = 0; - drive = 0; QMutexLocker locker(&mutex); if (!lockedDevices.contains(device)) { dev = device; @@ -125,11 +123,6 @@ // return paranoia ? cdda_disc_lastsector(drive) : -1; //} -void CdParanoia::reset() -{ - init(); -} - bool CdParanoia::init() { free(); @@ -148,7 +141,8 @@ return true; } -void CdParanoia::free() { +void CdParanoia::free() +{ if (paranoia) { paranoia_free(paranoia); paranoia = 0; diff -Nru cantata-1.4.2.ds1/devices/cdparanoia.h cantata-1.5.2.ds2/devices/cdparanoia.h --- cantata-1.4.2.ds1/devices/cdparanoia.h 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/cdparanoia.h 2015-03-23 20:09:33.000000000 +0000 @@ -58,7 +58,7 @@ double sizeOfTrack(int n); //in MiB int frameOffsetOfTrack(int n); bool isAudioTrack(int n); - void reset(); + void reset() { init(); } private: bool init(); diff -Nru cantata-1.4.2.ds1/devices/device.h cantata-1.5.2.ds2/devices/device.h --- cantata-1.4.2.ds1/devices/device.h 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/device.h 2015-03-23 20:09:33.000000000 +0000 @@ -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 @@ , needToFixVa(false) , jobAbortRequested(false) , transcoding(false) { - setUseArtistImages(false); - setUseAlbumImages(true); - setLargeImages(false); Q_UNUSED(m) Q_UNUSED(id) } @@ -117,9 +115,6 @@ , 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 @@ , 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 @@ 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 &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 -Nru cantata-1.4.2.ds1/devices/devicepropertieswidget.cpp cantata-1.5.2.ds2/devices/devicepropertieswidget.cpp --- cantata-1.4.2.ds1/devices/devicepropertieswidget.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/devicepropertieswidget.cpp 2015-03-23 20:09:33.000000000 +0000 @@ -29,7 +29,6 @@ #include "support/utils.h" #include #include -#include class CoverNameValidator : public QValidator { @@ -149,7 +148,7 @@ 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 @@ } } - 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 -Nru cantata-1.4.2.ds1/devices/devicepropertieswidget.h cantata-1.5.2.ds2/devices/devicepropertieswidget.h --- cantata-1.4.2.ds1/devices/devicepropertieswidget.h 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/devicepropertieswidget.h 2015-03-23 20:09:33.000000000 +0000 @@ -57,7 +57,7 @@ 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 -Nru cantata-1.4.2.ds1/devices/devicepropertieswidget.ui cantata-1.5.2.ds2/devices/devicepropertieswidget.ui --- cantata-1.4.2.ds1/devices/devicepropertieswidget.ui 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/devicepropertieswidget.ui 2015-03-23 20:09:33.000000000 +0000 @@ -15,15 +15,9 @@ 0 - + - <i><b>NOTE:</b> These settings are only valid, and editable, when the device is connected.</i> - - - true - - - Qt::NoTextInteraction + These settings are only valid, and editable, when the device is connected. @@ -195,7 +189,7 @@ - Ignore 'The' in artist names + Append 'The' to artist names @@ -261,6 +255,11 @@ QSlider
devices/valueslider.h
+ + PlainNoteLabel + QLabel +
widgets/notelabel.h
+
musicFolder diff -Nru cantata-1.4.2.ds1/devices/devicespage.cpp cantata-1.5.2.ds2/devices/devicespage.cpp --- cantata-1.4.2.ds1/devices/devicespage.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/devicespage.cpp 2015-03-23 20:09:34.000000000 +0000 @@ -79,14 +79,10 @@ 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 @@ 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 @@ dev=DevicesModel::self()->device(udi); } else { if (dev->childCount() && Device::Mtp!=dev->devType()) { - switch (MessageBox::questionYesNoCancel(this, i18n("

Which type of refresh do you wish to perform?

    " - "
  • Partial - Only new songs are scanned (quick)
  • " - "
  • Full - All songs are rescanned (slow)

"), + 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 @@ QList 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 @@ } QString udi=dev->id(); QString devName=dev->data(); - if (MessageBox::Yes==MessageBox::warningYesNo(this, i18n("Are you sure you wish to forget %1?", 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 @@ Device *dev=static_cast(item); if (dev->isConnected() && (Device::AudioCd==dev->devType() - ? MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to eject Audio CD %1 - %2?", 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 %1?", 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 -Nru cantata-1.4.2.ds1/devices/devicespage.h cantata-1.5.2.ds2/devices/devicespage.h --- cantata-1.4.2.ds1/devices/devicespage.h 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/devicespage.h 2015-03-23 20:09:33.000000000 +0000 @@ -47,11 +47,12 @@ QString activeFsDeviceUdi() const; QStringList playableUrls() const; QList 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 -Nru cantata-1.4.2.ds1/devices/encoders.cpp cantata-1.5.2.ds2/devices/encoders.cpp --- cantata-1.4.2.ds1/devices/encoders.cpp 2014-09-28 16:30:06.000000000 +0000 +++ cantata-1.5.2.ds2/devices/encoders.cpp 2015-03-23 20:09:32.000000000 +0000 @@ -46,7 +46,7 @@ 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 -Nru cantata-1.4.2.ds1/devices/filenameschemedialog.cpp cantata-1.5.2.ds2/devices/filenameschemedialog.cpp --- cantata-1.4.2.ds1/devices/filenameschemedialog.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/filenameschemedialog.cpp 2015-03-23 20:09:34.000000000 +0000 @@ -118,13 +118,21 @@ void FilenameSchemeDialog::showHelp() { MessageBox::information(this, - i18n("

The following variables will be replaced with their corresponding meaning for each track name.

")+ - QLatin1String("

")+ + i18n("The following variables will be replaced with their corresponding meaning for each track name.")+ + QLatin1String("

")+ + #ifdef Q_OS_MAC + QLatin1String("")+ + #endif + QLatin1String("
")+ i18n("")+ tableEntry(albumArtist)+tableEntry(albumTitle)+tableEntry(composer)+tableEntry(trackArtist)+ tableEntry(trackTitle)+tableEntry(trackArtistAndTitle)+tableEntry(trackNo)+tableEntry(cdNo)+ tableEntry(year)+tableEntry(genre)+ - QLatin1String("
VariableButtonDescription

")); + QLatin1String("") + #ifdef Q_OS_MAC + +QLatin1String("") + #endif + ); } void FilenameSchemeDialog::enableOkButton() diff -Nru cantata-1.4.2.ds1/devices/fsdevice.cpp cantata-1.5.2.ds2/devices/fsdevice.cpp --- cantata-1.4.2.ds1/devices/fsdevice.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/fsdevice.cpp 2015-03-23 20:09:33.000000000 +0000 @@ -422,7 +422,8 @@ 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 @@ 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 @@ QImage img(dirName+opts.coverName); if (!img.isNull()) { emit cover(s, img); - return; + return Covers::Image(img, dirName+opts.coverName); } } @@ -526,9 +528,10 @@ if (!img.isNull()) { emit cover(s, img); - return; + return Covers::Image(img, dirName+fileName); } } + return Covers::Image(); } void FsDevice::percent(int pc) diff -Nru cantata-1.4.2.ds1/devices/fsdevice.h cantata-1.5.2.ds2/devices/fsdevice.h --- cantata-1.4.2.ds1/devices/fsdevice.h 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/fsdevice.h 2015-03-23 20:09:33.000000000 +0000 @@ -123,7 +123,7 @@ void copySongTo(const Song &s, const QString &musicPath, bool overwrite, bool copyCover); void removeSong(const Song &s); void cleanDirs(const QSet &dirs); - void requestCover(const Song &s); + Covers::Image requestCover(const Song &s); QString cacheFileName() const; virtual void setAudioFolder() const { } void saveCache(); diff -Nru cantata-1.4.2.ds1/devices/mtpdevice.cpp cantata-1.5.2.ds2/devices/mtpdevice.cpp --- cantata-1.4.2.ds1/devices/mtpdevice.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/mtpdevice.cpp 2015-03-23 20:09:33.000000000 +0000 @@ -55,9 +55,11 @@ #include //#define TIME_MTP_OPERATIONS #ifdef TIME_MTP_OPERATIONS -#include #include #endif +#include + +#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 @@ { 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 @@ 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 -Nru cantata-1.4.2.ds1/devices/mtpdevice.h cantata-1.5.2.ds2/devices/mtpdevice.h --- cantata-1.4.2.ds1/devices/mtpdevice.h 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/mtpdevice.h 2015-03-23 20:09:33.000000000 +0000 @@ -171,7 +171,7 @@ void copySongTo(const Song &s, const QString &musicPath, bool overwrite, bool copyCover); void removeSong(const Song &s); void cleanDirs(const QSet &dirs); - void requestCover(const Song &song); + Covers::Image requestCover(const Song &song); double usedCapacity(); QString capacityString(); qint64 freeSpace(); diff -Nru cantata-1.4.2.ds1/devices/musicbrainz.cpp cantata-1.5.2.ds2/devices/musicbrainz.cpp --- cantata-1.4.2.ds1/devices/musicbrainz.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/musicbrainz.cpp 2015-03-23 20:09:33.000000000 +0000 @@ -77,6 +77,10 @@ static QString calculateDiscId(const QList &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 @@ } } } - } - 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 -Nru cantata-1.4.2.ds1/devices/remotedevicepropertiesdialog.cpp cantata-1.5.2.ds2/devices/remotedevicepropertiesdialog.cpp --- cantata-1.4.2.ds1/devices/remotedevicepropertiesdialog.cpp 2014-09-28 16:30:06.000000000 +0000 +++ cantata-1.5.2.ds2/devices/remotedevicepropertiesdialog.cpp 2015-03-23 20:09:32.000000000 +0000 @@ -88,7 +88,7 @@ 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 -Nru cantata-1.4.2.ds1/devices/remotedevicepropertieswidget.ui cantata-1.5.2.ds2/devices/remotedevicepropertieswidget.ui --- cantata-1.4.2.ds1/devices/remotedevicepropertieswidget.ui 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/remotedevicepropertieswidget.ui 2015-03-23 20:09:33.000000000 +0000 @@ -12,15 +12,9 @@ - + - <i><b>NOTE:</b> These settings are only editable when the device is not connected.</i> - - - true - - - Qt::NoTextInteraction + These settings are only editable when the device is not connected. @@ -161,15 +155,9 @@ - + - <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> - - - true - - - Qt::NoTextInteraction + 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 '-' @@ -264,9 +252,9 @@ - + - <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 '-' true @@ -367,9 +355,9 @@ - + - <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. true @@ -417,24 +405,9 @@ - - - - 0 - 0 - - + - <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> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - Qt::NoTextInteraction + 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. @@ -456,6 +429,11 @@ QLabel
support/buddylabel.h
+ + PlainNoteLabel + QLabel +
widgets/notelabel.h
+
type diff -Nru cantata-1.4.2.ds1/devices/synccollectionwidget.cpp cantata-1.5.2.ds2/devices/synccollectionwidget.cpp --- cantata-1.4.2.ds1/devices/synccollectionwidget.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/synccollectionwidget.cpp 2015-03-23 20:09:33.000000000 +0000 @@ -33,7 +33,7 @@ #include #include -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 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/devices/synccollectionwidget.h cantata-1.5.2.ds2/devices/synccollectionwidget.h --- cantata-1.4.2.ds1/devices/synccollectionwidget.h 2014-09-28 16:30:06.000000000 +0000 +++ cantata-1.5.2.ds2/devices/synccollectionwidget.h 2015-03-23 20:09:32.000000000 +0000 @@ -39,7 +39,7 @@ 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 &songs) { model->update(songs); } diff -Nru cantata-1.4.2.ds1/devices/syncdialog.cpp cantata-1.5.2.ds2/devices/syncdialog.cpp --- cantata-1.4.2.ds1/devices/syncdialog.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/syncdialog.cpp 2015-03-23 20:09:33.000000000 +0000 @@ -99,8 +99,8 @@ 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 -Nru cantata-1.4.2.ds1/devices/transcodingjob.cpp cantata-1.5.2.ds2/devices/transcodingjob.cpp --- cantata-1.4.2.ds1/devices/transcodingjob.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/devices/transcodingjob.cpp 2015-03-23 20:09:33.000000000 +0000 @@ -71,7 +71,7 @@ void TranscodingJob::finished(int exitCode, QProcess::ExitStatus exitStatus) { - Q_UNUSED(exitStatus); + Q_UNUSED(exitStatus) if (!process) { return; } diff -Nru cantata-1.4.2.ds1/dynamic/cantata-dynamic cantata-1.5.2.ds2/dynamic/cantata-dynamic --- cantata-1.4.2.ds1/dynamic/cantata-dynamic 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/dynamic/cantata-dynamic 2015-03-23 20:09:34.000000000 +0000 @@ -198,6 +198,12 @@ } 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 @@ $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 @@ # # File format: # +# Rating: # Rule # : # : @@ -346,6 +365,7 @@ # # e.g. # +# Rating:1-5 # Rule # AlbumArtist:Various Artists # Genre:Dance @@ -390,6 +410,8 @@ my $currentRule=""; @includeRules=(); @excludeRules=(); + $ratingFrom=0; + $ratingTo=0; close($fileHandle); foreach my $line (@lines) { if (! ($line=~ m/^(#)/)) { @@ -411,12 +433,23 @@ @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 @@ @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 @@ foreach my $rule (@excludeRules) { print "${rule}\n"; } - print "---------------------\n" + print "---------------------\n"; + print "RATING: ${ratingFrom} -> ${ratingTo}\n"; } &checkRulesChanged(); @@ -515,10 +549,16 @@ 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 @@ } } +# 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 @@ } @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 @@ } print "---------------------\n" } + $numMpdSongs=scalar(@mpdSongs); } } @@ -738,33 +859,48 @@ &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 -Nru cantata-1.4.2.ds1/dynamic/dynamic.cpp cantata-1.5.2.ds2/dynamic/dynamic.cpp --- cantata-1.4.2.ds1/dynamic/dynamic.cpp 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/dynamic/dynamic.cpp 2015-03-23 20:09:34.000000000 +0000 @@ -141,9 +141,12 @@ 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 @@ } 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/dynamic/dynamic.h cantata-1.5.2.ds2/dynamic/dynamic.h --- cantata-1.4.2.ds1/dynamic/dynamic.h 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/dynamic/dynamic.h 2015-03-23 20:09:34.000000000 +0000 @@ -56,10 +56,13 @@ typedef QMap 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 rules; + int ratingFrom; + int ratingTo; }; static Dynamic * self(); @@ -74,8 +77,10 @@ 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 -Nru cantata-1.4.2.ds1/dynamic/dynamicpage.cpp cantata-1.5.2.ds2/dynamic/dynamicpage.cpp --- cantata-1.4.2.ds1/dynamic/dynamicpage.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/dynamic/dynamicpage.cpp 2015-03-23 20:09:34.000000000 +0000 @@ -136,7 +136,7 @@ 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 -Nru cantata-1.4.2.ds1/dynamic/dynamicruledialog.cpp cantata-1.5.2.ds2/dynamic/dynamicruledialog.cpp --- cantata-1.4.2.ds1/dynamic/dynamicruledialog.cpp 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/dynamic/dynamicruledialog.cpp 2015-03-23 20:09:34.000000000 +0000 @@ -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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/dynamic/dynamicrulesdialog.cpp cantata-1.5.2.ds2/dynamic/dynamicrulesdialog.cpp --- cantata-1.4.2.ds1/dynamic/dynamicrulesdialog.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/dynamic/dynamicrulesdialog.cpp 2015-03-23 20:09:34.000000000 +0000 @@ -188,6 +188,8 @@ model->setItem(model->rowCount(), 0, item); } origName=name; + ratingFrom->setValue(e.ratingFrom); + ratingTo->setValue(e.ratingTo); show(); } @@ -289,16 +291,20 @@ void DynamicRulesDialog::showAbout() { MessageBox::information(this, + #ifdef Q_OS_MAC + i18n("About dynamic rules")+QLatin1String("

")+ + #endif i18n("

Cantata will query your library using all of the rules listed. " "The list of Include rules will be used to build a set of songs that can be used. " "The list of Exclude rules will be used to build a set of songs that cannot be used. " - "If there are no Include rules, Cantata will assume that all songs (bar those from Exclude) can be used.
" - "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 Include rules, Cantata will assume that all songs (bar those from Exclude) can be used.

" + "

e.g. to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', you would need the following: " "

  • Include AlbumArtist=Wibble Genre=Rock
  • Include AlbumArtist=Various Artists
" "To have Cantata look for 'Songs by Wibble but not from album Abc', you would need the following: " - "
  • Include AlbumArtist=Wibble
  • Exclude Album=Abc
" + "
  • Include AlbumArtist=Wibble
  • Exclude AlbumArtist=Wibble Album=Abc
" "After the set of usable songs has been created, Cantata will randomly select songs to " - "keep the play queue filled with 10 entries.

") + "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.

") ); } @@ -326,13 +332,18 @@ } 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; irowCount(); ++i) { QStandardItem *itm=model->item(i); if (itm) { @@ -347,7 +358,6 @@ } } - bool saved=Dynamic::self()->save(entry); if (Dynamic::self()->isRemote()) { diff -Nru cantata-1.4.2.ds1/dynamic/dynamicrules.ui cantata-1.5.2.ds2/dynamic/dynamicrules.ui --- cantata-1.4.2.ds1/dynamic/dynamicrules.ui 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/dynamic/dynamicrules.ui 2015-03-23 20:09:34.000000000 +0000 @@ -81,7 +81,44 @@ - + + + + + + Song with ratings between: + + + + + + + + + + - + + + + + + + + + + Qt::Horizontal + + + + 2 + 2 + + + + + + + @@ -94,7 +131,7 @@ - + Qt::Horizontal @@ -134,6 +171,11 @@
support/messagewidget.h
1 + + RatingWidget + QWidget +
widgets/ratingwidget.h
+
diff -Nru cantata-1.4.2.ds1/dynamic/dynamicrule.ui cantata-1.5.2.ds2/dynamic/dynamicrule.ui --- cantata-1.4.2.ds1/dynamic/dynamicrule.ui 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/dynamic/dynamicrule.ui 2015-03-23 20:09:34.000000000 +0000 @@ -223,66 +223,16 @@
- - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 4 - - - - - - + - <i><b>NOTE</b> Only enter values for the tags you wish to be search on. </i> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - Qt::NoTextInteraction + Only enter values for the tags you wish to be search on. - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 4 - - - - - - + - <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> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - Qt::NoTextInteraction + For genre, end string with an asterisk to match various genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. @@ -311,6 +261,11 @@
support/buddylabel.h
+ NoteLabel + QLabel +
widgets/notelabel.h
+
+ LineEdit QLineEdit
support/lineedit.h
diff -Nru cantata-1.4.2.ds1/dynamic/init/cantata-dynamic.systemd cantata-1.5.2.ds2/dynamic/init/cantata-dynamic.systemd --- cantata-1.4.2.ds1/dynamic/init/cantata-dynamic.systemd 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/dynamic/init/cantata-dynamic.systemd 2015-03-23 20:09:34.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/gui/albumspage.cpp cantata-1.5.2.ds2/gui/albumspage.cpp --- cantata-1.4.2.ds1/gui/albumspage.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/gui/albumspage.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -41,7 +41,6 @@ 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 @@ #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 @@ 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 @@ 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 @@ 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 albums; - foreach (const QModelIndex &idx, mapped) { - if (idx.parent().isValid()) { - albums[idx.parent().row()].append(idx); - } - } - QList 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(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 AlbumsPage::selectedSongs(bool allowPlaylists) const @@ -193,9 +126,9 @@ 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 @@ QList 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 @@ #endif #endif // TAGLIB_FOUND StdActions::self()->setCoverAction->setEnabled(1==selected.count() && static_cast(proxy.mapToSource(selected.at(0)).internalPointer())->isAlbum()); - - bool allowRandomAlbum=!selected.isEmpty(); - if (allowRandomAlbum) { - foreach (const QModelIndex &idx, selected) { - if (!static_cast(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 -Nru cantata-1.4.2.ds1/gui/albumspage.h cantata-1.5.2.ds2/gui/albumspage.h --- cantata-1.4.2.ds1/gui/albumspage.h 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/albumspage.h 2015-03-23 20:09:42.000000000 +0000 @@ -40,19 +40,20 @@ virtual ~AlbumsPage(); void clear(); - QStringList selectedFiles(bool allowPlaylists=false, bool randomAlbums=false) const; + QStringList selectedFiles(bool allowPlaylists=false) const; QList 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 @@ void controlActions(); void searchItems(); void updateGenres(const QModelIndex &); - void showSpinner(); - void hideSpinner(); private: AlbumsProxyModel proxy; diff -Nru cantata-1.4.2.ds1/gui/application.cpp cantata-1.5.2.ds2/gui/application.cpp --- cantata-1.4.2.ds1/gui/application.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/application.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -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 @@ FancyTabWidget::setup(); GroupedView::setup(); ActionItemDelegate::setup(); - MusicLibraryItemAlbum::setup(); } diff -Nru cantata-1.4.2.ds1/gui/application_kde.cpp cantata-1.5.2.ds2/gui/application_kde.cpp --- cantata-1.4.2.ds1/gui/application_kde.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/gui/application_kde.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -33,6 +33,11 @@ : KUniqueApplication(display, visual, colormap) , w(0) { + #if QT_VERSION >= 0x050400 + if (Settings::self()->retinaSupport()) { + setAttribute(Qt::AA_UseHighDpiPixmaps); + } + #endif } #endif @@ -40,6 +45,11 @@ : KUniqueApplication() , w(0) { + #if QT_VERSION >= 0x050400 + if (Settings::self()->retinaSupport()) { + setAttribute(Qt::AA_UseHighDpiPixmaps); + } + #endif } Application::~Application() { diff -Nru cantata-1.4.2.ds1/gui/application_mac.cpp cantata-1.5.2.ds2/gui/application_mac.cpp --- cantata-1.4.2.ds1/gui/application_mac.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/application_mac.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -22,13 +22,19 @@ */ #include "application_mac.h" +#include "settings.h" #include "support/utils.h" #include 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 @@ QIcon::setThemeName(QLatin1String("oxygen")); } - diff -Nru cantata-1.4.2.ds1/gui/application_qt.cpp cantata-1.5.2.ds2/gui/application_qt.cpp --- cantata-1.4.2.ds1/gui/application_qt.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/application_qt.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -58,6 +58,11 @@ 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 -Nru cantata-1.4.2.ds1/gui/application_win.cpp cantata-1.5.2.ds2/gui/application_win.cpp --- cantata-1.4.2.ds1/gui/application_win.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/application_win.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -22,6 +22,7 @@ */ #include "application_win.h" +#include "settings.h" #include #include @@ -32,6 +33,11 @@ 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 -Nru cantata-1.4.2.ds1/gui/cachesettings.cpp cantata-1.5.2.ds2/gui/cachesettings.cpp --- cantata-1.4.2.ds1/gui/cachesettings.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/cachesettings.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -337,12 +337,14 @@ toDelete.first()->clean(); } } else if (toDelete.count()>1) { + static const QChar constBullet(0x2022); + QString items; foreach (CacheItem *i, toDelete) { - items+="
  • "+i->name()+"
  • "; + items+=constBullet+QLatin1Char(' ')+i->name()+QLatin1Char('\n'); } - if (MessageBox::No==MessageBox::warningYesNo(this, i18n("

    Delete all from the following?

      %1

    ", 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 -Nru cantata-1.4.2.ds1/gui/coverdialog.cpp cantata-1.5.2.ds2/gui/coverdialog.cpp --- cantata-1.4.2.ds1/gui/coverdialog.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/coverdialog.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -356,7 +356,7 @@ , showAction(0) , removeAction(0) { - Configuration cfg("CoverDialog"); + Configuration cfg(objectName()); enabledProviders=cfg.get("enabledProviders", (int)Prov_All); iCount++; @@ -395,7 +395,7 @@ 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() { - Configuration cfg("CoverDialog"); + Configuration cfg(objectName()); cfg.set("enabledProviders", enabledProviders); iCount--; @@ -433,7 +433,7 @@ 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 @@ list->addItem(existing); } query->setText(isArtist ? song.albumArtist() : QString(song.albumArtist()+QLatin1String(" ")+song.album)); - adjustSize(); Dialog::show(); sendQuery(); } @@ -574,7 +573,7 @@ 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 @@ 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 items=list->selectedItems(); @@ -1348,16 +1347,16 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/gui/coverdialog.ui cantata-1.5.2.ds2/gui/coverdialog.ui --- cantata-1.4.2.ds1/gui/coverdialog.ui 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/coverdialog.ui 2015-03-23 20:09:42.000000000 +0000 @@ -25,14 +25,14 @@
    - + Add a local file - + Configure @@ -45,6 +45,11 @@ + FlatToolButton + QToolButton +
    support/flattoolbutton.h
    +
    + LineEdit QLineEdit
    support/lineedit.h
    diff -Nru cantata-1.4.2.ds1/gui/covers.cpp cantata-1.5.2.ds2/gui/covers.cpp --- cantata-1.4.2.ds1/gui/covers.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/covers.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -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 #include #include @@ -54,10 +60,9 @@ #include #include #include -#include +#include #ifdef ENABLE_KDE_SUPPORT #include -#include #endif GLOBAL_STATIC(Covers, instance) @@ -82,11 +87,18 @@ 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 @@ return img; } + static inline bool isOnlineServiceImage(const Song &s) { #ifdef ENABLE_ONLINE_SERVICES @@ -199,6 +212,12 @@ 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 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 @@ 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 @@ 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 @@ 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 @@ 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::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::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 @@ reply->deleteLater(); } +void CoverDownloader::onlineJobFinished() +{ + #ifdef ENABLE_ONLINE_SERVICES + NetworkJob *reply=qobject_cast(sender()); + + if (!reply) { + return; + } + reply->deleteLater(); + + DBUG << "status" << reply->error() << reply->errorString(); + + QHash::Iterator it(jobs.find(reply)); + QHash::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 @@ QList 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= 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 @@ 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 @@ 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 (sizevariousArtistsIcon.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 @@ 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 @@ 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::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 @@ { 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 @@ } 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 @@ } } #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 @@ { 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= 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::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 @@ { 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 @@ { 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 -Nru cantata-1.4.2.ds1/gui/covers.h cantata-1.5.2.ds2/gui/covers.h --- cantata-1.4.2.ds1/gui/covers.h 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/covers.h 2015-03-23 20:09:42.000000000 +0000 @@ -87,6 +87,7 @@ private Q_SLOTS: void lastFmCallFinished(); void jobFinished(); + void onlineJobFinished(); private: void failed(const Job &job); @@ -180,7 +181,7 @@ : img(i) , fileName(f) { } - + bool validFileName() const; QImage img; QString fileName; }; @@ -195,6 +196,7 @@ 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 @@ 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 @@ // 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 @@ 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 -Nru cantata-1.4.2.ds1/gui/currentcover.cpp cantata-1.5.2.ds2/gui/currentcover.cpp --- cantata-1.4.2.ds1/gui/currentcover.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/currentcover.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -216,14 +216,15 @@ } } -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 -Nru cantata-1.4.2.ds1/gui/filesettings.cpp cantata-1.5.2.ds2/gui/filesettings.cpp --- cantata-1.4.2.ds1/gui/filesettings.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/filesettings.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -28,6 +28,10 @@ : QWidget(p) { setupUi(this); + + #ifdef Q_OS_MAC + expandingSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed); + #endif } void FileSettings::load() diff -Nru cantata-1.4.2.ds1/gui/filesettings.ui cantata-1.5.2.ds2/gui/filesettings.ui --- cantata-1.4.2.ds1/gui/filesettings.ui 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/filesettings.ui 2015-03-23 20:09:42.000000000 +0000 @@ -45,74 +45,21 @@
    - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 8 - - - - - - - - - 0 - 0 - - + - <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> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - Qt::NoTextInteraction + 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. - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 8 - - - - - - + - <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> - - - true - - - Qt::NoTextInteraction + Cantata can only save backdrops and artist images within the music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/Tracks') - + Qt::Vertical @@ -122,13 +69,20 @@ 20 - 8 + 0 + + + NoteLabel + QLabel +
    widgets/notelabel.h
    +
    +
    diff -Nru cantata-1.4.2.ds1/gui/folderpage.cpp cantata-1.5.2.ds2/gui/folderpage.cpp --- cantata-1.4.2.ds1/gui/folderpage.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/folderpage.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -58,9 +58,7 @@ #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 @@ 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 @@ 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 @@ QList 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 @@ } return files; } - -void FolderPage::showSpinner() -{ - view->showSpinner(); - view->showMessage(i18n("Updating..."), -1); -} - -void FolderPage::hideSpinner() -{ - view->hideSpinner(); - view->showMessage(QString(), 0); -} diff -Nru cantata-1.4.2.ds1/gui/folderpage.h cantata-1.5.2.ds2/gui/folderpage.h --- cantata-1.4.2.ds1/gui/folderpage.h 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/folderpage.h 2015-03-23 20:09:42.000000000 +0000 @@ -53,7 +53,7 @@ QStringList selectedFiles(bool allowPlaylists=false) const; QList selectedSongs(EmptySongMod esMod, bool allowPlaylists=false) const; QList 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 @@ void controlActions(); void itemDoubleClicked(const QModelIndex &); void openFileManager(); - void showSpinner(); - void hideSpinner(); private: QStringList walk(QModelIndex rootItem); diff -Nru cantata-1.4.2.ds1/gui/initialsettingswizard.cpp cantata-1.5.2.ds2/gui/initialsettingswizard.cpp --- cantata-1.4.2.ds1/gui/initialsettingswizard.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/initialsettingswizard.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -222,7 +222,7 @@ } else { MPDUser::self()->cleanup(); } - Settings::self()->save(true); + Settings::self()->save(); QDialog::accept(); } @@ -232,4 +232,3 @@ Settings::self()->clearVersion(); QDialog::reject(); } - diff -Nru cantata-1.4.2.ds1/gui/initialsettingswizard.ui cantata-1.5.2.ds2/gui/initialsettingswizard.ui --- cantata-1.4.2.ds1/gui/initialsettingswizard.ui 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/gui/initialsettingswizard.ui 2015-03-23 20:09:42.000000000 +0000 @@ -66,7 +66,7 @@ - <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> + <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> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop @@ -131,7 +131,7 @@ - <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> + <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> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop @@ -378,6 +378,9 @@ + + QFormLayout::ExpandingFieldsGrow + @@ -485,60 +488,16 @@ - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 13 - - - - - - + - <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> - - - true - - - Qt::NoTextInteraction + 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. - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 13 - - - - - - + - <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> - - - true - - - Qt::NoTextInteraction + When using a local socket the full absolute path to the socket needs to be set. (Port number is not required.) @@ -751,89 +710,23 @@ - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 8 - - - - - - + - <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> - - - true - - - Qt::NoTextInteraction + 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. - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 8 - - - - - - + - <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> - - - true - - - Qt::NoTextInteraction + Cantata can only save backdrops and artist images within the music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'. - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 8 - - - - - - + - <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> - - - true - - - Qt::NoTextInteraction + 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. @@ -915,10 +808,33 @@
    - + + + + 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. + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 32 + + + + + - + @@ -937,7 +853,7 @@ - + Qt::Vertical @@ -977,9 +893,9 @@ 1 - StateLabel + NoteLabel QLabel -
    widgets/statelabel.h
    +
    widgets/notelabel.h
    diff -Nru cantata-1.4.2.ds1/gui/interfacesettings.cpp cantata-1.5.2.ds2/gui/interfacesettings.cpp --- cantata-1.4.2.ds1/gui/interfacesettings.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/gui/interfacesettings.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -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 #ifndef ENABLE_KDE_SUPPORT #include @@ -45,6 +46,7 @@ #ifndef ENABLE_KDE_SUPPORT #include #endif +#include #define REMOVE(w) \ w->setVisible(false); \ @@ -61,15 +63,6 @@ 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 @@ 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 @@ } } } -bool enableNotifications(true); static inline int getValue(QComboBox *box) { @@ -115,12 +107,17 @@ , 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 @@ enableNotifications=false; #endif } - #endif + #endif // !ENABLE_KDE_SUPPORT + #endif // Q_MAC_OS setupUi(this); - addImageSizes(libraryCoverSize); QList standardViews=QList() << ItemView::Mode_BasicTree << ItemView::Mode_SimpleTree << ItemView::Mode_DetailedTree << ItemView::Mode_List; addViewTypes(libraryView, QList() << standardViews << ItemView::Mode_IconTop); @@ -142,7 +139,6 @@ addViewTypes(searchView, QList() << ItemView::Mode_List << ItemView::Mode_Table); addViewTypes(playQueueView, QList() << ItemView::Mode_GroupedTree << ItemView::Mode_Table); - addImageSizes(albumsCoverSize); addAlbumSorts(albumSort); addView(i18n("Play Queue"), QLatin1String("PlayQueuePage")); @@ -179,9 +175,6 @@ 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 @@ } 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 @@ 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 @@ 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 @@ 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 @@ { 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 @@ } 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 @@ } 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::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::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 @@ 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 -Nru cantata-1.4.2.ds1/gui/interfacesettings.h cantata-1.5.2.ds2/gui/interfacesettings.h --- cantata-1.4.2.ds1/gui/interfacesettings.h 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/gui/interfacesettings.h 2015-03-23 20:09:42.000000000 +0000 @@ -49,13 +49,11 @@ 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 -Nru cantata-1.4.2.ds1/gui/interfacesettings.ui cantata-1.5.2.ds2/gui/interfacesettings.ui --- cantata-1.4.2.ds1/gui/interfacesettings.ui 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/gui/interfacesettings.ui 2015-03-23 20:09:42.000000000 +0000 @@ -56,375 +56,293 @@
    - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 4 - + + + 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. - + + + +
    + + + + Options + + - - - <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> + + + QFormLayout::ExpandingFieldsGrow - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + Style: + + + sbStyle + + + + + + + + + + Position: + + + sbPosition + + + + + + + + + + Only show icons, no text + + + + + + + Use monochrome icons + + + + + + + Auto-hide + + + + + + + + + + + + + Views + + + + + + Artists + + + + QFormLayout::ExpandingFieldsGrow + + + Qt::AlignJustify|Qt::AlignTop + + + + + Style: - - true + + libraryView - - Qt::NoTextInteraction + + + + + + + + + Sort albums by year - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 4 - + + + + Show artist images - + - - + + +
    + + + + Albums + + + + QFormLayout::ExpandingFieldsGrow + + + Qt::AlignJustify|Qt::AlignTop + + + - <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> + Style: - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + albumsView - - true + + + + + + + + + Sort: - - Qt::NoTextInteraction + + albumSort + + + - - + + - Options + Playlists - + QFormLayout::ExpandingFieldsGrow + + Qt::AlignJustify|Qt::AlignTop + - + Style: - sbStyle + playlistsView - + + + + + + Initially collapse albums + + + + + + removeWidget + + + + Other Views + + + + QFormLayout::ExpandingFieldsGrow + + + Qt::AlignJustify|Qt::AlignTop + + + + + Folders: + + + folderView + + + + + - + - Position: + Streams: - sbPosition + streamsView - + - - + + - Only show icons, no text + Online: + + + onlineView - - + + + + + - Use monochrome icons + Devices: + + + devicesView - - + + + + + - Auto-hide + Search: + + + - - - - - Artists - - - - - - QFormLayout::ExpandingFieldsGrow - - - - - Style: - - - libraryView - - - - - - - - - - Covers: - - - libraryCoverSize - - - - - - - - - - Show artist images - - - - - - - Sort albums by year - - - - - - - + + Qt::Vertical - - QSizePolicy::Fixed - - 20 - 4 + 2 + 0 - - - - - 0 - 0 - - - - <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> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - Qt::NoTextInteraction - - - - - - - - Albums - - - - QFormLayout::ExpandingFieldsGrow - - - - - Style: - - - albumsView - - - - - - - - - - Covers: - - - albumsCoverSize - - - - - - - - - - Sort albums: - - - albumSort - - - - - - - - - - - Playlists - - - - QFormLayout::ExpandingFieldsGrow - - - - - Style: - - - playlistsView - - - - - - - - - - Initially collapse albums - - - - - - - - Other Views - - - - QFormLayout::ExpandingFieldsGrow - - - - - Folder view style: - - - folderView - - - - - - - - - - Streams view style: - - - streamsView - - - - - - - - - - Online view style: - - - onlineView - - - - - - - - - - Devices view style: - - - devicesView - - - - - - - - - - Search view style: - - - - - - @@ -477,6 +395,29 @@ + + + Separate action (and shortcut) for play queue search + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 2 + 1 + + + + + @@ -643,6 +584,37 @@ + + + Toolbar + + + + QFormLayout::ExpandingFieldsGrow + + + + + Show stop button + + + + + + + Show cover of current track + + + + + + + Show track rating + + + + + External @@ -712,8 +684,8 @@ - 20 - 90 + 2 + 2 @@ -768,52 +740,45 @@
    - - - Cache scaled covers - - - - Show delete action in context menus - + Enforce single-click activation of items - + <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> +<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> Make interface more touch friendly - - + + - Show stop button in toolbar + Show song information tooltips - - + + - Show cover of current track in toolbar + Support retina displays - + Language: @@ -823,104 +788,36 @@ - + - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 4 - - - - - - + - <i><b>NOTE:</b> Changing the 'Enforce single-click activation of items' setting will require a re-start of Cantata.</i> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - Qt::NoTextInteraction + Changing the 'Enforce single-click activation of items' setting will require a re-start of Cantata. - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 4 - - - - - - + - <i><b>NOTE:</b> Changing the language setting will require a re-start of Cantata.</i> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - Qt::NoTextInteraction + Changing the language setting will require a re-start of Cantata. - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 4 - + + + Changing the 'touch friendly' setting will require a re-start of Cantata. - + - + - <i><b>NOTE:</b> Changing the 'touch friendly' setting will require a re-start of Cantata.</i> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - Qt::NoTextInteraction + 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. @@ -950,9 +847,9 @@
    support/buddylabel.h
    - StateLabel + NoteLabel QLabel -
    widgets/statelabel.h
    +
    widgets/notelabel.h
    PathRequester diff -Nru cantata-1.4.2.ds1/gui/librarypage.cpp cantata-1.5.2.ds2/gui/librarypage.cpp --- cantata-1.4.2.ds1/gui/librarypage.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/librarypage.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -43,7 +43,6 @@ 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 @@ #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 @@ 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 &)), genreCombo, SLOT(update(const QSet &))); connect(this, SIGNAL(loadLibrary()), MPDConnection::self(), SLOT(loadLibrary())); connect(view, SIGNAL(itemsSelected(bool)), this, SLOT(controlActions())); @@ -88,37 +85,15 @@ 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 @@ 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 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 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 albumNames; - foreach (const QModelIndex &idx, mapped) { - MusicLibraryItem *item=static_cast(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(item)->childCount(); ++row) { - MusicLibraryItem *album=static_cast(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 LibraryPage::selectedSongs(bool allowPlaylists) const @@ -232,9 +147,9 @@ 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 @@ QList 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::itemDoubleClicked(const QModelIndex &) { const QModelIndexList selected = view->selectedIndexes(false); // Dont need sorted selection here... @@ -414,17 +328,4 @@ } } } - 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 -Nru cantata-1.4.2.ds1/gui/librarypage.h cantata-1.5.2.ds2/gui/librarypage.h --- cantata-1.4.2.ds1/gui/librarypage.h 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/gui/librarypage.h 2015-03-23 20:09:42.000000000 +0000 @@ -40,21 +40,22 @@ void refresh(); void clear(); - QStringList selectedFiles(bool allowPlaylists=false, bool randomAlbums=false) const; + QStringList selectedFiles(bool allowPlaylists=false) const; QList 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 &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 @@ void searchItems(); void controlActions(); void updateGenres(const QModelIndex &); - void showSpinner(); - void hideSpinner(); private: MusicLibraryProxyModel proxy; diff -Nru cantata-1.4.2.ds1/gui/main.cpp cantata-1.5.2.ds2/gui/main.cpp --- cantata-1.4.2.ds1/gui/main.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/main.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -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 #include @@ -98,11 +104,19 @@ 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 @@ 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 @@ 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 @@ 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 @@ #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 @@ 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 -Nru cantata-1.4.2.ds1/gui/mainwindow.cpp cantata-1.5.2.ds2/gui/mainwindow.cpp --- cantata-1.4.2.ds1/gui/mainwindow.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/mainwindow.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -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 #include #include #include -#if defined Q_OS_MAC && QT_VERSION >= 0x050000 -// QMacNativeToolBar requres Qt Mac Extras to be installed on Qt 5.0 and 5.1. -#include -#endif #if QT_VERSION >= 0x050000 #include +#ifdef Q_OS_WIN +#include "windows/thumbnailtoolbar.h" +#endif #endif #include #include +#include #ifdef ENABLE_KDE_SUPPORT #include #include #include #include #include -#include #include #else #include @@ -145,6 +151,8 @@ return k; } +static const char *constRatingKey="rating"; + MainWindow::MainWindow(QWidget *parent) : MAIN_WINDOW_BASE_CLASS(parent) , prevPage(-1) @@ -168,15 +176,14 @@ , 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 @@ 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 @@ 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 @@ #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 @@ 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()metaObject()->className()); - if (contextInSidebar && (Settings::self()->firstRun() || Settings::self()->version()setContentsMargins(0, 0, 0, 0); @@ -358,36 +381,36 @@ 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 @@ 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 @@ 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 &)), SLOT(copyToDevice(const QString &, const QString &, const QList &))); connect(OnlineServicesModel::self(), SIGNAL(error(const QString &)), this, SLOT(showError(const QString &))); @@ -420,12 +443,12 @@ 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)), this, SLOT(locateTracks(QList))); 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ } #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 @@ 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 @@ 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; ssetProperty(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 @@ connect(playlistsPage, SIGNAL(addToDevice(const QString &, const QString &, const QList &)), SLOT(copyToDevice(const QString &, const QString &, const QList &))); connect(devicesPage, SIGNAL(addToDevice(const QString &, const QString &, const QList &)), SLOT(copyToDevice(const QString &, const QString &, const QList &))); connect(searchPage, SIGNAL(addToDevice(const QString &, const QString &, const QList &)), SLOT(copyToDevice(const QString &, const QString &, const QList &))); - 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 &)), SLOT(deleteSongs(const QString &, const QList &))); connect(libraryPage, SIGNAL(deleteSongs(const QString &, const QList &)), SLOT(deleteSongs(const QString &, const QList &))); connect(albumsPage, SIGNAL(deleteSongs(const QString &, const QList &)), SLOT(deleteSongs(const QString &, const QList &))); connect(folderPage, SIGNAL(deleteSongs(const QString &, const QList &)), SLOT(deleteSongs(const QString &, const QList &))); #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 &)), this, SLOT(outputsUpdated(const QList &))); connect(this, SIGNAL(enableOutput(int, bool)), MPDConnection::self(), SLOT(enableOutput(int, bool))); connect(this, SIGNAL(outputs()), MPDConnection::self(), SLOT(outputs())); @@ -781,23 +837,27 @@ connect(MPDStats::self(), SIGNAL(updated()), this, SLOT(updateStats())); connect(MPDStatus::self(), SIGNAL(updated()), this, SLOT(updateStatus())); connect(MPDConnection::self(), SIGNAL(playlistUpdated(const QList &)), this, SLOT(updatePlayQueue(const QList &))); - 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 @@ 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 @@ 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 @@ 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 @@ } } +#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 @@ #endif addPlayQueueToStoredPlaylistAction->setEnabled(haveItems); stopAfterTrackAction->setEnabled(singleSelection); + ratingAction->setEnabled(s && haveItems); } void MainWindow::connectToMpd(const MPDConnectionDetails &details) @@ -1093,6 +1167,7 @@ #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::refreshDbPromp() { - if (QDialogButtonBox::GnomeLayout==style()->styleHint(QStyle::SH_DialogButtonLayout)) { - messageWidget->setActions(QList() << cancelAction << doDbRefreshAction); + int btnLayout=style()->styleHint(QStyle::SH_DialogButtonLayout); + if (QDialogButtonBox::GnomeLayout==btnLayout || QDialogButtonBox::MacLayout==btnLayout) { + messageWidget->setActions(QList() << cancelAction << doDbRefreshAction << dbFullRefreshAction); } else { - messageWidget->setActions(QList() << doDbRefreshAction << cancelAction); + messageWidget->setActions(QList() << 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 @@ } #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 @@ 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 @@ if (!canClose()) { return; } - #ifdef ENABLE_REPLAYGAIN_SUPPORT if (RgDialog::instanceCount()) { return; @@ -1221,8 +1315,8 @@ #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::outputsUpdated(const QList &outputs) { - if (outputs.count()<2) { - outputsAction->setVisible(false); + 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 enabledMpd; + QSet lastEnabledMpd=QSet::fromList(property(constMpdEnabledOuptuts).toStringList()); + QSet mpd; + QSet 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()); + } + + if (menuItems!=mpd) { + menu->clear(); + QList 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 { - outputsAction->setVisible(true); - QSet mpd; - QSet menuItems; - QMenu *menu=outputsAction->menu(); foreach (const Output &o, outputs) { - mpd.insert(o.name); - } - - foreach (QAction *act, menu->actions()) { - menuItems.insert(act->data().toString()); - } - - if (menuItems!=mpd) { - menu->clear(); - QList 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; - } + 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 switchedOn=enabledMpd-lastEnabledMpd; + QSet 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 @@ #endif } +void MainWindow::setRating() +{ + Action *act=qobject_cast(sender()); + if (act) { + playQueueModel.setRating(playQueueProxyModel.mapToSourceRows(playQueue->selectedIndexes()), act->property(constRatingKey).toUInt()); + } +} + void MainWindow::readSettings() { #ifndef QT_QTDBUS_FOUND @@ -1341,8 +1474,9 @@ 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 @@ 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 @@ 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 @@ qSort(handlers); qSort(tags); long version=MPDConnection::self()->version(); - MessageBox::information(this, QLatin1String("

    ")+ + MessageBox::information(this, + #ifdef Q_OS_MAC + i18n("Server Information")+QLatin1String("

    ")+ + #endif + QLatin1String("

    ")+ i18n("" "" "" @@ -1635,7 +1745,7 @@ bool scroll=autoScrollPlayQueue && playQueueProxyModel.isEmpty() && (wasEmpty || MPDState_Playing==MPDStatus::self()->state()); playQueue->updateRows(idx.row(), current.key, scroll, wasEmpty); if (!scroll && topRow>0 && topRowscrollTo(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 @@ } 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 @@ 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 @@ 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 @@ } 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 @@ 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 @@ 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 @@ // 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::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() << cancelAction << clearPlayQueueAction); } else { messageWidget->setActions(QList() << clearPlayQueueAction << cancelAction); @@ -1863,7 +1984,8 @@ 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::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 @@ 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("%1 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 %1 already exists!
    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::fullScreen() { if (expandInterfaceAction->isChecked()) { + #ifndef Q_OS_MAC fullScreenLabel->setVisible(!isFullScreen()); + #endif expandInterfaceAction->setEnabled(isFullScreen()); if (isFullScreen()) { showNormal(); @@ -2203,11 +2327,6 @@ } } -void MainWindow::locateTrack() -{ - locateTracks(playQueue->selectedSongs()); -} - void MainWindow::locateArtist(const QString &artist) { if (songInfoAction->isCheckable()) { @@ -2237,32 +2356,24 @@ #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::editTags() { #ifdef TAGLIB_FOUND + if (TagEditor::instanceCount() || !canShowDialog()) { + return; + } QList 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 &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 artists, albumArtists, composers, albums, genres; @@ -2317,15 +2417,13 @@ 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 @@ 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 @@ } } -#if !defined Q_OS_WIN && !defined Q_OS_MAC && QT_VERSION < 0x050000 -#include -#include -#endif - void MainWindow::hideWindow() { lastPos=pos(); @@ -2652,52 +2742,8 @@ 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 -static void raiseWindow(QWidget *w) -{ - ::SetWindowPos(reinterpret_cast(w->effectiveWinId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); - ::SetWindowPos(reinterpret_cast(w->effectiveWinId()), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); -} -#endif diff -Nru cantata-1.4.2.ds1/gui/mainwindow.h cantata-1.5.2.ds2/gui/mainwindow.h --- cantata-1.4.2.ds1/gui/mainwindow.h 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/mainwindow.h 2015-03-23 20:09:42.000000000 +0000 @@ -79,6 +79,12 @@ 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 @@ 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 @@ void connectToMpd(const MPDConnectionDetails &details); void streamUrl(const QString &u); void refreshDbPromp(); + void fullDbRefresh(); void showServerInfo(); void stopPlayback(); void stopAfterCurrentTrack(); @@ -189,7 +198,7 @@ void realSearchPlayQueue(); void playQueueSearchActivated(bool a); void updatePlayQueue(const QList &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 @@ 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 @@ void toggleSplitterAutoHide(); void toggleMonoIcons(); void locateTracks(const QList &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 @@ void deleteSongs(const QString &from, const QList &songs); void replayGain(); void setCover(); + void showPlayQueueSearch(); void showSearch(); void expandAll(); void collapseAll(); @@ -266,6 +274,7 @@ void updateConnectionsMenu(); void controlConnectionsMenu(bool enable=true); void controlDynamicButton(); + void setRating(); private: bool canClose(); @@ -274,10 +283,7 @@ 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 &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 @@ Action *prefAction; Action *refreshDbAction; Action *doDbRefreshAction; + Action *dbFullRefreshAction; Action *connectAction; Action *connectionsAction; Action *outputsAction; @@ -346,6 +353,9 @@ Action *clearPlayQueueAction; Action *cancelAction; Action *clearNewStateAction; + Action *ratingAction; + Action *fwdAction; + Action *revAction; TrayItem *trayItem; QPoint lastPos; QSize expandedSize; @@ -392,6 +402,12 @@ 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 -Nru cantata-1.4.2.ds1/gui/mainwindow.ui cantata-1.5.2.ds2/gui/mainwindow.ui --- cantata-1.4.2.ds1/gui/mainwindow.ui 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/mainwindow.ui 2015-03-23 20:09:42.000000000 +0000 @@ -193,7 +193,7 @@ 6 - 21 + 2 @@ -212,6 +212,16 @@ + + + true + + + false + + + + true diff -Nru cantata-1.4.2.ds1/gui/mediakeys.cpp cantata-1.5.2.ds2/gui/mediakeys.cpp --- cantata-1.4.2.ds1/gui/mediakeys.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/mediakeys.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -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 +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 @@ #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 @@ #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 -Nru cantata-1.4.2.ds1/gui/mediakeys.h cantata-1.5.2.ds2/gui/mediakeys.h --- cantata-1.4.2.ds1/gui/mediakeys.h 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/mediakeys.h 2015-03-23 20:09:42.000000000 +0000 @@ -38,25 +38,18 @@ 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 -Nru cantata-1.4.2.ds1/gui/multimediakeysinterface.h cantata-1.5.2.ds2/gui/multimediakeysinterface.h --- cantata-1.4.2.ds1/gui/multimediakeysinterface.h 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/multimediakeysinterface.h 2015-03-23 20:09:42.000000000 +0000 @@ -30,23 +30,17 @@ { 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 -Nru cantata-1.4.2.ds1/gui/page.h cantata-1.5.2.ds2/gui/page.h --- cantata-1.4.2.ds1/gui/page.h 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/page.h 2015-03-23 20:09:42.000000000 +0000 @@ -33,8 +33,8 @@ virtual ~Page() { } virtual Song coverRequest() const { return Song(); } virtual QList selectedSongs(bool allowPlaylists=false) const { Q_UNUSED(allowPlaylists) return QList(); } - 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 -Nru cantata-1.4.2.ds1/gui/playbacksettings.cpp cantata-1.5.2.ds2/gui/playbacksettings.cpp --- cantata-1.4.2.ds1/gui/playbacksettings.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/playbacksettings.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -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 @@ 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::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::showAboutReplayGain() { - MessageBox::information(this, i18n("

    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.

    " - "

    The following ReplayGain settings may be used:

      " + "growing number of players." + "

      The following ReplayGain settings may be used:
        " "
      • None - No ReplayGain is applied.
      • " "
      • Track - Volume will be adjusted using the track's ReplayGain tags.
      • " "
      • Album - Volume will be adjusted using the albums's ReplayGain tags.
      • " "
      • Auto - Volume will be adjusted using the track's ReplayGain tags if random play is activated, otherwise the album's tags will be used.
      • " - "

      ")); + "
    ")); } diff -Nru cantata-1.4.2.ds1/gui/playbacksettings.ui cantata-1.5.2.ds2/gui/playbacksettings.ui --- cantata-1.4.2.ds1/gui/playbacksettings.ui 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/playbacksettings.ui 2015-03-23 20:09:42.000000000 +0000 @@ -66,32 +66,10 @@
    - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 13 - - - - - - + + - <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> - - - true - - - Qt::NoTextInteraction + 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) @@ -229,14 +207,14 @@ - + Qt::Vertical 20 - 2 + 0 @@ -250,6 +228,11 @@
    support/buddylabel.h
    + NoteLabel + QLabel +
    widgets/notelabel.h
    +
    + UrlLabel QWidget
    support/urllabel.h
    diff -Nru cantata-1.4.2.ds1/gui/playlistspage.cpp cantata-1.5.2.ds2/gui/playlistspage.cpp --- cantata-1.4.2.ds1/gui/playlistspage.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/playlistspage.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -95,9 +95,9 @@ 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 &)), MPDConnection::self(), SLOT(removeFromPlaylist(const QString &, const QList &))); - 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 @@ // 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 @@ } 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 @@ if (!name.isEmpty()) { if (PlaylistsModel::self()->exists(name)) { - if (MessageBox::No==MessageBox::warningYesNo(this, i18n("A playlist named %1 already exists!
    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 @@ if (!newName.isEmpty() && name!=newName) { if (PlaylistsModel::self()->exists(newName)) { - if (MessageBox::No==MessageBox::warningYesNo(this, i18n("A playlist named %1 already exists!
    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 -Nru cantata-1.4.2.ds1/gui/playlistspage.h cantata-1.5.2.ds2/gui/playlistspage.h --- cantata-1.4.2.ds1/gui/playlistspage.h 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/gui/playlistspage.h 2015-03-23 20:09:42.000000000 +0000 @@ -44,7 +44,7 @@ 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 -Nru cantata-1.4.2.ds1/gui/preferencesdialog.cpp cantata-1.5.2.ds2/gui/preferencesdialog.cpp --- cantata-1.4.2.ds1/gui/preferencesdialog.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/preferencesdialog.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -54,6 +54,8 @@ #include "shortcutssettingspage.h" #endif #include "scrobbling/scrobblingsettings.h" +#include +#include static int iCount=0; @@ -63,12 +65,9 @@ } 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 @@ 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 @@ 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 @@ #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 @@ 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(pages[parts.at(0)]->widget())) { - static_cast(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(cur)) { + static_cast(cur)->showPage(parts.at(1)); + } } } + Utils::raiseWindow(this); } void PreferencesDialog::writeSettings() @@ -186,26 +189,12 @@ 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 -Nru cantata-1.4.2.ds1/gui/preferencesdialog.h cantata-1.5.2.ds2/gui/preferencesdialog.h --- cantata-1.4.2.ds1/gui/preferencesdialog.h 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/preferencesdialog.h 2015-03-23 20:09:42.000000000 +0000 @@ -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 @@ #endif class ScrobblingSettings; -class PreferencesDialog : public Dialog +class PreferencesDialog : public ConfigDialog { Q_OBJECT @@ -67,7 +66,8 @@ virtual ~PreferencesDialog(); private: - void slotButtonClicked(int button); + void save(); + void cancel(); public Q_SLOTS: void showPage(const QString &page); @@ -79,7 +79,6 @@ void settingsSaved(); private: - PageWidget *pageWidget; ServerSettings *server; PlaybackSettings *playback; FileSettings *files; @@ -105,7 +104,6 @@ AudioCdSettings *audiocd; #endif ScrobblingSettings *scrobbling; - QMap pages; }; #endif diff -Nru cantata-1.4.2.ds1/gui/qxtmediakeys.cpp cantata-1.5.2.ds2/gui/qxtmediakeys.cpp --- cantata-1.4.2.ds1/gui/qxtmediakeys.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/gui/qxtmediakeys.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -29,13 +29,15 @@ { } -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 @@ shortcuts.clear(); } } + diff -Nru cantata-1.4.2.ds1/gui/qxtmediakeys.h cantata-1.5.2.ds2/gui/qxtmediakeys.h --- cantata-1.4.2.ds1/gui/qxtmediakeys.h 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/qxtmediakeys.h 2015-03-23 20:09:42.000000000 +0000 @@ -35,7 +35,8 @@ QxtMediaKeys(QObject *p); virtual ~QxtMediaKeys() { clear(); } - void activate(bool a); + bool activate(); + void deactivate(); private: void createShortcuts(); diff -Nru cantata-1.4.2.ds1/gui/searchpage.cpp cantata-1.5.2.ds2/gui/searchpage.cpp --- cantata-1.4.2.ds1/gui/searchpage.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/searchpage.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -75,7 +75,7 @@ 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 @@ 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 @@ 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 @@ { 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 @@ if (state&State_CommmentSupported) { categories << QPair(i18n("Comment:"), QLatin1String("comment")); } - categories << QPair(i18n("Date:"), QLatin1String("date")) - << QPair(i18n("File:"), QLatin1String("file")) + categories << QPair(i18n("Date:"), QLatin1String("date")); + if (state&State_ModifiedSupported) { + categories << QPair(i18n("Modified:"), MPDConnection::constModifiedSince); + } + categories << QPair(i18n("File:"), QLatin1String("file")) << QPair(i18n("Any:"), QLatin1String("any")); view->setSearchCategories(categories); } diff -Nru cantata-1.4.2.ds1/gui/searchpage.h cantata-1.5.2.ds2/gui/searchpage.h --- cantata-1.4.2.ds1/gui/searchpage.h 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/gui/searchpage.h 2015-03-23 20:09:42.000000000 +0000 @@ -45,7 +45,7 @@ void setView(int mode); QStringList selectedFiles(bool allowPlaylists=false) const; QList 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 @@ 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 -Nru cantata-1.4.2.ds1/gui/searchpage.ui cantata-1.5.2.ds2/gui/searchpage.ui --- cantata-1.4.2.ds1/gui/searchpage.ui 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/searchpage.ui 2015-03-23 20:09:42.000000000 +0000 @@ -29,6 +29,22 @@ 0 + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 2 + 2 + + + + + diff -Nru cantata-1.4.2.ds1/gui/serversettings.cpp cantata-1.5.2.ds2/gui/serversettings.cpp --- cantata-1.4.2.ds1/gui/serversettings.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/gui/serversettings.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -83,9 +83,8 @@ { setupUi(this); #if defined ENABLE_DEVICES_SUPPORT - musicFolderNoteLabel->setText(musicFolderNoteLabel->text()+ - i18n(" This folder will also be used to locate music files " - "for transferring to (and from) devices.")); + musicFolderNoteLabel->appendText(i18n(" This folder will also be used to locate music files " + "for transferring to (and from) devices.")); #endif connect(combo, SIGNAL(activated(int)), SLOT(showDetails(int))); connect(removeButton, SIGNAL(clicked(bool)), SLOT(remove())); @@ -112,6 +111,10 @@ 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 @@ 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?
      " - "
    • Standard - music collection may be shared, is on another machine, or is already setup
    • " - "
    • Basic - music collection is not shared with others, and Cantata will configure and control the MPD instance
    "), + 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 @@ { int index=combo->currentIndex(); QString cName=1==stackedWidget->currentIndex() ? MPDUser::translatedName() : name->text(); - if (combo->count()>1 && MessageBox::Yes==MessageBox::questionYesNo(this, i18n("Delete %1?", 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 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/gui/serversettings.ui cantata-1.5.2.ds2/gui/serversettings.ui --- cantata-1.4.2.ds1/gui/serversettings.ui 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/serversettings.ui 2015-03-23 20:09:42.000000000 +0000 @@ -40,10 +40,10 @@
    - + - + @@ -168,110 +168,28 @@
    - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 13 - - - - - - + + - <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> - - - true - - - Qt::NoTextInteraction + 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. - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 13 - - - - - - + + - <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> - - - true - - - Qt::NoTextInteraction + When using a local socket the full absolute path to the socket needs to be set. (Port number is not required.) - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 13 - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 13 - - - - - - + + - <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> - - - true - - - Qt::NoTextInteraction + '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. - + Qt::Vertical @@ -338,59 +256,28 @@ - + - <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> - - - true - - - Qt::NoTextInteraction + 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. - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 13 - - - - - - + + - <i><b>NOTE:</b> If no setting is specified for 'Cover filename, then Cantata will use a default of <code>cover</code> </i> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - Qt::NoTextInteraction + If no setting is specified for 'Cover filename, then Cantata will use a default of <code>cover</code> - - + + Qt::Vertical 20 - 363 + 0 @@ -408,9 +295,9 @@
    support/buddylabel.h
    - StateLabel + NoteLabel QLabel -
    widgets/statelabel.h
    +
    widgets/notelabel.h
    LineEdit @@ -423,6 +310,11 @@
    support/pathrequester.h
    1
    + + FlatToolButton + QToolButton +
    support/flattoolbutton.h
    +
    combo diff -Nru cantata-1.4.2.ds1/gui/settings.cpp cantata-1.5.2.ds2/gui/settings.cpp --- cantata-1.4.2.ds1/gui/settings.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/settings.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -32,9 +32,6 @@ #if defined ENABLE_KDE_SUPPORT && defined ENABLE_KWALLET #include #endif -#ifndef ENABLE_KDE_SUPPORT -#include "mediakeys.h" -#endif #include #include #include @@ -137,22 +134,22 @@ 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()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 @@ #ifndef ENABLE_UBUNTU int Settings::libraryView() { - int v=version(); - QString def=ItemView::modeStr(vMusicLibraryItemAlbum::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::sidebar() { if (version()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 @@ 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 @@ } return v.toInt(); } - diff -Nru cantata-1.4.2.ds1/gui/settings.h cantata-1.5.2.ds2/gui/settings.h --- cantata-1.4.2.ds1/gui/settings.h 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/settings.h 2015-03-23 20:09:42.000000000 +0000 @@ -33,12 +33,8 @@ } #endif -class QTimer; - -class Settings : public QObject +class Settings { - Q_OBJECT - public: enum StartupState { @@ -85,8 +81,6 @@ int onlineView(); #endif bool libraryArtistImage(); - int libraryCoverSize(); - int albumsCoverSize(); int albumSort(); int sidebar(); bool libraryYear(); @@ -109,9 +103,6 @@ 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 @@ int playQueueBackgroundBlur(); QString playQueueBackgroundFile(); bool playQueueConfirmClear(); + bool playQueueSearch(); bool playListsStartClosed(); #ifdef ENABLE_HTTP_STREAM_PLAYBACK bool playStream(); @@ -157,13 +149,13 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ bool firstRun() const { return AP_Configured!=state; } -private Q_SLOTS: - void actualSave(); - private: int getBoolAsInt(const QString &key, int def); @@ -325,7 +316,6 @@ }; AppState state; - QTimer *timer; int ver; #if defined ENABLE_KDE_SUPPORT && defined ENABLE_KWALLET KWallet::Wallet *wallet; diff -Nru cantata-1.4.2.ds1/gui/shortcutssettingspage.cpp cantata-1.5.2.ds2/gui/shortcutssettingspage.cpp --- cantata-1.4.2.ds1/gui/shortcutssettingspage.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/shortcutssettingspage.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -39,13 +39,8 @@ #include #include -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 @@ 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; icount(); ++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 -Nru cantata-1.4.2.ds1/gui/shortcutssettingspage.h cantata-1.5.2.ds2/gui/shortcutssettingspage.h --- cantata-1.4.2.ds1/gui/shortcutssettingspage.h 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/shortcutssettingspage.h 2015-03-23 20:09:42.000000000 +0000 @@ -33,23 +33,13 @@ 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 -Nru cantata-1.4.2.ds1/gui/stdactions.cpp cantata-1.5.2.ds2/gui/stdactions.cpp --- cantata-1.4.2.ds1/gui/stdactions.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/stdactions.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -39,11 +39,7 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/gui/stdactions.h cantata-1.5.2.ds2/gui/stdactions.h --- cantata-1.4.2.ds1/gui/stdactions.h 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/gui/stdactions.h 2015-03-23 20:09:42.000000000 +0000 @@ -44,7 +44,6 @@ Action *decreaseVolumeAction; Action *savePlayQueueAction; Action *addToPlayQueueAction; - Action *addRandomToPlayQueueAction; Action *replacePlayQueueAction; Action *addWithPriorityAction; Action *addToStoredPlaylistAction; diff -Nru cantata-1.4.2.ds1/gui/trayitem.cpp cantata-1.5.2.ds2/gui/trayitem.cpp --- cantata-1.4.2.ds1/gui/trayitem.cpp 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/trayitem.cpp 2015-03-23 20:09:42.000000000 +0000 @@ -40,7 +40,11 @@ #endif #include #include +#ifdef Q_OS_MAC +#include "mac/macnotify.h" +#endif +#ifndef Q_OS_MAC class VolumeSliderEventHandler : public QObject { public: @@ -66,20 +70,41 @@ 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 @@ 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 @@ 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 @@ trayItem->show(); connect(trayItem, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(trayItemClicked(QSystemTrayIcon::ActivationReason))); #endif + #endif } #ifdef ENABLE_KDE_SUPPORT @@ -166,6 +196,9 @@ #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 @@ 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 @@ 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 @@ #endif } } + #endif } diff -Nru cantata-1.4.2.ds1/gui/trayitem.h cantata-1.5.2.ds2/gui/trayitem.h --- cantata-1.4.2.ds1/gui/trayitem.h 2014-09-28 16:30:13.000000000 +0000 +++ cantata-1.5.2.ds2/gui/trayitem.h 2015-03-23 20:09:42.000000000 +0000 @@ -39,6 +39,7 @@ class Notify; #endif class MainWindow; +class QImage; struct Song; class TrayItem : public QObject @@ -48,7 +49,13 @@ 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 @@ #endif } } + #endif void songChanged(const Song &song, bool isPlaying); private Q_SLOTS: @@ -85,6 +93,8 @@ #endif private: + #ifndef Q_OS_MAC + MainWindow *mw; #ifdef ENABLE_KDE_SUPPORT KStatusNotifierItem *trayItem; @@ -96,6 +106,8 @@ #ifdef QT_QTDBUS_FOUND Notify *notification; #endif + + #endif }; #endif diff -Nru cantata-1.4.2.ds1/http/httpserver.cpp cantata-1.5.2.ds2/http/httpserver.cpp --- cantata-1.4.2.ds1/http/httpserver.cpp 2014-09-28 16:30:05.000000000 +0000 +++ cantata-1.5.2.ds2/http/httpserver.cpp 2015-03-23 20:09:31.000000000 +0000 @@ -67,7 +67,6 @@ , closeTimer(0) { force=Settings::self()->alwaysUseHttp(); - connect(MPDConnection::self(), SIGNAL(socketAddress(QString)), this, SLOT(mpdAddress(QString))); connect(MPDConnection::self(), SIGNAL(cantataStreams(QList,bool)), this, SLOT(cantataStreams(QList,bool))); connect(MPDConnection::self(), SIGNAL(cantataStreams(QStringList)), this, SLOT(cantataStreams(QStringList))); connect(MPDConnection::self(), SIGNAL(removedIds(QSet)), this, SLOT(removedIds(QSet))); @@ -92,7 +91,7 @@ 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 @@ 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 @@ closeTimer->start(1000); } -void HttpServer::mpdAddress(const QString &a) -{ - mpdAddr=a; -} - void HttpServer::cantataStreams(const QStringList &files) { DBUG << files; diff -Nru cantata-1.4.2.ds1/http/httpserver.h cantata-1.5.2.ds2/http/httpserver.h --- cantata-1.4.2.ds1/http/httpserver.h 2014-09-28 16:30:05.000000000 +0000 +++ cantata-1.5.2.ds2/http/httpserver.h 2015-03-23 20:09:31.000000000 +0000 @@ -80,7 +80,6 @@ private Q_SLOTS: void stop(); void startCloseTimer(); - void mpdAddress(const QString &a); void cantataStreams(const QStringList &files); void cantataStreams(const QList &songs, bool isUpdate); void removedIds(const QSet &ids); @@ -93,7 +92,6 @@ Thread *thread; HttpSocket *socket; - QString mpdAddr; QSet streamIds; // Currently playing MPD stream IDs QTimer *closeTimer; #endif diff -Nru cantata-1.4.2.ds1/http/httpserversettings.cpp cantata-1.5.2.ds2/http/httpserversettings.cpp --- cantata-1.4.2.ds1/http/httpserversettings.cpp 2014-09-28 16:30:05.000000000 +0000 +++ cantata-1.5.2.ds2/http/httpserversettings.cpp 2015-03-23 20:09:31.000000000 +0000 @@ -36,15 +36,38 @@ static QString details(const QNetworkInterface &iface) { QString d=iface.humanReadableName(); - if (!iface.addressEntries().isEmpty()) { - d+=QLatin1String(" - ")+iface.addressEntries().first().ip().toString(); + QList 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 @@ { setupUi(this); initInterfaces(httpInterface); + + #ifdef Q_OS_MAC + expandingSpacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed); + #endif } void HttpServerSettings::load() diff -Nru cantata-1.4.2.ds1/http/httpserversettings.ui cantata-1.5.2.ds2/http/httpserversettings.ui --- cantata-1.4.2.ds1/http/httpserversettings.ui 2014-09-28 16:30:05.000000000 +0000 +++ cantata-1.5.2.ds2/http/httpserversettings.ui 2015-03-23 20:09:31.000000000 +0000 @@ -35,44 +35,28 @@
    - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 16 - + + + 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. - +
    - + - <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> - - - true - - - Qt::NoTextInteraction + If you choose 'Local loopback' for 'Network interface', then MPD <b>must</b> also be on this computer. - + Qt::Vertical 20 - 13 + 0 @@ -85,6 +69,11 @@ QLabel
    support/buddylabel.h
    + + NoteLabel + QLabel +
    widgets/notelabel.h
    +
    diff -Nru cantata-1.4.2.ds1/http/httpsocket.cpp cantata-1.5.2.ds2/http/httpsocket.cpp --- cantata-1.4.2.ds1/http/httpsocket.cpp 2014-09-28 16:30:05.000000000 +0000 +++ cantata-1.5.2.ds2/http/httpsocket.cpp 2015-03-23 20:09:31.000000000 +0000 @@ -258,13 +258,15 @@ 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,bool)), this, SLOT(cantataStreams(QList,bool))); connect(MPDConnection::self(), SIGNAL(cantataStreams(QStringList)), this, SLOT(cantataStreams(QStringList))); connect(MPDConnection::self(), SIGNAL(removedIds(QSet)), this, SLOT(removedIds(QSet))); + connect(this, SIGNAL(newConnection()), SLOT(handleNewConnection())); } bool HttpSocket::openPort(const QHostAddress &a, quint16 p) @@ -304,12 +306,14 @@ 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 @@ } 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 -Nru cantata-1.4.2.ds1/http/httpsocket.h cantata-1.5.2.ds2/http/httpsocket.h --- cantata-1.4.2.ds1/http/httpsocket.h 2014-09-28 16:30:05.000000000 +0000 +++ cantata-1.5.2.ds2/http/httpsocket.h 2015-03-23 20:09:31.000000000 +0000 @@ -41,9 +41,9 @@ 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 @@ 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: bool write(QTcpSocket *socket, char *buffer, qint32 bytesRead, bool &stop); + void setUrlAddress(); private: QSet newlyAddedFiles; // Holds cantata strema filenames as added to MPD via "add" QMap streamIds; // Maps MPD playqueue song ID to fileName QString cfgInterface; QString ifaceAddress; + QString urlAddr; QString mpdAddr; bool terminated; }; diff -Nru cantata-1.4.2.ds1/icons/CMakeLists.txt cantata-1.5.2.ds2/icons/CMakeLists.txt --- cantata-1.4.2.ds1/icons/CMakeLists.txt 2014-09-28 16:30:21.000000000 +0000 +++ cantata-1.5.2.ds2/icons/CMakeLists.txt 2015-03-23 20:09:47.000000000 +0000 @@ -46,3 +46,6 @@ 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 -Nru cantata-1.4.2.ds1/icons/media-next-rtl-dark.svg cantata-1.5.2.ds2/icons/media-next-rtl-dark.svg --- cantata-1.4.2.ds1/icons/media-next-rtl-dark.svg 2014-09-28 16:30:21.000000000 +0000 +++ cantata-1.5.2.ds2/icons/media-next-rtl-dark.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ - - - - - - - diff -Nru cantata-1.4.2.ds1/icons/media-next-rtl-light.svg cantata-1.5.2.ds2/icons/media-next-rtl-light.svg --- cantata-1.4.2.ds1/icons/media-next-rtl-light.svg 2014-09-28 16:30:21.000000000 +0000 +++ cantata-1.5.2.ds2/icons/media-next-rtl-light.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ - - - - - - - diff -Nru cantata-1.4.2.ds1/icons/media-prev-rtl-dark.svg cantata-1.5.2.ds2/icons/media-prev-rtl-dark.svg --- cantata-1.4.2.ds1/icons/media-prev-rtl-dark.svg 2014-09-28 16:30:21.000000000 +0000 +++ cantata-1.5.2.ds2/icons/media-prev-rtl-dark.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ - - - - - - - diff -Nru cantata-1.4.2.ds1/icons/media-prev-rtl-light.svg cantata-1.5.2.ds2/icons/media-prev-rtl-light.svg --- cantata-1.4.2.ds1/icons/media-prev-rtl-light.svg 2014-09-28 16:30:21.000000000 +0000 +++ cantata-1.5.2.ds2/icons/media-prev-rtl-light.svg 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ - - - - - - - diff -Nru cantata-1.4.2.ds1/icons/stars.svg cantata-1.5.2.ds2/icons/stars.svg --- cantata-1.4.2.ds1/icons/stars.svg 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/icons/stars.svg 2015-03-23 20:09:47.000000000 +0000 @@ -0,0 +1,4 @@ + + + + Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-artist128.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-artist128.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-artist16.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-artist16.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-artist22.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-artist22.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-artist32.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-artist32.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-artist48.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-artist48.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-artist64.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-artist64.png differ diff -Nru cantata-1.4.2.ds1/icons/view-media-artist.svg cantata-1.5.2.ds2/icons/view-media-artist.svg --- cantata-1.4.2.ds1/icons/view-media-artist.svg 2014-09-28 16:30:21.000000000 +0000 +++ cantata-1.5.2.ds2/icons/view-media-artist.svg 2015-03-23 20:09:47.000000000 +0000 @@ -1,42 +1,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-artist-various128.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-artist-various128.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-artist-various16.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-artist-various16.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-artist-various22.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-artist-various22.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-artist-various32.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-artist-various32.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-artist-various48.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-artist-various48.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-artist-various64.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-artist-various64.png differ diff -Nru cantata-1.4.2.ds1/icons/view-media-artist-various.svg cantata-1.5.2.ds2/icons/view-media-artist-various.svg --- cantata-1.4.2.ds1/icons/view-media-artist-various.svg 2014-09-28 16:30:21.000000000 +0000 +++ cantata-1.5.2.ds2/icons/view-media-artist-various.svg 2015-03-23 20:09:47.000000000 +0000 @@ -1,71 +1,32 @@ - - - - - - - - - - + + - - - - - - - - - - - - - - - + + + + - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-repeat16.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-repeat16.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-repeat22.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-repeat22.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-repeat24.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-repeat24.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-repeat32.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-repeat32.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-repeat48.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-repeat48.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-repeat64.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-repeat64.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-shuffle16.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-shuffle16.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-shuffle22.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-shuffle22.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-shuffle24.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-shuffle24.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-shuffle32.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-shuffle32.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-shuffle48.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-shuffle48.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/icons/view-media-shuffle64.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/icons/view-media-shuffle64.png differ diff -Nru cantata-1.4.2.ds1/INSTALL cantata-1.5.2.ds2/INSTALL --- cantata-1.4.2.ds1/INSTALL 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/INSTALL 2015-03-23 20:09:38.000000000 +0000 @@ -29,7 +29,7 @@ ------ 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 @@ -DCANTATA_TRANSLATIONS= 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 @@ -DINSTALL_UBUNTU_ICONS= Install monochrome system tray icons for Ubuntu. + -DCANTATA_HELPERS_LIB_DIR= + 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: + Windows specific: @@ -153,15 +160,31 @@ Path where Inno Setpup Compiler should place the catata setup exe. Default: z:\ - -DCANTATA_MINGW_LIBS=\mingwm10.dll;libgcc_s_dw2-1.dll + -DCANTATA_MINGW_LIBS=/mingwm10.dll;/libgcc_s_dw2-1.dll Extra MinGW libraries required for install stage. + Qt4 builds only - not required for Qt5. Default: - + + -DCANTATA_SSL_LIBS=/libeay32.dll;/ssleay32.dll + SSL libraries + Default: + -DCANTATA_OXYGEN_DIR= Path to Oxygen icons, required for install stage. Default: + 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 -Nru cantata-1.4.2.ds1/mac/CMakeLists.txt cantata-1.5.2.ds2/mac/CMakeLists.txt --- cantata-1.4.2.ds1/mac/CMakeLists.txt 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/mac/CMakeLists.txt 2015-03-23 20:09:36.000000000 +0000 @@ -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) + Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/mac/dmg/background.png and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/mac/dmg/background.png differ Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/mac/dmg/background.xcf and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/mac/dmg/background.xcf differ diff -Nru cantata-1.4.2.ds1/mac/dmg/create-dmg.sh.in cantata-1.5.2.ds2/mac/dmg/create-dmg.sh.in --- cantata-1.4.2.ds1/mac/dmg/create-dmg.sh.in 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/mac/dmg/create-dmg.sh.in 2015-03-23 20:09:36.000000000 +0000 @@ -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@last.fm, muesli@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@-@CANTATA_VERSION_WITH_SPIN@.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@.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" Binary files /tmp/PxIIrGweNq/cantata-1.4.2.ds1/mac/dmg/DS_Store.in and /tmp/rKL_TZWXSK/cantata-1.5.2.ds2/mac/dmg/DS_Store.in differ diff -Nru cantata-1.4.2.ds1/mac/dockmenu.cpp cantata-1.5.2.ds2/mac/dockmenu.cpp --- cantata-1.4.2.ds1/mac/dockmenu.cpp 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/mac/dockmenu.cpp 2015-03-23 20:09:36.000000000 +0000 @@ -0,0 +1,45 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 "dockmenu.h" +#include "gui/stdactions.h" +#include "mpd/mpdstatus.h" +#include "support/localize.h" + +DockMenu::DockMenu(QWidget *p) + : QMenu(p) +{ + 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 DockMenu::update(MPDStatus * const status) +{ + playPauseAction->setEnabled(status->playlistLength()>0); + playPauseAction->setText(MPDState_Playing==status->state() ? i18n("Pause") : i18n("Play")); +} diff -Nru cantata-1.4.2.ds1/mac/dockmenu.h cantata-1.5.2.ds2/mac/dockmenu.h --- cantata-1.4.2.ds1/mac/dockmenu.h 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/mac/dockmenu.h 2015-03-23 20:09:36.000000000 +0000 @@ -0,0 +1,44 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 DOCKMENU_H +#define DOCKMENU_H + +#include + +class QAction; +class MPDStatus; + +class DockMenu : public QMenu +{ +public: + DockMenu(QWidget *w); + virtual ~DockMenu() { } + + void update(MPDStatus * const status); + +private: + QAction *playPauseAction; +}; + +#endif diff -Nru cantata-1.4.2.ds1/mac/icons/CMakeLists.txt cantata-1.5.2.ds2/mac/icons/CMakeLists.txt --- cantata-1.4.2.ds1/mac/icons/CMakeLists.txt 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/mac/icons/CMakeLists.txt 2015-03-23 20:09:36.000000000 +0000 @@ -197,9 +197,23 @@ 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 -Nru cantata-1.4.2.ds1/mac/icons/index.theme cantata-1.5.2.ds2/mac/icons/index.theme --- cantata-1.4.2.ds1/mac/icons/index.theme 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/mac/icons/index.theme 2015-03-23 20:09:36.000000000 +0000 @@ -17,7 +17,7 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/mac/icons/README cantata-1.5.2.ds2/mac/icons/README --- cantata-1.4.2.ds1/mac/icons/README 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/mac/icons/README 2015-03-23 20:09:36.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/mac/Info.plist.cmake cantata-1.5.2.ds2/mac/Info.plist.cmake --- cantata-1.4.2.ds1/mac/Info.plist.cmake 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/mac/Info.plist.cmake 2015-03-23 20:09:36.000000000 +0000 @@ -0,0 +1,40 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + @MACOSX_BUNDLE_EXECUTABLE@ + CFBundleGetInfoString + + CFBundleIconFile + @MACOSX_BUNDLE_ICON_FILE@ + CFBundleIdentifier + @PROJECT_REV_URL@ + CFBundleInfoDictionaryVersion + 6.0 + CFBundleLongVersionString + @MACOSX_BUNDLE_LONG_VERSION_STRING@ + CFBundleName + @MACOSX_BUNDLE_BUNDLE_NAME@ + CFBundlePackageType + APPL + CFBundleShortVersionString + @MACOSX_BUNDLE_SHORT_VERSION_STRING@ + CFBundleSignature + ???? + CFBundleVersion + + CSResourcesFileMapped + + LSRequiresCarbon + + NSHumanReadableCopyright + + NSPrincipalClass + NSApplication + NSHighResolutionCapable + True + + diff -Nru cantata-1.4.2.ds1/mac/macnotify.h cantata-1.5.2.ds2/mac/macnotify.h --- cantata-1.4.2.ds1/mac/macnotify.h 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/mac/macnotify.h 2015-03-23 20:09:36.000000000 +0000 @@ -0,0 +1,35 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 MACNOTIFY_H +#define MACNOTIFY_H + +class QString; +class QImage; + +namespace MacNotify +{ + extern void showMessage(const QString &title, const QString &text, const QImage &img); +} + +#endif diff -Nru cantata-1.4.2.ds1/mac/macnotify.mm cantata-1.5.2.ds2/mac/macnotify.mm --- cantata-1.4.2.ds1/mac/macnotify.mm 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/mac/macnotify.mm 2015-03-23 20:09:36.000000000 +0000 @@ -0,0 +1,84 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 +#include +#ifdef QT_MAC_EXTRAS_FOUND +#include +#include +#include +#endif +#include + +@interface UserNotificationItem : NSObject { } + +- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification; +@end + +@implementation UserNotificationItem +- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification { + Q_UNUSED(center); + Q_UNUSED(notification); + return YES; +} +@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 -Nru cantata-1.4.2.ds1/mac/powermanagement.cpp cantata-1.5.2.ds2/mac/powermanagement.cpp --- cantata-1.4.2.ds1/mac/powermanagement.cpp 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/mac/powermanagement.cpp 2015-03-23 20:09:36.000000000 +0000 @@ -0,0 +1,70 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 +#include +#include + +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 -Nru cantata-1.4.2.ds1/mac/powermanagement.h cantata-1.5.2.ds2/mac/powermanagement.h --- cantata-1.4.2.ds1/mac/powermanagement.h 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/mac/powermanagement.h 2015-03-23 20:09:36.000000000 +0000 @@ -0,0 +1,48 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 POWERMANAGEMENT_H +#define POWERMANAGEMENT_H + +#include + +class PowerManagement : public QObject +{ + Q_OBJECT + +public: + static PowerManagement * self(); + PowerManagement(); + + void setInhibitSuspend(bool i) { inhibitSuspendWhilstPlaying=i; } + bool inhibitSuspend() const { return inhibitSuspendWhilstPlaying; } + void emitResuming(); + +Q_SIGNALS: + void resuming(); + +private: + bool inhibitSuspendWhilstPlaying; +}; + +#endif diff -Nru cantata-1.4.2.ds1/models/albumsmodel.cpp cantata-1.5.2.ds2/models/albumsmodel.cpp --- cantata-1.4.2.ds1/models/albumsmodel.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/albumsmodel.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -54,53 +54,6 @@ 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 @@ 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 @@ 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(al->coverSong()); + return v; + } } } else { SongItem *si=static_cast(item); @@ -291,11 +225,17 @@ #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 @@ } #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 @@ 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::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::Iterator it=items.begin(); QList::Iterator end=items.end(); QString artist=MusicLibraryItemRoot::artistName(song); @@ -497,10 +446,12 @@ 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::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::Iterator it=items.begin(); QList::Iterator end=items.end(); const QString &albumArtist=song.albumArtist(); @@ -572,7 +523,7 @@ #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 @@ } } -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 @@ , 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 @@ { 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 @@ return year==o.year ? id.compare(o.id)<0 : yearget(coverSong(), iconSize()); - } - return 0; -} #endif const Song & AlbumsModel::AlbumItem::coverSong() diff -Nru cantata-1.4.2.ds1/models/albumsmodel.h cantata-1.5.2.ds2/models/albumsmodel.h --- cantata-1.4.2.ds1/models/albumsmodel.h 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/albumsmodel.h 2015-03-23 20:09:40.000000000 +0000 @@ -40,14 +40,6 @@ 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 @@ 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 @@ 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 songs; @@ -154,7 +146,7 @@ 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 -Nru cantata-1.4.2.ds1/models/devicesmodel.cpp cantata-1.5.2.ds2/models/devicesmodel.cpp --- cantata-1.4.2.ds1/models/devicesmodel.cpp 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/models/devicesmodel.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -71,8 +71,14 @@ #include "modeltest.h" #endif + #include -#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 @@ } return v; } + case Cantata::Role_ListImage: + return MusicLibraryItem::Type_Album==item->itemType(); default: break; } @@ -272,11 +280,14 @@ 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(collections.at(idx)); if (Device::AudioCd==dev->devType()) { + DBUG << "Set cover of CD"; + Covers::self()->updateCover(song, img, file); static_cast(dev)->setCover(song, img, file); } } @@ -290,10 +301,7 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/models/devicesmodel.h cantata-1.5.2.ds2/models/devicesmodel.h --- cantata-1.4.2.ds1/models/devicesmodel.h 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/devicesmodel.h 2015-03-23 20:09:40.000000000 +0000 @@ -42,6 +42,7 @@ public: static DevicesModel * self(); + static void enableDebug(); static QString fixDevicePath(const QString &path); DevicesModel(QObject *parent = 0); diff -Nru cantata-1.4.2.ds1/models/digitallyimported.cpp cantata-1.5.2.ds2/models/digitallyimported.cpp --- cantata-1.4.2.ds1/models/digitallyimported.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/digitallyimported.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -125,6 +125,22 @@ 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 -Nru cantata-1.4.2.ds1/models/digitallyimported.h cantata-1.5.2.ds2/models/digitallyimported.h --- cantata-1.4.2.ds1/models/digitallyimported.h 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/digitallyimported.h 2015-03-23 20:09:40.000000000 +0000 @@ -60,6 +60,7 @@ const QString & statusString() const { return status; } + bool isDiUrl(const QString &u) const; QString modifyUrl(const QString &u) const; public Q_SLOTS: diff -Nru cantata-1.4.2.ds1/models/dirviewmodel.cpp cantata-1.5.2.ds2/models/dirviewmodel.cpp --- cantata-1.4.2.ds1/models/dirviewmodel.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/dirviewmodel.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -204,6 +204,9 @@ 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 -Nru cantata-1.4.2.ds1/models/modeltest.cpp cantata-1.5.2.ds2/models/modeltest.cpp --- cantata-1.4.2.ds1/models/modeltest.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/modeltest.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -472,7 +472,7 @@ */ 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 -Nru cantata-1.4.2.ds1/models/musiclibraryitemalbum.cpp cantata-1.5.2.ds2/models/musiclibraryitemalbum.cpp --- cantata-1.4.2.ds1/models/musiclibraryitemalbum.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/musiclibraryitemalbum.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -42,92 +42,11 @@ #include #include -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 @@ } 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()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 @@ , 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 @@ const QString & MusicLibraryItemAlbum::cover() const { if (Song::SingleTracks!=m_type && m_coverName.isEmpty() && !m_coverRequested && childCount()) { - MusicLibraryItemSong *firstSong=static_cast(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(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(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(parentItem()->parentItem())->requestCover(song); - } - #endif - #ifdef ENABLE_ONLINE_SERVICES - else if (root && root->isOnlineService()) { - img.img=OnlineServicesModel::self()->requestImage(static_cast(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 @@ Song MusicLibraryItemAlbum::coverSong() const { - MusicLibraryItemSong *firstSong=static_cast(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(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(parentItem()->parentItem()) : 0; + if (root) { + #ifdef ENABLE_ONLINE_SERVICES + if (root->isOnlineService()) { + song.setIsFromOnlineService(static_cast(root)->id()); + song.setExtraField(Song::OnlineImageUrl, m_imageUrl); + } + #endif + #ifdef ENABLE_DEVICES_SUPPORT + if (root->isDevice()) { + song.setIsFromDevice(static_cast(root)->id()); + } + #endif + } + #endif + } return song; } @@ -449,9 +313,3 @@ Song::storeAlbumYear(song->song()); } } - -bool MusicLibraryItemAlbum::largeImages() const -{ - return m_parentItem && m_parentItem->parentItem() && Type_Root==m_parentItem->parentItem()->itemType() && - static_cast(m_parentItem->parentItem())->useLargeImages(); -} diff -Nru cantata-1.4.2.ds1/models/musiclibraryitemalbum.h cantata-1.5.2.ds2/models/musiclibraryitemalbum.h --- cantata-1.4.2.ds1/models/musiclibraryitemalbum.h 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/models/musiclibraryitemalbum.h 2015-03-23 20:09:40.000000000 +0000 @@ -40,38 +40,17 @@ 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 @@ // 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 @@ 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 -Nru cantata-1.4.2.ds1/models/musiclibraryitemartist.cpp cantata-1.5.2.ds2/models/musiclibraryitemartist.cpp --- cantata-1.4.2.ds1/models/musiclibraryitemartist.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/musiclibraryitemartist.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -50,42 +50,31 @@ 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 @@ } 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(childItem(0)); - MusicLibraryItemSong *firstSong=firstAlbum ? static_cast(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 @@ 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(childItem(0)); - MusicLibraryItemSong *firstSong=firstAlbum ? static_cast(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::ConstIterator it=m_indexes.find(s.albumId()); - - if (m_indexes.end()==it) { - return create ? createAlbum(s) : 0; - } - return static_cast(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 @@ // 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 @@ return true; } - QHash::ConstIterator it=m_indexes.find(i18n("Single Tracks")); - - if (m_indexes.end()!=it) { - return static_cast(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 @@ (*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::iterator it=m_childItems.begin(); - QList::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(childItem(0)); + MusicLibraryItemSong *firstSong=firstAlbum ? static_cast(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(m_parentItem)->useLargeImages(); + if (m_indexes.count()==m_childItems.count()) { + if (m_childItems.isEmpty()) { + return 0; + } + + QHash::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.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::ConstIterator it=m_childItems.constBegin(); + QList::ConstIterator end=m_childItems.constEnd(); + for (int i=0; it!=end; ++it, ++i) { + MusicLibraryItemAlbum *currenAlbum=static_cast(*it); + if (!al && currenAlbum->albumId()==key) { + al=currenAlbum; + } + m_indexes.insert(currenAlbum->albumId(), i); + } + return al; } + diff -Nru cantata-1.4.2.ds1/models/musiclibraryitemartist.h cantata-1.5.2.ds2/models/musiclibraryitemartist.h --- cantata-1.4.2.ds1/models/musiclibraryitemartist.h 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/musiclibraryitemartist.h 2015-03-23 20:09:40.000000000 +0000 @@ -42,46 +42,43 @@ 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 m_indexes; + mutable QHash m_indexes; }; #endif diff -Nru cantata-1.4.2.ds1/models/musiclibraryitempodcast.cpp cantata-1.5.2.ds2/models/musiclibraryitempodcast.cpp --- cantata-1.4.2.ds1/models/musiclibraryitempodcast.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/musiclibraryitempodcast.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -33,6 +33,7 @@ #include "support/utils.h" #include "gui/covers.h" #include "online/rssparser.h" +#include "online/podcastservice.h" #include #include #include @@ -40,8 +41,6 @@ #include #include -static QPixmap *theDefaultIcon=0; - static QLatin1String constTopTag("podcast"); static QLatin1String constImageAttribute("img"); static QLatin1String constRssAttribute("rss"); @@ -76,8 +75,6 @@ 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 @@ 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(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::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::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 @@ return 0; } -bool MusicLibraryItemPodcast::largeImages() const -{ - return m_parentItem && Type_Root==m_parentItem->itemType() && - static_cast(m_parentItem)->useLargeImages(); -} - const QString & MusicLibraryItemPodcastEpisode::published() { if (publishedDate.isEmpty()) { diff -Nru cantata-1.4.2.ds1/models/musiclibraryitempodcast.h cantata-1.5.2.ds2/models/musiclibraryitempodcast.h --- cantata-1.4.2.ds1/models/musiclibraryitempodcast.h 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/musiclibraryitempodcast.h 2015-03-23 20:09:40.000000000 +0000 @@ -58,30 +58,25 @@ 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 &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 @@ 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 -Nru cantata-1.4.2.ds1/models/musiclibraryitemroot.cpp cantata-1.5.2.ds2/models/musiclibraryitemroot.cpp --- cantata-1.4.2.ds1/models/musiclibraryitemroot.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/musiclibraryitemroot.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -45,18 +45,14 @@ MusicLibraryItemArtist * MusicLibraryItemRoot::artist(const Song &s, bool create) { QString aa=songArtist(s); - QHash::ConstIterator it=m_indexes.find(aa); - - if (m_indexes.end()==it) { - return create ? createArtist(s) : 0; - } - return static_cast(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 @@ for (; it!=m_childItems.end(); ) { if (various!=(*it) && static_cast(*it)->allSingleTrack()) { if (!various) { - QHash::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(m_childItems.at(*it)); } } various->addToSingleTracks(static_cast(*it)); @@ -92,26 +86,18 @@ } if (various) { - m_indexes.clear(); if (created) { m_childItems.append(various); } - it=m_childItems.begin(); - QList::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::ConstIterator it=m_indexes.find(Song::variousArtists()); - - if (m_indexes.end()!=it) { - return static_cast(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 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 @@ 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 @@ 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 @@ #endif return rv; } -#include + quint32 MusicLibraryItemRoot::fromXML(QXmlStreamReader &reader, const QDateTime &date, bool *dateUnreliable, const QString &baseFolder, MusicLibraryProgressMonitor *prog) { if (isFlat) { @@ -502,12 +495,14 @@ 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 @@ return artistName(s); } + +MusicLibraryItemArtist * MusicLibraryItemRoot::getArtist(const QString &key) const +{ + if (m_indexes.count()==m_childItems.count()) { + if (m_childItems.isEmpty()) { + return 0; + } + + QHash::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.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::ConstIterator it=m_childItems.constBegin(); + QList::ConstIterator end=m_childItems.constEnd(); + for (int i=0; it!=end; ++it, ++i) { + MusicLibraryItemArtist *currenArtist=static_cast(*it); + if (!ar && currenArtist->data()==key) { + ar=currenArtist; + } + m_indexes.insert(currenArtist->data(), i); + } + return ar; +} diff -Nru cantata-1.4.2.ds1/models/musiclibraryitemroot.h cantata-1.5.2.ds2/models/musiclibraryitemroot.h --- cantata-1.4.2.ds1/models/musiclibraryitemroot.h 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/models/musiclibraryitemroot.h 2015-03-23 20:09:41.000000000 +0000 @@ -59,9 +59,6 @@ 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 @@ void add(const QSet &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 @@ 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 m_indexes; + bool isFlat; + mutable QHash m_indexes; MusicModel *m_model; }; diff -Nru cantata-1.4.2.ds1/models/musiclibraryitemsong.cpp cantata-1.5.2.ds2/models/musiclibraryitemsong.cpp --- cantata-1.4.2.ds1/models/musiclibraryitemsong.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/musiclibraryitemsong.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -56,12 +56,12 @@ { // Reduce memory usage by only storing genres in a set if required... if (0==m_genres) { - QSet g=m_song.genre.split(QLatin1Char(';'), QString::SkipEmptyParts).toSet(); + QStringList g=m_song.genres(); if (g.count()<2) { m_genres=(QSet *)1; } else { m_genres=new QSet(); - *m_genres=g; + *m_genres=g.toSet(); } } } diff -Nru cantata-1.4.2.ds1/models/musiclibrarymodel.cpp cantata-1.5.2.ds2/models/musiclibrarymodel.cpp --- cantata-1.4.2.ds1/models/musiclibrarymodel.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/musiclibrarymodel.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -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 @@ : MusicModel(parent) , mpdModel(isMpdModel) , checkable(isCheckable) + , artistImages(false) , rootItem(new MusicLibraryItemRoot) , databaseTimeUnreliable(false) { @@ -160,6 +162,20 @@ delete rootItem; } +void MusicLibraryModel::readConfig() +{ + #ifndef ENABLE_UBUNTU + bool aa=Settings::self()->libraryArtistImage(); + if (aa!=artistImages) { + artistImages=aa; + for (int r=0; rchildItem(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 @@ return f; } } + + if (Cantata::Role_ListImage==role && artistImages) { + MusicLibraryItem *item = static_cast(index.internalPointer()); + return MusicLibraryItem::Type_Album==item->itemType() || MusicLibraryItem::Type_Artist==item->itemType(); + } + return MusicModel::data(index, role); } @@ -348,14 +370,11 @@ 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 @@ 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 @@ 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 @@ 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::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 @@ rootItem->toXML(cacheFileName(), databaseTime, databaseTimeUnreliable); endResetModel(); if (mpdModel) { - AlbumsModel::self()->update(rootItem); + AlbumsModel::self()->update(rootItem, false); } } @@ -714,66 +731,61 @@ // 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 -Nru cantata-1.4.2.ds1/models/musiclibrarymodel.h cantata-1.5.2.ds2/models/musiclibrarymodel.h --- cantata-1.4.2.ds1/models/musiclibrarymodel.h 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/musiclibrarymodel.h 2015-03-23 20:09:40.000000000 +0000 @@ -55,6 +55,7 @@ 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 @@ QSet getAlbumArtists(); bool update(const QSet &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 & genres() const { return rootItem->genres(); } @@ -127,6 +122,7 @@ private: bool mpdModel; bool checkable; + bool artistImages; MusicLibraryItemRoot *rootItem; QDateTime databaseTime; bool databaseTimeUnreliable; diff -Nru cantata-1.4.2.ds1/models/musicmodel.cpp cantata-1.5.2.ds2/models/musicmodel.cpp --- cantata-1.4.2.ds1/models/musicmodel.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/musicmodel.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -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 @@ -102,33 +103,20 @@ #ifndef ENABLE_UBUNTU case Qt::DecorationRole: switch (item->itemType()) { - case MusicLibraryItem::Type_Root: { - QImage img=static_cast(item)->image(); - if (!img.isNull()) { - return img; - } + case MusicLibraryItem::Type_Root: return static_cast(item)->icon(); - } - case MusicLibraryItem::Type_Artist: { - MusicLibraryItemArtist *artist = static_cast(item); - return artist->isVarious() ? Icons::self()->variousArtistsIcon : Icons::self()->artistIcon; - } + case MusicLibraryItem::Type_Artist: + return static_cast(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(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(item)->cover(); - } - case MusicLibraryItem::Type_Song: return Song::Playlist==static_cast(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(item)->song().type ? Icons::self()->playlistIcon : Icons::self()->audioFileIcon; + default: + return QVariant(); } #endif case Cantata::Role_BriefMainText: @@ -157,6 +145,9 @@ } 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 @@ (0==item->childCount() ? item->displayData(true) : (item->displayData(true)+"
    "+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 @@ Utils::formatTime(static_cast(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(item)->cover(); + case MusicLibraryItem::Type_Artist: + return static_cast(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(item)->cover(); - } + v.setValue(static_cast(item)->coverSong()); + break; case MusicLibraryItem::Type_Artist: - if (static_cast(item->parentItem())->useArtistImages()) { - return static_cast(item)->cover(); - } + v.setValue(static_cast(item)->coverSong()); break; #ifdef ENABLE_ONLINE_SERVICES case MusicLibraryItem::Type_Podcast: - if (MusicLibraryItemAlbum::CoverNone==MusicLibraryItemAlbum::currentCoverSize()) { - return Icons::self()->podcastIcon; - } else { - return static_cast(item)->cover(); - } + v.setValue(static_cast(item)->coverSong()); + break; #endif default: - #ifdef ENABLE_UBUNTU - return QString(); - #endif break; } return v; @@ -242,17 +230,6 @@ 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 -Nru cantata-1.4.2.ds1/models/onlineservicesmodel.cpp cantata-1.5.2.ds2/models/onlineservicesmodel.cpp --- cantata-1.4.2.ds1/models/onlineservicesmodel.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/onlineservicesmodel.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -58,7 +58,6 @@ #include #include #include -#include #if defined ENABLE_MODEL_TEST #include "modeltest.h" #endif @@ -78,15 +77,14 @@ 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 @@ if (static_cast(item)->downloadProgress()>=0) { return MultiMusicModel::data(index, role).toString()+QLatin1Char(' ')+ i18n("(Downloading: %1%)", static_cast(item)->downloadProgress()); + } else if (MusicLibraryItemPodcastEpisode::QueuedForDownload==static_cast(item)->downloadProgress()) { + return MultiMusicModel::data(index, role).toString()+QLatin1Char(' ')+i18n("(Download Queued)"); } } break; @@ -217,10 +217,16 @@ } 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(item)->localPath().isEmpty()) { return Icons::self()->downloadedPodcastEpisodeIcon; + } else if (static_cast(item)->downloadProgress()>=0) { + return Icon("go-down"); + } else if (MusicLibraryItemPodcastEpisode::QueuedForDownload==static_cast(item)->downloadProgress()) { + return Icon("clock"); } } break; @@ -264,6 +270,12 @@ 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 @@ podcast->deleteDownloadedPodcasts(pod, episodes); } +void OnlineServicesModel::setPodcastsAsListened(MusicLibraryItemPodcast *pod, const QList &episodes, bool listened) +{ + podcast->setPodcastsAsListened(pod, episodes, listened); +} + bool OnlineServicesModel::isDownloading() const { return podcast->isDownloading(); @@ -443,197 +460,46 @@ 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(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(sender()); - - if (!j) { - return; - } - - j->deleteLater(); - QByteArray data=QNetworkReply::NoError==j->error() ? j->readAll() : QByteArray(); - if (data.isEmpty()) { - DBUG << j->url().toString() << "empty!"; - return; - } - - QString url=j->url().toString(); - QImage img=QImage::fromData(data, Covers::imageFormat(data)); - if (img.isNull()) { - DBUG << url << "null image"; + Q_UNUSED(size) + if (song.isArtistImageRequest() || !song.isFromOnlineService()) { 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(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(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 -Nru cantata-1.4.2.ds1/models/onlineservicesmodel.h cantata-1.5.2.ds2/models/onlineservicesmodel.h --- cantata-1.4.2.ds1/models/onlineservicesmodel.h 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/models/onlineservicesmodel.h 2015-03-23 20:09:40.000000000 +0000 @@ -84,15 +84,11 @@ bool subscribePodcast(const QUrl &url); void downloadPodcasts(MusicLibraryItemPodcast *pod, const QList &episodes); void deleteDownloadedPodcasts(MusicLibraryItemPodcast *pod, const QList &episodes); + void setPodcastsAsListened(MusicLibraryItemPodcast *pod, const QList &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 getProviders() const; void setHiddenProviders(const QSet &prov); @@ -108,8 +104,8 @@ 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 -Nru cantata-1.4.2.ds1/models/playlistsmodel.cpp cantata-1.5.2.ds2/models/playlistsmodel.cpp --- cantata-1.4.2.ds1/models/playlistsmodel.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/playlistsmodel.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -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 @@ connect(this, SIGNAL(moveInPlaylist(const QString &, const QList &, quint32, quint32)), MPDConnection::self(), SLOT(moveInPlaylist(const QString &, const QList &, 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 @@ 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 @@ 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()); @@ -326,6 +333,9 @@ } 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 @@ 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(*s); @@ -445,6 +459,9 @@ } 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::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 @@ genres.clear(); foreach (const SongItem *s, songs) { if (!s->genre.isEmpty()) { - genres.insert(s->genre); + genres+=s->allGenres(); } } } diff -Nru cantata-1.4.2.ds1/models/playlistsmodel.h cantata-1.5.2.ds2/models/playlistsmodel.h --- cantata-1.4.2.ds1/models/playlistsmodel.h 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/playlistsmodel.h 2015-03-23 20:09:40.000000000 +0000 @@ -67,6 +67,7 @@ { 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 allGenres() const { return genreSet ? *genreSet : genres().toSet(); } @@ -102,7 +103,7 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/models/playqueuemodel.cpp cantata-1.5.2.ds2/models/playqueuemodel.cpp --- cantata-1.4.2.ds1/models/playqueuemodel.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/playqueuemodel.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -175,6 +175,7 @@ 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 @@ 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)), SLOT(remove(QList))); connect(DevicesModel::self(), SIGNAL(updatedDetails(QList)), SLOT(updateDetails(QList))); @@ -230,28 +235,23 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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(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(s); return var; } case Cantata::Role_AlbumDuration: { @@ -566,12 +569,25 @@ 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 @@ 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 @@ } 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 @@ for (qint32 i=0; 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 @@ 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 @@ 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::setRating(const QList &rows, quint8 rating) const +{ + QSet files; + foreach (const int &r, rows) { + if (r>-1 && rsetProperty(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::ratingResult(const QString &file, quint8 r) +{ + QList::iterator it=songs.begin(); + QList::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 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 -Nru cantata-1.4.2.ds1/models/playqueuemodel.h cantata-1.5.2.ds2/models/playqueuemodel.h --- cantata-1.4.2.ds1/models/playqueuemodel.h 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/playqueuemodel.h 2015-03-23 20:09:40.000000000 +0000 @@ -58,6 +58,7 @@ COL_PRIO, COL_COMPOSER, COL_PERFORMER, + COL_RATING, COL_COUNT }; @@ -124,6 +125,7 @@ void removeAll(); void remove(const QList &rowsToRemove); void crop(const QList &rowsToKeep); + void setRating(const QList &rows, quint8 rating) const; #ifndef ENABLE_UBUNTU Action * shuffleAct() { return shuffleAction; } Action * removeDuplicatesAct() { return removeDuplicatesAction; } @@ -159,6 +161,8 @@ 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 @@ void filesAdded(const QStringList filenames, const quint32 row, const quint32 size, int action, quint8 priority); void populate(const QStringList &items, const QList &priority); void move(const QList &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 @@ void clearEntries(); void addAndPlay(const QString &file); void startPlayingSongId(qint32 id); + void currentSongRating(const QString &file, quint8 r); private: QList songs; diff -Nru cantata-1.4.2.ds1/models/proxymodel.cpp cantata-1.5.2.ds2/models/proxymodel.cpp --- cantata-1.4.2.ds1/models/proxymodel.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/proxymodel.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -149,6 +149,12 @@ return false; } +void ProxyModel::resort() +{ + invalidate(); + sort(); +} + void ProxyModel::sort(int column, Qt::SortOrder order) { if (!isSorted || dynamicSortFilter()) { diff -Nru cantata-1.4.2.ds1/models/proxymodel.h cantata-1.5.2.ds2/models/proxymodel.h --- cantata-1.4.2.ds1/models/proxymodel.h 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/models/proxymodel.h 2015-03-23 20:09:40.000000000 +0000 @@ -45,6 +45,7 @@ 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 mapToSourceRows(const QModelIndexList &list) const; diff -Nru cantata-1.4.2.ds1/models/roles.h cantata-1.5.2.ds2/models/roles.h --- cantata-1.4.2.ds1/models/roles.h 2014-09-28 16:30:12.000000000 +0000 +++ cantata-1.5.2.ds2/models/roles.h 2015-03-23 20:09:41.000000000 +0000 @@ -23,18 +23,22 @@ #ifndef ROLES_H #define ROLES_H +#include "config.h" #include 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 @@ Role_Key, Role_Id, Role_Song, + Role_SongWithRating, Role_AlbumDuration, Role_Status, Role_CurrentStatus, @@ -57,6 +62,7 @@ // TableView... Role_Width, + Role_InitiallyHidden, Role_Hideable, // PlayQueueModel... diff -Nru cantata-1.4.2.ds1/models/searchmodel.cpp cantata-1.5.2.ds2/models/searchmodel.cpp --- cantata-1.4.2.ds1/models/searchmodel.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/searchmodel.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -26,6 +26,8 @@ #include "roles.h" #include "mpd/mpdconnection.h" #include "playqueuemodel.h" +#include "gui/covers.h" +#include "gui/settings.h" #include #include #include @@ -63,6 +65,9 @@ { connect(this, SIGNAL(search(QString,QString,int)), MPDConnection::self(), SLOT(search(QString,QString,int))); connect(MPDConnection::self(), SIGNAL(searchResponse(int,QList)), this, SLOT(searchFinished(int,QList))); + #ifndef ENABLE_UBUNTU + connect(Covers::self(), SIGNAL(loaded(Song,int)), this, SLOT(coverLoaded(Song,int))); + #endif } SearchModel::~SearchModel() @@ -107,8 +112,9 @@ 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 @@ } 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); + return v; + } default: return ActionModel::data(index, role); } @@ -325,3 +341,22 @@ 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 -Nru cantata-1.4.2.ds1/models/searchmodel.h cantata-1.5.2.ds2/models/searchmodel.h --- cantata-1.4.2.ds1/models/searchmodel.h 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/searchmodel.h 2015-03-23 20:09:40.000000000 +0000 @@ -84,6 +84,7 @@ private Q_SLOTS: void searchFinished(int id, const QList &result); + void coverLoaded(const Song &song, int s); private: void clearItems(); diff -Nru cantata-1.4.2.ds1/models/streamsearchmodel.cpp cantata-1.5.2.ds2/models/streamsearchmodel.cpp --- cantata-1.4.2.ds1/models/streamsearchmodel.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/streamsearchmodel.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -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 #include #include @@ -111,6 +112,9 @@ case Qt::DisplayRole: return item->name; case Qt::ToolTipRole: + if (!Settings::self()->infoTooltips()) { + return QVariant(); + } return item->isCategory() ? item->name : (item->name+QLatin1String("
    ")+item->url+QLatin1String("")); case Cantata::Role_SubText: if (item->isCategory()) { diff -Nru cantata-1.4.2.ds1/models/streamsmodel.cpp cantata-1.5.2.ds2/models/streamsmodel.cpp --- cantata-1.4.2.ds1/models/streamsmodel.cpp 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/models/streamsmodel.cpp 2015-03-23 20:09:40.000000000 +0000 @@ -553,15 +553,17 @@ 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 @@ case Qt::DisplayRole: return item->name; case Qt::ToolTipRole: + if (!Settings::self()->infoTooltips()) { + return QVariant(); + } return item->isCategory() ? item->name : (item->name+QLatin1String("
    ")+item->url+QLatin1String("")); case Cantata::Role_SubText: if (item->isCategory()) { @@ -946,7 +951,7 @@ 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 @@ // 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 &list) @@ -1786,15 +1795,17 @@ void StreamsModel::importOldFavourites() { - if (!favourites->importedOld && Settings::self()->version()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 (!favourites->importedOld) { + if (Settings::self()->version()storeStreamsInMpdDir() + ? MPDConnection::self()->getDetails().dir : Utils::dataDir(QString(), false); + + if (!prevFile.isEmpty()) { + prevFile+="streams.xml.gz"; + if (QFile::exists(prevFile)) { + importIntoFavourites(prevFile); + } + } } favourites->importedOld=true; } diff -Nru cantata-1.4.2.ds1/mpd/mpdconnection.cpp cantata-1.5.2.ds2/mpd/mpdconnection.cpp --- cantata-1.4.2.ds1/mpd/mpdconnection.cpp 2014-09-28 16:30:05.000000000 +0000 +++ cantata-1.5.2.ds2/mpd/mpdconnection.cpp 2015-03-23 20:09:31.000000000 +0000 @@ -39,12 +39,15 @@ #include #include #include +#include #include #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 static bool debugEnabled=false; @@ -54,10 +57,14 @@ 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 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 @@ GLOBAL_STATIC(MPDConnection, instance) +QString MPDConnection::constModifiedSince=QLatin1String("modified-since"); + QByteArray MPDConnection::quote(int val) { return '\"'+QByteArray::number(val)+'\"'; @@ -157,7 +167,7 @@ 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 @@ // 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 @@ qRegisterMetaType("MPDConnectionDetails"); qRegisterMetaType("Stream"); qRegisterMetaType >("QList"); - #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 @@ 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 @@ 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 @@ 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 @@ 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 @@ emit stateChanged(false); emit error(errorString(status), true); return Response(false); + } else { + // Refresh playqueue... + reconnected=true; + playListInfo(); + getStatus(); + reconnected=false; } } @@ -586,7 +620,7 @@ 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 @@ } } DBUG << (void *)(&sock) << "sendCommand - sent"; + if (QAbstractSocket::ConnectedState==sock.state()) { + connTimer->start(30000); + } else { + connTimer->stop(); + } return response; } @@ -733,7 +772,7 @@ 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::playListChanges() { - DBUG << lastUpdatePlayQueueVersion << playQueueIds.size(); + DBUG << "playListChanges" << lastUpdatePlayQueueVersion << playQueueIds.size(); if (0==lastUpdatePlayQueueVersion || 0==playQueueIds.size()) { playListInfo(); return; @@ -1048,9 +1087,33 @@ 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=seekStep ? sv.timeElapsed-seekStep : 0); + } + } } //void MPDConnection::startPlayingSong(quint32 song) @@ -1095,7 +1158,6 @@ void MPDConnection::setSeek(quint32 song, quint32 time) { - toggleStopAfterCurrent(false); sendCommand("seek "+quote(song)+' '+quote(time)); } @@ -1120,12 +1182,12 @@ 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 @@ 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 @@ 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 @@ 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 @@ playListInfo(); playListUpdated=true; } else if (constIdleUpdateValue==value) { + getStats(); getStatus(); } else if (constIdleStoredPlaylistValue==value) { listPlaylists(); @@ -1311,6 +1379,8 @@ 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::enableOutput(int id, bool enable) { - sendCommand((enable ? "enableoutput " : "disableoutput ")+quote(id)); + if (sendCommand((enable ? "enableoutput " : "disableoutput ")+quote(id)).ok) { + outputs(); + } } /* @@ -1427,6 +1499,9 @@ } if (sendCommand("load "+encodeName(name)).ok) { + if (replace) { + playFirstTrack(false); + } emit playlistLoaded(name); } } @@ -1540,10 +1615,39 @@ void MPDConnection::search(const QString &field, const QString &value, int id) { QList 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 @@ 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 fileLists; + if (files.count()>maxFilesPerAddCommand) { + int numChunks=(files.count()/maxFilesPerAddCommand)+(files.count()%maxFilesPerAddCommand ? 1 : 0); + for (int i=0; iSong::Rating_Max) { + r=0; + } + emit rating(file, r); +} + bool MPDConnection::fadingVolume() { return volumeFade && QPropertyAnimation::Running==volumeFade->state(); @@ -1871,6 +2055,9 @@ 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::clearError() { + #ifdef REPORT_MPD_ERRORS if (isConnected()) { DBUG << __FUNCTION__; if (-1!=sock.write("clearerror\n")) { @@ -1886,6 +2074,7 @@ readReply(sock); } } + #endif } MpdSocket::MpdSocket(QObject *parent) diff -Nru cantata-1.4.2.ds1/mpd/mpdconnection.h cantata-1.5.2.ds2/mpd/mpdconnection.h --- cantata-1.4.2.ds1/mpd/mpdconnection.h 2014-09-28 16:30:05.000000000 +0000 +++ cantata-1.5.2.ds2/mpd/mpdconnection.h 2015-03-23 20:09:31.000000000 +0000 @@ -184,9 +184,10 @@ { 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 @@ 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 @@ 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 @@ 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 @@ void stopVolumeFade(); void emitStatusUpdated(MPDStatusValues &v); void clearError(); + void getRatings(QList &songs); + void playFirstTrack(bool emitErrors); + void seek(bool fwd); private: Thread *thread; @@ -403,6 +418,7 @@ // 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 -Nru cantata-1.4.2.ds1/mpd/mpdparseutils.cpp cantata-1.5.2.ds2/mpd/mpdparseutils.cpp --- cantata-1.4.2.ds1/mpd/mpdparseutils.cpp 2014-09-28 16:30:05.000000000 +0000 +++ cantata-1.5.2.ds2/mpd/mpdparseutils.cpp 2015-03-23 20:09:32.000000000 +0000 @@ -51,6 +51,7 @@ #include "mpdconnection.h" #ifdef ENABLE_ONLINE_SERVICES #include "online/onlineservice.h" +#include "online/podcastservice.h" #endif #include @@ -65,6 +66,9 @@ 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 @@ } else if (line.startsWith(constStatusBitrateKey)) { v.bitrate=line.mid(constStatusBitrateKey.length()).toUInt(); } else if (line.startsWith(constStatusAudioKey)) { + QList 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 @@ return v; } -static QSet constStdProtocols=QSet() << QLatin1String("http://") +static QSet constStdProtocols=QSet() << constHttpProtocol << QLatin1String("https://") << QLatin1String("mms://") << QLatin1String("mmsh://") @@ -277,18 +287,17 @@ } 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.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 @@ } } - if (!song.file.isEmpty()) { if (song.isStream()) { if (song.isCantataStream()) { @@ -362,7 +382,8 @@ #ifdef ENABLE_ONLINE_SERVICES if (OnlineService::decode(song)) { modifiedFile=true; - } else + } + else #endif { QString name=getAndRemoveStreamName(song.file); @@ -386,6 +407,14 @@ } 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 @@ 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 @@ return outputs; } +static const QByteArray constSticker("sticker: "); +QByteArray MPDParseUtils::parseSticker(const QByteArray &data, const QByteArray &sticker) +{ + QList 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 -Nru cantata-1.4.2.ds1/mpd/mpdparseutils.h cantata-1.5.2.ds2/mpd/mpdparseutils.h --- cantata-1.4.2.ds1/mpd/mpdparseutils.h 2014-09-28 16:30:05.000000000 +0000 +++ cantata-1.5.2.ds2/mpd/mpdparseutils.h 2015-03-23 20:09:31.000000000 +0000 @@ -79,6 +79,7 @@ QSet *childDirs=0); extern DirViewItemRoot * parseDirViewItems(const QByteArray &data, bool isMopidy); extern QList 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 -Nru cantata-1.4.2.ds1/mpd/mpdstatus.h cantata-1.5.2.ds2/mpd/mpdstatus.h --- cantata-1.4.2.ds1/mpd/mpdstatus.h 2014-09-28 16:30:05.000000000 +0000 +++ cantata-1.5.2.ds2/mpd/mpdstatus.h 2015-03-23 20:09:32.000000000 +0000 @@ -44,7 +44,7 @@ , single(false) , random(false) , playlist(0) - , playlistLength(-1) + , playlistLength(0) , crossFade(0) , state(MPDState_Inactive) , song(-1) diff -Nru cantata-1.4.2.ds1/mpd/song.cpp cantata-1.5.2.ds2/mpd/song.cpp --- cantata-1.4.2.ds1/mpd/song.cpp 2014-09-28 16:30:05.000000000 +0000 +++ cantata-1.5.2.ds2/mpd/song.cpp 2015-03-23 20:09:31.000000000 +0000 @@ -143,10 +143,9 @@ 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 @@ , guessed(false) , id(-1) , size(0) - , key(constNullKey) + , rating(Rating_Null) + , key(Null_Key) { } @@ -175,10 +175,12 @@ 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 @@ int Song::compareTo(const Song &o) const { + // + // NOTE: This compare DOES NOT use XXXSORT tags + // + if (type!=o.type) { return type extra; + QHash extra; + quint16 extraFields; quint8 disc; mutable quint8 priority; quint16 time; @@ -84,6 +100,7 @@ mutable bool guessed : 1; qint32 id; qint32 size; + mutable quint8 rating; // Only used in PlayQueue/PlayLists... quint16 key; @@ -111,6 +128,7 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/online/jamendoservice.cpp cantata-1.5.2.ds2/online/jamendoservice.cpp --- cantata-1.4.2.ds1/online/jamendoservice.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/online/jamendoservice.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -344,6 +344,7 @@ 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 -Nru cantata-1.4.2.ds1/online/magnatuneservice.cpp cantata-1.5.2.ds2/online/magnatuneservice.cpp --- cantata-1.4.2.ds1/online/magnatuneservice.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/online/magnatuneservice.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -130,6 +130,7 @@ 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 -Nru cantata-1.4.2.ds1/online/onlineservice.cpp cantata-1.5.2.ds2/online/onlineservice.cpp --- cantata-1.4.2.ds1/online/onlineservice.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/online/onlineservice.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -193,13 +193,13 @@ 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 @@ 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::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 @@ , loaded(false) , loader(0) { - setUseArtistImages(false); // Settings::self()->libraryArtistImage()); - setUseAlbumImages(true); - setLargeImages(false); m_model=m; icn.addFile(":"+name.toLower()); } diff -Nru cantata-1.4.2.ds1/online/onlineservicespage.cpp cantata-1.5.2.ds2/online/onlineservicespage.cpp --- cantata-1.4.2.ds1/online/onlineservicespage.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/online/onlineservicespage.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -58,6 +58,10 @@ 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 @@ 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 @@ 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 @@ 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 @@ return; } - if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Unsubscribe from %1?", item->data()))) { + if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Unsubscribe from '%1'?", item->data()))) { return; } @@ -573,37 +592,13 @@ return; } - if (MessageBox::No==MessageBox::questionYesNo(this, i18n("Refresh episode listing from %1?", 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 > &urls) -{ - QString rv; - QMap >::ConstIterator it(urls.constBegin()); - QMap >::ConstIterator end(urls.constEnd()); - - if (1==urls.keys().count()) { - for (; it!=end; ++it) { - foreach (MusicLibraryItemPodcastEpisode *ep, it.value()) { - rv+=QLatin1String("
  • ")+ep->data()+QLatin1String("
  • "); - } - } - } else { - for (; it!=end; ++it) { - rv+=QLatin1String("
  • ")+it.key()->data()+QLatin1String("
      "); - foreach (MusicLibraryItemPodcastEpisode *ep, it.value()) { - rv+=QLatin1String("
    • ")+ep->data()+QLatin1String("
    • "); - } - rv+="
  • "; - } - } - return rv; -} - void OnlineServicesPage::downloadPodcast() { const QModelIndexList selected = view->selectedIndexes(true); @@ -612,7 +607,6 @@ } QMap > urls; - int count=0; foreach (const QModelIndex &idx, selected) { MusicLibraryItem *item=static_cast(proxy.mapToSource(idx).internalPointer()); switch (item->itemType()) { @@ -621,16 +615,14 @@ MusicLibraryItemPodcastEpisode *episode=static_cast(c); if (episode->localPath().isEmpty() && !urls[static_cast(item)].contains(episode)) { urls[static_cast(item)].append(episode); - count++; } } break; case MusicLibraryItem::Type_Song: if (MusicLibraryItem::Type_Podcast==item->parentItem()->itemType()) { MusicLibraryItemPodcastEpisode *episode=static_cast(item); - if (episode->localPath().isEmpty() && !urls[static_cast(item->parentItem())].contains(episode)) { + if (episode->localPath().isEmpty() && !urls[static_cast(item)].contains(episode)) { urls[static_cast(item->parentItem())].append(episode); - count++; } } default: @@ -638,20 +630,8 @@ } } - if (urls.isEmpty()) { - MessageBox::information(this, i18n("All selected podcasts have already been downloaded!")); - } else { - QString question; - if (1==count) { - question=QLatin1String("

    ")+i18n("Do you wish to download the following podcast episode?")+ - QLatin1String("

      ")+format(urls)+QLatin1String("

    "); - } else if (count<15) { - question=QLatin1String("

    ")+i18n("Do you wish to download the following podcast episodes?")+ - QLatin1String("

      ")+format(urls)+QLatin1String("

    "); - } 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 >::ConstIterator it(urls.constBegin()); @@ -662,6 +642,14 @@ } } +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 @@ return; } - QMap > urls; - int count=0; + QMap > urls; foreach (const QModelIndex &idx, selected) { MusicLibraryItem *item=static_cast(proxy.mapToSource(idx).internalPointer()); switch (item->itemType()) { case MusicLibraryItem::Type_Podcast: foreach (MusicLibraryItem *c, static_cast(item)->childItems()) { MusicLibraryItemPodcastEpisode *episode=static_cast(c); - if (!episode->localPath().isEmpty() && !urls[static_cast(item)].contains(episode)) { - urls[static_cast(item)].append(episode); - count++; + if (!episode->localPath().isEmpty()) { + urls[static_cast(item)].insert(episode); } } break; case MusicLibraryItem::Type_Song: if (MusicLibraryItem::Type_Podcast==item->parentItem()->itemType()) { MusicLibraryItemPodcastEpisode *episode=static_cast(item); - if (!episode->localPath().isEmpty() && !urls[static_cast(item->parentItem())].contains(episode)) { - urls[static_cast(item->parentItem())].append(episode); - count++; + if (!episode->localPath().isEmpty()) { + urls[static_cast(item->parentItem())].insert(episode); } } default: @@ -696,26 +681,100 @@ } } - if (urls.isEmpty()) { - MessageBox::information(this, i18n("All selected downloaded podcast episodes have already been deleted!")); - } else { - QString question; - if (1==count) { - question=QLatin1String("

    ")+i18n("Do you wish to delete the downloaded file of the following podcast episode?")+ - QLatin1String("

      ")+format(urls)+QLatin1String("

    "); - } else if (count<15) { - question=QLatin1String("

    ")+i18n("Do you wish to the delete downloaded files of the following podcast episodes?")+ - QLatin1String("

      ")+format(urls)+QLatin1String("

    "); - } 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 >::ConstIterator it(urls.constBegin()); + QMap >::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 > urls; + foreach (const QModelIndex &idx, selected) { + MusicLibraryItem *item=static_cast(proxy.mapToSource(idx).internalPointer()); + switch (item->itemType()) { + case MusicLibraryItem::Type_Podcast: + foreach (MusicLibraryItem *c, static_cast(item)->childItems()) { + MusicLibraryItemPodcastEpisode *episode=static_cast(c); + if (episode->song().hasBeenPlayed()) { + urls[static_cast(item)].insert(episode); + } + } + break; + case MusicLibraryItem::Type_Song: + if (MusicLibraryItem::Type_Podcast==item->parentItem()->itemType()) { + MusicLibraryItemPodcastEpisode *episode=static_cast(item); + if (episode->song().hasBeenPlayed()) { + urls[static_cast(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 >::ConstIterator it(urls.constBegin()); - QMap >::ConstIterator end(urls.constEnd()); + QMap >::ConstIterator it(urls.constBegin()); + QMap >::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 > urls; + foreach (const QModelIndex &idx, selected) { + MusicLibraryItem *item=static_cast(proxy.mapToSource(idx).internalPointer()); + switch (item->itemType()) { + case MusicLibraryItem::Type_Podcast: + foreach (MusicLibraryItem *c, static_cast(item)->childItems()) { + MusicLibraryItemPodcastEpisode *episode=static_cast(c); + if (!episode->song().hasBeenPlayed()) { + urls[static_cast(item)].insert(episode); + } + } + break; + case MusicLibraryItem::Type_Song: + if (MusicLibraryItem::Type_Podcast==item->parentItem()->itemType()) { + MusicLibraryItemPodcastEpisode *episode=static_cast(item); + if (!episode->song().hasBeenPlayed()) { + urls[static_cast(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 >::ConstIterator it(urls.constBegin()); + QMap >::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 -Nru cantata-1.4.2.ds1/online/onlineservicespage.h cantata-1.5.2.ds2/online/onlineservicespage.h --- cantata-1.4.2.ds1/online/onlineservicespage.h 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/online/onlineservicespage.h 2015-03-23 20:09:43.000000000 +0000 @@ -44,11 +44,12 @@ void clear(); QStringList selectedFiles() const; QList 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 @@ void unSubscribe(); void refreshSubscription(); void downloadPodcast(); + void cancelPodcastDownload(); void deleteDownloadedPodcast(); + void markPodcastAsNew(); + void markPodcastAsListened(); void showPreferencesPage(); void providersChanged(); @@ -86,7 +90,10 @@ MusicLibraryProxyModel proxy; Action *downloadAction; Action *downloadPodcastAction; + Action *cancelPodcastDownloadAction; Action *deleteDownloadedPodcastAction; + Action *markPodcastAsNewAction; + Action *markPodcastAsListenedAction; QSet genres; bool onlineSearchRequest; QString searchService; diff -Nru cantata-1.4.2.ds1/online/podcastsearchdialog.cpp cantata-1.5.2.ds2/online/podcastsearchdialog.cpp --- cantata-1.4.2.ds1/online/podcastsearchdialog.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/online/podcastsearchdialog.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -409,7 +409,7 @@ 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 -Nru cantata-1.4.2.ds1/online/podcastservice.cpp cantata-1.5.2.ds2/online/podcastservice.cpp --- cantata-1.4.2.ds1/online/podcastservice.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/online/podcastservice.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -33,7 +33,7 @@ #include "http/httpserver.h" #include #include -#include +#include #include #include #if QT_VERSION >= 0x050000 @@ -49,6 +49,18 @@ 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 @@ PodcastService::PodcastService(MusicModel *m) : OnlineService(m, i18n("Podcasts")) + , downloadJob(0) , rssUpdateTimer(0) { loaded=true; @@ -98,6 +111,8 @@ 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 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 @@ j->cancelAndDelete(); } rssJobs.clear(); - setBusy(!rssJobs.isEmpty() || !downloadJobs.isEmpty()); + cancelAllDownloads(); + setBusy(!rssJobs.isEmpty() || 0!=downloadJob); } void PodcastService::rssJobFinished() @@ -186,20 +202,23 @@ } } - 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(i); downloadEpisode(podcast, QUrl(song->file())); + if (autoDownload<1000 && ++ep>=autoDownload) { + break; + } } } endInsertRows(); @@ -274,7 +293,7 @@ } 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 @@ { int row=m_childItems.indexOf(item); if (row>=0) { - MusicLibraryItemPodcast *pod=static_cast(item); - if (!downloadJobs.isEmpty()) { - foreach (MusicLibraryItem *e, pod->childItems()) { - cancelDownload(QUrl(static_cast(e)->file())); - if (downloadJobs.isEmpty()) { - break; - } - } + QList episodes; + foreach (MusicLibraryItem *e, static_cast(item)->childItems()) { + episodes.append(static_cast(e)); } + cancelDownloads(episodes); beginRemoveRows(index(), row, row); - pod->removeFiles(); + static_cast(item)->removeFiles(); delete m_childItems.takeAt(row); resetRows(); endRemoveRows(); @@ -370,40 +385,35 @@ 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 &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 &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 @@ 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 &episodes, bool listened) +{ + bool modified=false; + foreach (MusicLibraryItemPodcastEpisode *ep, episodes) { + MusicLibraryItemSong *song=static_cast(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 @@ 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); + toDownload.append(DownloadEntry(episode, podcast->rssUrl(), dest)); + updateEpisode(podcast->rssUrl(), episode, MusicLibraryItemPodcastEpisode::QueuedForDownload); + doNextDownload(); +} - QString partial=dest+constPartialExt; - if (QFile::exists(partial)) { - QFile::remove(partial); +void PodcastService::cancelDownloads(const QList 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(sender()); - if (!job || !downloadJobs.contains(job)) { + if (!job || job!=downloadJob) { return; } job->deleteLater(); @@ -510,7 +606,6 @@ MusicLibraryItemPodcastEpisode *song=getEpisode(pod, job->origUrl()); if (song) { song->setLocalPath(dest); - song->setDownloadProgress(-1); pod->save(); emitDataChanged(createIndex(song)); } @@ -520,15 +615,15 @@ } 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(sender()); - if (!job || !downloadJobs.contains(job)) { + if (!job || job!=downloadJob) { return; } QString dest=job->property(constDestProperty).toString(); @@ -560,17 +655,10 @@ void PodcastService::downloadPercent(int pc) { NetworkJob *job=dynamic_cast(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::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(p); foreach (MusicLibraryItem *i, podcast->childItems()) { diff -Nru cantata-1.4.2.ds1/online/podcastservice.h cantata-1.5.2.ds2/online/podcastservice.h --- cantata-1.4.2.ds1/online/podcastservice.h 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/online/podcastservice.h 2015-03-23 20:09:43.000000000 +0000 @@ -62,28 +62,34 @@ 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 &episodes); void deleteDownloadedPodcasts(MusicLibraryItemPodcast *pod, const QList &episodes); + void setPodcastsAsListened(MusicLibraryItemPodcast *pod, const QList &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 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 @@ 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 rssJobs; - QList downloadJobs; + NetworkJob * downloadJob; + QList toDownload; QTimer *rssUpdateTimer; QDateTime lastRssUpdate; QTimer *deleteTimer; diff -Nru cantata-1.4.2.ds1/online/podcastsettingsdialog.cpp cantata-1.5.2.ds2/online/podcastsettingsdialog.cpp --- cantata-1.4.2.ds1/online/podcastsettingsdialog.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/online/podcastsettingsdialog.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -58,24 +58,27 @@ 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 @@ 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 @@ } 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 -Nru cantata-1.4.2.ds1/online/podcastsettingsdialog.h cantata-1.5.2.ds2/online/podcastsettingsdialog.h --- cantata-1.4.2.ds1/online/podcastsettingsdialog.h 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/online/podcastsettingsdialog.h 2015-03-23 20:09:43.000000000 +0000 @@ -55,9 +55,9 @@ QComboBox *updateCombo; int origRssUpdate; PathRequester *downloadPath; - QCheckBox *autoDownload; + QComboBox *autoDownloadCombo; QString origPodcastDownloadPath; - bool origPodcastAutoDownload; + int origPodcastAutoDownload; int changed; }; diff -Nru cantata-1.4.2.ds1/online/rssparser.cpp cantata-1.5.2.ds2/online/rssparser.cpp --- cantata-1.4.2.ds1/online/rssparser.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/online/rssparser.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -89,11 +89,12 @@ 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 @@ } 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 @@ } } + // 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 @@ if (ch.video && !ch.episodes.isEmpty()) { ch.video=false; } - return ch; } diff -Nru cantata-1.4.2.ds1/online/soundcloudservice.cpp cantata-1.5.2.ds2/online/soundcloudservice.cpp --- cantata-1.4.2.ds1/online/soundcloudservice.cpp 2014-09-28 16:30:14.000000000 +0000 +++ cantata-1.5.2.ds2/online/soundcloudservice.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -25,6 +25,7 @@ #include "network/networkaccessmanager.h" #include "models/onlineservicesmodel.h" #include "models/musiclibraryitemsong.h" +#include "mpd/mpdconnection.h" #include "config.h" #include #include @@ -47,8 +48,6 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/po/cantata.pot cantata-1.5.2.ds2/po/cantata.pot --- cantata-1.4.2.ds1/po/cantata.pot 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/po/cantata.pot 2015-03-23 20:09:39.000000000 +0000 @@ -8,7 +8,7 @@ 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 \n" "Language-Team: LANGUAGE \n" @@ -22,10 +22,10 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ #. 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ msgid "Songs To Be Copied" msgstr "" -#: devices/actiondialog.cpp:153 +#: devices/actiondialog.cpp:151 msgid "INVALID" msgstr "" -#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170 +#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168 msgid "(When different)" 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 @@ "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 "" -"

    You have not configured the destination device.
    Continue with the " -"default settings?

    " +"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 "" -"

    You have not configured the source device.
    Continue with the default " -"settings?

    " +"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!
    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.
    (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 "" -"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " -"'Title' to \"TrackArtist - TrackTitle\"" +"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 "" -"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.

    If 'Title' " -"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " -"will be set to \"Wobble\"
    " +"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 @@ #. 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 @@ 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 "" -"

    Which type of refresh do you wish to perform?

    • Partial - Only new " -"songs are scanned (quick)
    • Full - All songs are rescanned " -"(slow)

    " +#: 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 %1?" +#: 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 %1 - %2?" +#: 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 %1?" +#: 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 @@ "anything above 205kb/s 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 @@ "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 @@ #: devices/filenameschemedialog.cpp:121 msgid "" -"

    The following variables will be replaced with their corresponding meaning " -"for each track name.

    " +"The following variables will be replaced with their corresponding meaning " +"for each track name." msgstr "" -#: devices/filenameschemedialog.cpp:123 +#: devices/filenameschemedialog.cpp:127 msgid "" "
    " 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 @@ msgid "%1 (Disc %2)" msgstr "" -#: devices/musicbrainz.cpp:394 +#: devices/musicbrainz.cpp:388 msgid "No matches found in MusicBrainz" msgstr "" @@ -1325,14 +1355,15 @@ 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 @@ #. 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 @@ 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 @@ 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 @@ #: 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 "ERROR: 'From Year' should be less than 'To Year'" msgstr "" -#: dynamic/dynamicruledialog.cpp:221 +#: dynamic/dynamicruledialog.cpp:220 msgid "" "ERROR: Date range is too large (can only be a maximum of %1 " "years)" @@ -1626,61 +1662,68 @@ msgid "Dynamic Rules" msgstr "" -#: dynamic/dynamicrulesdialog.cpp:292 +#: dynamic/dynamicrulesdialog.cpp:295 +msgid "About dynamic rules" +msgstr "" + +#: dynamic/dynamicrulesdialog.cpp:297 msgid "" "

    Cantata will query your library using all of the rules listed. The list " "of Include rules will be used to build a set of songs that can be " "used. The list of Exclude rules will be used to build a set of songs " "that cannot be used. If there are no Include rules, Cantata will " -"assume that all songs (bar those from Exclude) can be used.
    e.g. " -"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', " -"you would need the following:

    • Include AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various Artists
    To have Cantata look " -"for 'Songs by Wibble but not from album Abc', you would need the following: " -"
    • Include AlbumArtist=Wibble
    • Exclude Album=Abc
    After " -"the set of usable songs has been created, Cantata will randomly select songs " -"to keep the play queue filled with 10 entries.

    " +"assume that all songs (bar those from Exclude) can be used.

    e." +"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various " +"Artists', you would need the following:

    • Include AlbumArtist=Wibble " +"Genre=Rock
    • Include AlbumArtist=Various Artists
    To have " +"Cantata look for 'Songs by Wibble but not from album Abc', you would need " +"the following:
    • Include AlbumArtist=Wibble
    • Exclude " +"AlbumArtist=Wibble Album=Abc
    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.

    " msgstr "" -#: dynamic/dynamicrulesdialog.cpp:311 +#: 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 @@ "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 "

    Delete all from the following?

      %1

    " +#: 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 @@ "%2 x %3 (%4)" msgstr "" -#: gui/coverdialog.cpp:126 +#: gui/coverdialog.cpp:129 msgctxt "" "name\n" "width x height" @@ -1767,67 +1810,68 @@ "%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 @@ #. 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 @@ 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 "" "Cantata %1

    MPD client.

    © 2011-2014 Craig " @@ -2363,44 +2365,56 @@ "html\">GPLv3" msgstr "" -#: gui/mainwindow.cpp:1146 +#: gui/mainwindow.cpp:1214 msgid "" "Based upon QtMPC - © 2007-2010 " "The QtMPC Authors
    " msgstr "" -#: gui/mainwindow.cpp:1147 +#: gui/mainwindow.cpp:1215 msgctxt "Qt-only" msgid "" "Context view backdrops courtesy of FanArt." "tv" msgstr "" -#: gui/mainwindow.cpp:1148 +#: gui/mainwindow.cpp:1216 msgctxt "Qt-only" msgid "" "Context view metadata courtesy of Wikipedia and Last.fm" msgstr "" -#: gui/mainwindow.cpp:1149 +#: gui/mainwindow.cpp:1217 msgid "" "Please consider uploading your own music fan-art to FanArt.tv" 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 "" "" msgstr "" -#: gui/mainwindow.cpp:1532 +#: gui/mainwindow.cpp:1619 msgid "" "" 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 "" -"%1 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 %1 already exists!
    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 "" "Connected to %1
    The entries below apply to the currently connected " "MPD collection.
    " 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 "" "Not Connected!
    The entries below cannot be modified, as Cantata is " "not connected to MPD.
    " msgstr "" -#: gui/playbacksettings.cpp:169 +#: gui/playbacksettings.cpp:174 msgid "" -"

    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.

    The following ReplayGain settings may be used:" +"players.

    The following ReplayGain settings may be used:" "

    • None - No ReplayGain is applied.
    • Track - " "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's ReplayGain tags.
    • Auto - Volume will be adjusted using the track's ReplayGain " "tags if random play is activated, otherwise the album's tags will be used.

    " +"li>" 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 @@ 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 %1 already exists!
    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 @@ 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 @@ #. 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 "" " This folder will also be used to locate music files for transferring to " "(and from) devices." 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?
    • Standard - " -"music collection may be shared, is on another machine, or is already setup
    • Basic - music collection is not shared with others, and Cantata will " -"configure and control the MPD instance
    " +"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 %1?" +#: 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 @@ msgid "Disc" msgstr "" +#: models/playqueuemodel.cpp:178 +msgid "Rating" +msgstr "" + #: models/playqueuemodel.cpp:241 msgid "Undo" msgstr "" @@ -3137,111 +3172,107 @@ msgid "Album Artist" msgstr "" -#: models/playqueuemodel.cpp:583 -msgid "(Priority: %1)" -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 %1 to %2" msgstr "" -#: mpd/mpdconnection.cpp:1410 +#: mpd/mpdconnection.cpp:1534 msgid "Failed to save %1" 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 @@ 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 @@ "%3" msgstr "" -#: mpd/song.cpp:601 +#: mpd/song.cpp:683 msgctxt "Song on Album" msgid "%1 on %2" msgstr "" -#: mpd/song.cpp:602 +#: mpd/song.cpp:684 msgctxt "Song by Artist on Album" msgid "%1 by %2 on %3" msgstr "" @@ -3306,19 +3333,19 @@ 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 @@ #. 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 @@ 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 %1?" +#: 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 %1?" +#: online/onlineservicespage.cpp:467 +msgid "Re-download music listing for %1?" msgstr "" -#: online/onlineservicespage.cpp:631 -msgid "All selected podcasts have already been downloaded!" +#: online/onlineservicespage.cpp:467 online/onlineservicespage.cpp:468 +msgid "Re-download" msgstr "" -#: online/onlineservicespage.cpp:635 -msgid "Do you wish to download the following podcast episode?" +#: online/onlineservicespage.cpp:553 +msgid "Unsubscribe from '%1'?" msgstr "" -#: online/onlineservicespage.cpp:638 -msgid "Do you wish to download the following podcast episodes?" +#: online/onlineservicespage.cpp:574 +msgid "Refresh all podcast listings?" msgstr "" -#: online/onlineservicespage.cpp:641 -msgid "Do you wish to download the selected podcast episodes?" +#: online/onlineservicespage.cpp:595 +msgid "Refresh episode listing from '%1'?" msgstr "" -#: online/onlineservicespage.cpp:689 -msgid "All selected downloaded podcast episodes have already been deleted!" +#: online/onlineservicespage.cpp:634 +msgid "Do you wish to download the selected podcast episodes?" msgstr "" -#: online/onlineservicespage.cpp:693 +#: online/onlineservicespage.cpp:648 msgid "" -"Do you wish to delete the downloaded file of the following podcast episode?" +"Cancel podcast episode downloads (both current and any that are queued)?" msgstr "" -#: online/onlineservicespage.cpp:696 +#: online/onlineservicespage.cpp:685 msgid "" -"Do you wish to the delete downloaded files of the following podcast episodes?" +"Do you wish to the delete downloaded files of the selected podcast episodes?" msgstr "" -#: online/onlineservicespage.cpp:699 -msgid "" -"Do you wish to the delete downloaded files of the selected podcast episodes?" +#: 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 "" -#: 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 @@ 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 @@ #. 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 @@ #. 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 @@ #. 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 @@ 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 "" -"NOTE: 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)." +"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 @@ 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 "" -"NOTE: Connected to a Mopidy server (manual update required)." +#. 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 @@ #. 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 @@ 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 "" -"NOTE: These settings are only valid, and editable, when the device " -"is connected." +"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 @@ 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 "" -"NOTE: These settings are only editable when the device is not " -"connected." +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 "" -"NOTE: If you enter a password here, it will be stored " -"unencrypted in Cantata's config file. To have Cantata prompt for the " -"password before accessing the share, set the password to '-'" +"If you enter a password here, it will be stored unencrypted 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 "" -"NOTE: Due to the way sshfs works, a suitable ssh-askpass " -"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter " -"the password." +"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 "" -"NOTE: 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." +"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 @@ 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 @@ #. 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 "" -"NOTE Only enter values for the tags you wish to be search on. " +#. 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 "" -"NOTE For genre, end string with an asterisk to match various " -"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +"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 -msgid "" -"NOTE: 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." +#. 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: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 "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/" -"Tracks')" +"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 "" "

    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.

    For more information on MPD itself, please refer to the " -"MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings required for " -"Cantata to function correctly.

    " +"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side " +"application for playing music.

    For more information on MPD itself, " +"please refer to the MPD website http://www.musicpd." +"org

    This 'wizard' will guide you through the basic settings " +"required for Cantata to function correctly.

    " 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 "

    Welcome to Cantata

    " 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 "" "

    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:

    " +"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:

    " 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 "" "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 @@ #. 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 "" "Select this option if your music collection is not shared with others, " "and you wish Cantata to configure and control the MPD instance." @@ -4632,7 +4689,7 @@ #. 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 "" "

    For more information on MPD itself, please refer to " "the MPD website NOTE: 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." -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: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 "" -"NOTE: When using a local socket the full absolute path to the " -"socket needs to be set. (Port number is not required.)" +"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 "" "

    Cantata will download missing covers, and lyrics, from the internet.

    For each of these, please confirm whether you wish Cantata to store the " @@ -4718,56 +4774,52 @@ "folders.

    " msgstr "" -#. i18n: file: gui/initialsettingswizard.ui:772 -#. i18n: ectx: property (text), widget (QLabel, persNote) -#: po/rc.cpp:521 rc.cpp:521 -msgid "" -"NOTE: 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." -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 "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'." -"" +"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 "" -"NOTE: 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." +"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!

    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 must 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 "" "Warning: 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 @@ #. 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 "" -"NOTE: 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." +"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 "" -"NOTE: 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." +#. 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 "" -"NOTE: 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." +#. 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 "" "

    When adding artists, or albums to the playqueue, or editing tags, etc, " "then only use songs that pass the current Genre or string filter.

    e.g. " @@ -5038,39 +5127,33 @@ "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 "" "

    This will change Cantata's interface as detailed:\n" @@ -5078,154 +5161,160 @@ "be 'flickable'

  • To drag items, you will need to 'touch' the top-left " "corner
  • Scrollbars will only be a few pixels wide
  • Actions (e." "g. 'Add To Play Queue') will always be visible (not just when item is under " -"mouse)
  • Spin buttons with have + and - buttons at the side of the " +"mouse)
  • Spin buttons will have + and - buttons at the side of the " "text field
  • " 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 "" -"NOTE: Changing the 'Enforce single-click activation of items' " -"setting will require a re-start of Cantata." +"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 "" -"NOTE: Changing the language setting will require a re-start of " -"Cantata." +"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 "" -"NOTE: Changing the 'touch friendly' setting will require a re-" -"start of Cantata." +"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 "" -"NOTE: 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." +"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 "" "

    Filename (without extension) to save downloaded covers as.
    If left " @@ -5236,135 +5325,138 @@ #. 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 "" -"NOTE: The 'Music folder' setting is used to lookup cover-art " -"(either the value specified above, or cover.jpg / cover.png 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." +"The 'Music folder' setting is used to lookup cover-art (either the value " +"specified above, or cover.jpg / cover.png 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 "" -"NOTE: '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." +"'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 "" -"NOTE: 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." +"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 "" -"NOTE: If no setting is specified for 'Cover filename, then Cantata " -"will use a default of cover " +"If no setting is specified for 'Cover filename, then Cantata will use a " +"default of cover" 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 "" -"NOTE: 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." -"

    \n" -"NOTE: If you choose 'Local loopback' for 'Network interface', then " -"MPD must also be on this computer.
    " +"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 must " +"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
    NOTE: These settings apply to Digitally Imported, JazzRadio.com, " -"RockRadio.com, and Sky.fm
    " +"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 "" -"NOTE: 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" +"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 "" -"NOTE: 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:" +#. 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 "(Various)" +msgstr "" + +#. i18n: file: tags/tageditor.ui:210 +#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x) +#: po/rc.cpp:1029 rc.cpp:1029 msgid "" -"NOTE Multiple genres should be separated via a semicolon (e.g. " -"'Rock;Hard Rock')" +"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 not 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 @@ #: 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 @@ #: replaygain/rgdialog.cpp:261 msgid "" -"Scan all tracks?

    NOTE: All tracks have existing ReplyGain " -"tags." +"Scan all tracks?

    All tracks have existing ReplayGain tags." +"" msgstr "" #: replaygain/rgdialog.cpp:263 @@ -5585,17 +5693,17 @@ 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 @@ 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 @@ 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 "" -"NOTE: 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." +"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 @@ 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 "ERROR: Invalid protocol" msgstr "" @@ -5804,39 +5912,39 @@ msgstr "" #: streams/streamproviderlistdialog.cpp:257 -msgid "Failed to install %1" +msgid "Failed to install '%1'" msgstr "" #: streams/streamproviderlistdialog.cpp:266 -msgid "Failed to download %1" +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 @@ 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 %1!" +#: streams/streamspage.cpp:249 +msgid "Failed to create '%1'!" msgstr "" -#: streams/streamspage.cpp:254 streams/streamspage.cpp:435 -msgid "Stream already exists!
    %1" +#: 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 %1 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 %1 streams?" +#: streams/streamspage.cpp:356 +msgid "Reload '%1' streams?" msgstr "" -#: streams/streamspage.cpp:362 -msgid "Are you sure you wish to remove bookmark to %1?" +#: 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 %1 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 %1?" +#: 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 %1 already exists!
    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 @@ 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 @@ 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 all tracks?" msgstr "" -#: tags/tageditor.cpp:499 +#: tags/tageditor.cpp:528 +msgid "" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" +msgstr "" + +#: tags/tageditor.cpp:567 msgid "Revert \"Various Artists\" workaround on all tracks?" msgstr "" -#: tags/tageditor.cpp:549 +#: tags/tageditor.cpp:568 +msgid "Revert \"Various Artists\" workaround" +msgstr "" + +#: tags/tageditor.cpp:570 +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.

    If 'Title' " +"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " +"will be set to \"Wobble\"
    " +msgstr "" + +#: tags/tageditor.cpp:617 msgid "" "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for all " "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 all tracks?" +"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of " +"all 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!
    %1" +#: tags/trackorganiser.cpp:280 +msgid "Source file does not exist!" msgstr "" -#: tags/trackorganiser.cpp:297 -msgid "Destination file already exists!
    %1" +#: tags/trackorganiser.cpp:299 +msgid "Destination file already exists!" msgstr "" -#: tags/trackorganiser.cpp:319 -msgid "Failed to create destination folder!
    %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 "

    " msgstr "" -#: widgets/coverwidget.cpp:89 +#: widgets/coverwidget.cpp:78 +msgid "" +msgstr "" + +#: widgets/coverwidget.cpp:80 msgid "" "" @@ -1428,53 +1463,52 @@ "" -#: 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 @@ 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 @@ 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 @@ #. 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 @@ 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 @@ 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 @@ "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 @@ #: 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 "ERROR: 'From Year' should be less than 'To Year'" msgstr "CHYBA: 'Od roku' má být menší než 'Do roku'" -#: dynamic/dynamicruledialog.cpp:221 +#: dynamic/dynamicruledialog.cpp:220 msgid "" "ERROR: Date range is too large (can only be a maximum of %1 " "years)" @@ -1803,20 +1845,26 @@ 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 "" "

    Cantata will query your library using all of the rules listed. The list " "of Include rules will be used to build a set of songs that can be " "used. The list of Exclude rules will be used to build a set of songs " "that cannot be used. If there are no Include rules, Cantata will " -"assume that all songs (bar those from Exclude) can be used.
    e.g. " -"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', " -"you would need the following:

    • Include AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various Artists
    To have Cantata look " -"for 'Songs by Wibble but not from album Abc', you would need the following: " -"
    • Include AlbumArtist=Wibble
    • Exclude Album=Abc
    After " -"the set of usable songs has been created, Cantata will randomly select songs " -"to keep the play queue filled with 10 entries.

    " +"assume that all songs (bar those from Exclude) can be used.

    e." +"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various " +"Artists', you would need the following:

    • Include AlbumArtist=Wibble " +"Genre=Rock
    • Include AlbumArtist=Various Artists
    To have " +"Cantata look for 'Songs by Wibble but not from album Abc', you would need " +"the following:
    • Include AlbumArtist=Wibble
    • Exclude " +"AlbumArtist=Wibble Album=Abc
    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.

    " msgstr "" "

    Cantata se dotáže vaší knihovny za použití všech v seznamu uvedených " "pravidel. Seznam pravidel Zahrnout se použije na sestavení souboru " @@ -1830,49 +1878,53 @@ "ale ne z alba Abc', budete potřebovat následující:

    • Zahrnout Umělec " "alba=Wibble
    • Vyloučit Album=Abc
    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.

    " +"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í.

    " -#: 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 @@ "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." +"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 +#: 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 "

    Delete all from the following?

      %1

    " -msgstr "

    Smazat vše z následujícího?

      %1

    " +#: 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 @@ "%1\n" "%2 x %3 (%4)" -#: gui/coverdialog.cpp:126 +#: gui/coverdialog.cpp:129 msgctxt "" "name\n" "width x height" @@ -1974,71 +2021,73 @@ "%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 @@ #. 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 @@ 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 @@ "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 @@ "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 @@ "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 "" "Cantata %1

    MPD client.

    © 2011-2014 Craig " @@ -2592,7 +2602,7 @@ "2011-2014.
    Vydáno pod
    GPLv3" -#: gui/mainwindow.cpp:1146 +#: gui/mainwindow.cpp:1214 msgid "" "Based upon QtMPC - © 2007-2010 " "The QtMPC Authors
    " @@ -2600,7 +2610,7 @@ "Založeno na QtMPC - © 2007-2010 " "Autoři QtMPC
    " -#: gui/mainwindow.cpp:1147 +#: gui/mainwindow.cpp:1215 msgctxt "Qt-only" msgid "" "Context view backdrops courtesy of FanArt." @@ -2609,7 +2619,7 @@ "Pozadí pohledu na souvislosti díky laskavosti FanArt.tv" -#: gui/mainwindow.cpp:1148 +#: gui/mainwindow.cpp:1216 msgctxt "Qt-only" msgid "" "Context view metadata courtesy of Wikipedia and Last.fm" -#: gui/mainwindow.cpp:1149 +#: gui/mainwindow.cpp:1217 msgid "" "Please consider uploading your own music fan-art to FanArt.tv" @@ -2626,21 +2636,33 @@ "Zvažte, prosím, nahrání vašeho vlastního fanouškovského umění na FanArt.tv" -#: 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 "" "" +"provozu: " -#: gui/mainwindow.cpp:1532 +#: gui/mainwindow.cpp:1619 msgid "" "" - -#: gui/mainwindow.cpp:1541 -msgid "Server Information" -msgstr "Informace o serveru" +"align=\"right\">Obnoveno: " -#: 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 "" -"%1 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 "" -"%1 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 %1 already exists!
    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ý %1 již existuje!
    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 "" "Connected to %1
    The entries below apply to the currently connected " "MPD collection.
    " msgstr "" "Připojeno k %1.
    Záznamy níže použít na nyní připojenou sbírku MPD.
    " -#. 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 "" "Not Connected!
    The entries below cannot be modified, as Cantata is " "not connected to MPD.
    " @@ -2760,32 +2800,32 @@ "Nepřipojeno.
    Záznamy níže nelze změnit, protože Cantata není " "připojena k MPD.
    " -#: gui/playbacksettings.cpp:169 +#: gui/playbacksettings.cpp:174 msgid "" -"

    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.

    The following ReplayGain settings may be used:" +"players.

    The following ReplayGain settings may be used:" "

    • None - No ReplayGain is applied.
    • Track - " "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's ReplayGain tags.
    • Auto - Volume will be adjusted using the track's ReplayGain " "tags if random play is activated, otherwise the album's tags will be used.

    " +"li>" msgstr "" -"

    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čů.

    Je možné použít následující " +"podporován rostoucím počtem přehrávačů.

    Je možné použít následující " "nastavení vyrovnání hlasitosti:

    • Žádné - Není použito žádné " "vyrovnání hlasitosti.
    • Skladba - Hlasitost je upravena za " "použití značek pro vyrovnání hlasitosti u skladby.
    • Album - " "Hlasitost je upravena za použití značek pro vyrovnání hlasitosti u alba.
    • Automaticky - 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.

    " +"jinak se použijí značky u alba." -#: 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 @@ 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 %1 already exists!
    Overwrite?" -msgstr "Seznam skladeb pojmenovaný %1 již existuje!
    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[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 @@ #. 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 "" " This folder will also be used to locate music files for transferring to " "(and from) devices." @@ -3070,336 +3126,317 @@ " Tato složka se také použije na umístění hudebních souborů pro přenos na " "(a ze) zařízení." -#. 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?
    • Standard - " -"music collection may be shared, is on another machine, or is already setup
    • 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?
    • Obvyklý - hudební sbírku může " -"být sdílena, je na jiném stroji, nebo je již nastavena
    • Základní - " -"hudební sbírka není sdílena s ostatními, a Cantata nastaví a bude řídit " -"instanci MPD
    " +"Basic - music collection is not shared with others, and Cantata will " +"configure and control the MPD instance" +msgstr "" +"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 %1?" -msgstr "Smazat %1?" +#: 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:64 +msgid "Edit Track Information" +msgstr "Upravit informace o skladbě" -#: gui/stdactions.cpp:72 replaygain/rgdialog.cpp:85 -msgid "ReplayGain" -msgstr "Vyrovnání hlasitosti" - -#: 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 @@ 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 @@ msgid "Album Artist" msgstr "Umělec alba" -#: models/playqueuemodel.cpp:583 -msgid "(Priority: %1)" -msgstr "(Přednost: %1)" - -#: 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 @@ "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 %1 to %2" msgstr "Nepodařilo se přejmenovat %1 na %2" -#: mpd/mpdconnection.cpp:1410 +#: mpd/mpdconnection.cpp:1534 msgid "Failed to save %1" msgstr "Nepodařilo se uložit %1!" -#: 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 @@ 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 @@ "%2\n" "%3" -#: mpd/song.cpp:601 +#: mpd/song.cpp:683 msgctxt "Song on Album" msgid "%1 on %2" msgstr "%1 na %2" -#: mpd/song.cpp:602 +#: mpd/song.cpp:684 msgctxt "Song by Artist on Album" msgid "%1 by %2 on %3" msgstr "%1 od %2 na %3" @@ -3604,19 +3637,19 @@ 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 @@ #. 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 @@ 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 %1?" -msgstr "Odhlásit odběr z %1?" +#: 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 %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:595 +msgid "Refresh episode listing from '%1'?" +msgstr "Obnovit soupis dílů z '%1'?" -#: 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 @@ "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 @@ 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 @@ #. 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 @@ #. 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 @@ #. 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 @@ 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 "" -"NOTE: 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)." -msgstr "" -"POZNÁMKA: 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ěť)." +"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 @@ 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 "" -"NOTE: Connected to a Mopidy server (manual update required)." -msgstr "" -"POZNÁMKA: Připojeno k serveru Mopidy (vyžadována ruční " -"aktualizace)." +#. 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 @@ #. 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 @@ 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 "" -"NOTE: These settings are only valid, and editable, when the device " -"is connected." +"These settings are only valid, and editable, when the device is connected." msgstr "" -"POZNÁMKA: Tato nastavení jsou platná, a upravitelná, jen když je " -"zařízení připojeno." +"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 @@ 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 "" -"NOTE: These settings are only editable when the device is not " -"connected." -msgstr "" -"POZNÁMKA: Tato nastavení jsou upravitelná, jen když není zařízení " -"připojeno." +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 "" -"NOTE: If you enter a password here, it will be stored " -"unencrypted in Cantata's config file. To have Cantata prompt for the " -"password before accessing the share, set the password to '-'" -msgstr "" -"POZNÁMKA: Pokud zde zadáte heslo, bude uloženo nezašifrované v souboru s nastavením pro Cantatu. Aby Cantata vyzvala k zadání hesla " -"před přístupem k sdílení, nastavte heslo na '-'" +"If you enter a password here, it will be stored unencrypted in " +"Cantata's config file. To have Cantata prompt for the password before " +"accessing the share, set the password to '-'" +msgstr "" +"Pokud zde zadáte heslo, bude uloženo nezašifrované 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 "" -"NOTE: Due to the way sshfs works, a suitable ssh-askpass " -"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter " -"the password." +"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, " +"ssh-askpass-gnome, etc.) will be required to enter the password." msgstr "" -"POZNÁMKA: 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.)." -"" +"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 "" -"NOTE: 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 "" -"POZNÁMKA: 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." +"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 "" +"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 @@ 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 @@ #. 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 "" -"NOTE Only enter values for the tags you wish to be search on. " -msgstr "" -"POZNÁMKA: Zadejte hodnoty pouze pro značky, které si přejete " -"hledat. " +#. 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 "" -"NOTE For genre, end string with an asterisk to match various " -"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +"For genre, end string with an asterisk to match various genres. e.g 'rock*' " +"matches 'Hard Rock' and 'Rock and Roll'." msgstr "" -"POZNÁMKA: 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'. " +"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 +#. 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 "" -"NOTE: 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 "" -"POZNÁMKA: 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:104 -#. i18n: ectx: property (text), widget (QLabel, persNote_2) -#: po/rc.cpp:437 rc.cpp:437 -msgid "" -"NOTE: 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 "" -"POZNÁMKA: 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')" +"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 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 "" "

    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.

    For more information on MPD itself, please refer to the " -"MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings required for " -"Cantata to function correctly.

    " +"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side " +"application for playing music.

    For more information on MPD itself, " +"please refer to the MPD website http://www.musicpd." +"org

    This 'wizard' will guide you through the basic settings " +"required for Cantata to function correctly.

    " msgstr "" "

    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.

    Více " -"informací o MPD naleznete na stránkách MPD http://www." -"musicpd.org

    Tento průvodce vás provede základními " -"nastaveními, která jsou potřeba pro to, aby Cantata pracovala správně.

    " +"je program pružný, schopný, běžící na pozadí (server), k přehrávání hudby.

    Více informací o MPD naleznete na stránkách MPD http://www.musicpd.org

    Tento průvodce vás provede " +"základními nastaveními, která jsou potřeba pro to, aby Cantata pracovala " +"správně.

    " #. 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 "

    Welcome to Cantata

    " msgstr "

    Vítejte v Cantatě

    " #. 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 "" "

    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:

    " +"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:

    " msgstr "" "

    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:

    " +"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:

    " #. 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 "" "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 @@ #. 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 "" "Select this option if your music collection is not shared with others, " "and you wish Cantata to configure and control the MPD instance." @@ -4995,7 +5048,7 @@ #. 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 "" "

    For more information on MPD itself, please refer to " "the MPD website NOTE: 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." -msgstr "" -"POZNÁMKA: 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:493 +#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel) +#: po/rc.cpp:497 rc.cpp:497 msgid "" -"NOTE: When using a local socket the full absolute path to the " -"socket needs to be set. (Port number is not required.)" +"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 "" -"POZNÁMKA: 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í.)" +"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: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 "" +"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 "" "

    Cantata will download missing covers, and lyrics, from the internet.

    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.

    " msgstr "" -"

    Cantata stáhne chybějící obaly a texty písní z internetu.

    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í.

    " - -#. i18n: file: gui/initialsettingswizard.ui:772 -#. i18n: ectx: property (text), widget (QLabel, persNote) -#: po/rc.cpp:521 rc.cpp:521 -msgid "" -"NOTE: 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." -msgstr "" -"POZNÁMKA: 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." - -#. i18n: file: gui/initialsettingswizard.ui:801 -#. i18n: ectx: property (text), widget (QLabel, persNote_2) -#: po/rc.cpp:524 rc.cpp:524 +"

    Cantata stáhne chybějící obaly a texty písní z internetu.

    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í.

    " + +#. i18n: file: gui/initialsettingswizard.ui:722 +#. i18n: ectx: property (text), widget (NoteLabel, persNote_2) +#: po/rc.cpp:530 rc.cpp:530 msgid "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'." -"" +"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 "" -"POZNÁMKA: 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:830 -#. i18n: ectx: property (text), widget (StateLabel, httpNote) -#: po/rc.cpp:527 rc.cpp:527 -msgid "" -"NOTE: 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 "" -"POZNÁMKA: 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." +"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:866 +#. 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 "" +"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: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!

    Cantata's configuration dialog maybe " "used to customise Cantata's appearance, as well as to add extra MPD hosts, " @@ -5159,12 +5188,26 @@ msgstr "" "Cantata je nyní nastavena!

    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 must 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, " +"musíte 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 "" "Warning: 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 @@ #. 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 -msgid "" -"NOTE: 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." -msgstr "" -"POZNÁMKA: 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." - -#. i18n: file: gui/interfacesettings.ui:109 -#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel) -#: po/rc.cpp:551 rc.cpp:551 -msgid "" -"NOTE: 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." -msgstr "" -"POZNÁMKA: 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." +#. 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 "" +"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: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 "" -"NOTE: 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." -msgstr "" -"POZNÁMKA: 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." +#. 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 "" "

    When adding artists, or albums to the playqueue, or editing tags, etc, " "then only use songs that pass the current Genre or string filter.

    e.g. " @@ -5453,47 +5529,38 @@ "to 'Metal'." msgstr "" "

    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.

    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'." +"upravování značek aj., používejte pouze písně, které projdou nynějším " +"filtrem pro žánr nebo řetězec.

    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 +#. 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 "" "

    This will change Cantata's interface as detailed:\n" @@ -5501,173 +5568,180 @@ "be 'flickable'

  • To drag items, you will need to 'touch' the top-left " "corner
  • Scrollbars will only be a few pixels wide
  • Actions (e." "g. 'Add To Play Queue') will always be visible (not just when item is under " -"mouse)
  • Spin buttons with have + and - buttons at the side of the " +"mouse)
  • Spin buttons will have + and - buttons at the side of the " "text field
  • " msgstr "" "

    Toto změní rozhraní Cantaty, jak je to popsáno dále:\n" -"

    • Tlačítka pro přehrávání a ovládání budou o 33 % širší
    • Pohledy " -"budou odstrčitelné.
    • Pro táhnutí položek budete potřebovat najet do " -"horního levého rohu
    • Posuvníky budou široké jen několik pixelů
    • " -"Činnosti (např. " -"Přidat do řady skladeb k přehrání) budou vždy viditelné (ne jen tehdy, když " -"je položka pod " -"myší)
    • Otočná tlačítka budou mít tlačítka + a - na straně " -"textového pole.

    " +"
    • Tlačítka pro přehrávání a ovládání budou o 33 % širší
    • Pohledy budou odstrčitelné.
    • Pro táhnutí položek budete " +"potřebovat najet do horního levého rohu
    • Posuvníky budou široké jen " +"několik pixelů
    • Činnosti (např. Přidat do řady skladeb k přehrání) " +"budou vždy viditelné (ne jen tehdy, když je položka pod myší)
    • Otočná " +"tlačítka budou mít tlačítka + a - na straně textového pole.

    " -#. 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 "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: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: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: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 -msgid "" -"NOTE: Changing the 'Enforce single-click activation of items' " -"setting will require a re-start of Cantata." -msgstr "" -"POZNÁMKA: 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 -msgid "" -"NOTE: Changing the language setting will require a re-start of " -"Cantata." -msgstr "" -"POZNÁMKA: Změna nastavení jazyka 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 -msgid "" -"NOTE: Changing the 'touch friendly' setting will require a re-" -"start of Cantata." -msgstr "" -"POZNÁMKA: Změna nastavení rozhraní na dotykově přátelské vyžaduje " -"opětovné spuštění " -"Cantaty." +#. 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 "" +"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: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 "" +"Changing the 'touch friendly' setting will require a re-start of Cantata." +msgstr "" +"Změna nastavení rozhraní na dotykově přátelské vyžaduje opětovné spuštění " +"Cantaty." + +#. 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 "" +"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 -msgid "" -"NOTE: 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." -msgstr "" -"POZNÁMKA: 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ě." +#. 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 "" +"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 "" "

    Filename (without extension) to save downloaded covers as.
    If left " @@ -5682,153 +5756,154 @@ #. 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 -msgid "" -"NOTE: The 'Music folder' setting is used to lookup cover-art " -"(either the value specified above, or cover.jpg / cover.png 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 "" -"Poznámka: Nastavení Složka s hudbou se používá pro hledání obrázků " -"obalů (buď hodnota stanovená výše, nebo cover.jpg / cover.png). " -"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 -msgid "" -"NOTE: '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 "" -"POZNÁMKA: 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 -msgid "" -"NOTE: 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 "" -"POZNÁMKA: 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: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 cover.jpg / cover.png 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 "" +"Nastavení Složka s hudbou se používá pro hledání obrázků obalů (buď hodnota " +"stanovená výše, nebo cover.jpg / cover.png). 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: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 "" +"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: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 "" +"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:268 +#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2) +#: po/rc.cpp:867 rc.cpp:867 msgid "" -"NOTE: If no setting is specified for 'Cover filename, then Cantata " -"will use a default of cover " +"If no setting is specified for 'Cover filename, then Cantata will use a " +"default of cover" msgstr "" -"POZNÁMKA: Pokud není nastaveno žádné nastavení pro název souboru s " -"obalem, pak bude Cantata používat výchozí obal " +"Pokud není nastaveno žádné nastavení pro název souboru s obalem, pak bude " +"Cantata používat výchozí obal" #. 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 +#. 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 "" -"NOTE: 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." -"

    \n" -"NOTE: If you choose 'Local loopback' for 'Network interface', then " -"MPD must also be on this computer.
    " -msgstr "" -"POZNÁMKA: 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ěží.

    \n" -"POZNÁMKA: Pokud zvolíte pro síťové rozhraní místní smyčku, potom " -"musí být MPD rovněž na tomto počítači.
    " +"If you choose 'Local loopback' for 'Network interface', then MPD must " +"also be on this computer." +msgstr "" +"Pokud zvolíte pro síťové rozhraní místní smyčku, potom musí 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
    NOTE: These settings apply to Digitally Imported, JazzRadio.com, " -"RockRadio.com, and Sky.fm
    " -msgstr "" -"POZNÁMKA: 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 -msgid "" -"NOTE: 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 "" -"POZNÁMKA: 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/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 "" +"Tato nastavení se použijí na Digitally Imported, JazzRadio.com, RockRadio." +"com, and Sky.fm." + +#. 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 "" +"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 "" -"NOTE: Built-in categories are shown in italic, and these cannot be " -"removed." -msgstr "" -"POZNÁMKA: Vestavěné skupiny jsou zobrazovány kurzívou, a tyto " -"nelze odstranit." - -#. 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 "(Various)" +msgstr "(Různé)" + +#. 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 "" -"NOTE Multiple genres should be separated via a semicolon (e.g. " -"'Rock;Hard Rock')" +"Ratings are stored in an external database, and not in the song's " +"file." msgstr "" -"POZNÁMKA: Více žánrů se musí oddělit středníkem (např. " -"'Rock;Hard Rock')" +"Hodnocení jsou ukládána ve vnější databázi, ne 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@seznam.cz" @@ -6029,7 +6116,7 @@ #: 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 @@ #: replaygain/rgdialog.cpp:261 msgid "" -"Scan all tracks?

    NOTE: All tracks have existing ReplyGain " -"tags." +"Scan all tracks?

    All tracks have existing ReplayGain tags." +"" msgstr "" -"Prohledat všechny skladby?

    POZNÁMKA: Všechny skladby mají " +"Prohledat všechny skladby?

    Všechny skladby mají " "existující značky pro vyrovnání hlasitost." #: replaygain/rgdialog.cpp:263 @@ -6066,17 +6153,17 @@ 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 @@ 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 @@ 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 "" -"NOTE: 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 "" -"POZNÁMKA: 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" +"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 "" +"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 @@ 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 "ERROR: Invalid protocol" msgstr "CHYBA: Neplatný protokol" @@ -6293,39 +6378,39 @@ msgstr "Instaluje se/Aktualizuje se %1" #: streams/streamproviderlistdialog.cpp:257 -msgid "Failed to install %1" -msgstr "Nepodařilo se nainstalovat %1" +msgid "Failed to install '%1'" +msgstr "Nepodařilo se nainstalovat '%1'" #: streams/streamproviderlistdialog.cpp:266 -msgid "Failed to download %1" -msgstr "Nepodařilo se stáhnout %1" +msgid "Failed to download '%1'" +msgstr "Nepodařilo se stáhnout '%1'" -#: streams/streamproviderlistdialog.cpp:327 -msgid "ListenLive" -msgstr "Poslouchat živě" - -#: streams/streamproviderlistdialog.cpp:364 -msgid "Install the following?" -msgstr "Nainstalovat následující?" - -#: streams/streamproviderlistdialog.cpp:374 -msgid "Update the following?" -msgstr "Aktualizovat následující?" +#: streams/streamproviderlistdialog.cpp:356 +msgid "Install/update the selected stream providers?" +msgstr "Nainstalovat/Aktualizovat poskytovatele vybraných proudů?" + +#: streams/streamproviderlistdialog.cpp:358 +msgid "Install the selected stream providers?" +msgstr "Nainstalovat poskytovatele vybraných proudů?" + +#: 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 @@ 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 %1!" -msgstr "Nepodařilo se vytvořit %1!" - -#: streams/streamspage.cpp:254 streams/streamspage.cpp:435 -msgid "Stream already exists!
    %1" -msgstr "Proud již existuje!
    %1" - -#: streams/streamspage.cpp:256 streams/streamspage.cpp:437 -msgid "A stream named %1 already exists!" -msgstr "Proud pojmenovaný %1 již existuje!" +#: streams/streamspage.cpp:249 +msgid "Failed to create '%1'!" +msgstr "Nepodařilo se vytvořit '%1'!" + +#: streams/streamspage.cpp:266 streams/streamspage.cpp:447 +msgid "Stream '%1' already exists!" +msgstr "Proud '%1' 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 %1 streams?" -msgstr "Nahrát znovu %1 proudů?" - -#: streams/streamspage.cpp:362 -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 %1 bookmarks?" -msgstr "Opravdu chcete odstranit všech %1 záložek?" +#: streams/streamspage.cpp:356 +msgid "Reload '%1' streams?" +msgstr "Nahrát znovu '%1' proudů?" + +#: 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: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 %1?" -msgstr "Opravdu chcete odstranit %1?" +#: 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 %1 already exists!
    Overwrite?" -msgstr "Skupina pojmenovaná %1 již existuje!
    Přepsat?" - -#: streams/streamssettings.cpp:176 -msgid "Failed top open package file" -msgstr "Nepodařilo se otevřít soubor balíčku" +#: 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: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 @@ 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,133 +6663,261 @@ 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 +#: 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 all tracks?" msgstr "Použít zařazení pod Různí umělci na všechny skladby?" -#: tags/tageditor.cpp:499 +#: tags/tageditor.cpp:528 +msgid "" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" +msgstr "" +"Toto nastaví Umělce alba a Umělce na Různí umělci, a nastaví Název na " +"\"Umělec skladby - Název skladby\"" + +#: tags/tageditor.cpp:567 msgid "Revert \"Various Artists\" workaround on all tracks?" msgstr "Zvrátit zařazení pod Různí umělci pro všechny skladby?" -#: tags/tageditor.cpp:549 -msgid "" +#: tags/tageditor.cpp:568 +msgid "Revert \"Various Artists\" workaround" +msgstr "Zvrátit zařazení pod Různí umělci" + +#: tags/tageditor.cpp:570 +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.

    If 'Title' " +"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " +"will be set to \"Wobble\"
    " +msgstr "" +"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ř.

    Pokud je Název \"Wibble - Wobble\", " +"pak Umělec se nastaví na \"Wibble\" a Název na \"Wobble\"
    " + +#: tags/tageditor.cpp:617 +msgid "" "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for all " "tracks?" msgstr "" "Nastavit Umělec alba z Umělec (pokud je Umělec alba prázdný) pro všechny 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 all tracks?" +"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of " +"all tracks?" msgstr "" -"Psát velkým písmenem první písmeno Názvu, Umělce, Umělce alba a Alba u " -"všech skladeb?" +"Psát velkým písmenem první písmeno textových polí (např. Název, Umělec, " +"Umělec alba, Album atd.) u všech 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!
    %1" -msgstr "Zdrojový soubor neexistuje!
    %1" - -#: tags/trackorganiser.cpp:297 -msgid "Destination file already exists!
    %1" -msgstr "Cílový soubor již existuje!


    %1" - -#: tags/trackorganiser.cpp:319 -msgid "Failed to create destination folder!
    %1" -msgstr "Nepodařilo se vytvořit cílovou složku!
    %1" - -#: tags/trackorganiser.cpp:340 -msgid "Failed to rename %1 to %2" -msgstr "Nepodařilo se přejmenovat %1 na %2" +#: tags/trackorganiser.cpp:280 +msgid "Source file does not exist!" +msgstr "Zdrojový soubor neexistuje!" + +#: tags/trackorganiser.cpp:299 +msgid "Destination file already exists!" +msgstr "Cílový soubor již existuje!" + +#: tags/trackorganiser.cpp:321 +msgid "Failed to create destination folder!" +msgstr "Nepodařilo se vytvořit cílovou složku!" + +#: 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 "
    " msgstr "" -#: widgets/coverwidget.cpp:89 +#: widgets/coverwidget.cpp:78 +msgid "" +msgstr "" + +#: widgets/coverwidget.cpp:80 msgid "" "" 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 @@ 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 @@ 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 @@ #. 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 @@ 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 @@ 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 @@ "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 @@ #: 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 "ERROR: 'From Year' should be less than 'To Year'" msgstr "FEHLER: 'Von Jahr' muss kleiner als 'Zu Jahr' sein" -#: dynamic/dynamicruledialog.cpp:221 +#: dynamic/dynamicruledialog.cpp:220 msgid "" "ERROR: Date range is too large (can only be a maximum of %1 " "years)" @@ -1799,63 +1807,68 @@ msgid "Dynamic Rules" msgstr "Dynamische Regeln" -#: dynamic/dynamicrulesdialog.cpp:292 +#: dynamic/dynamicrulesdialog.cpp:295 +msgid "About dynamic rules" +msgstr "" + +#: dynamic/dynamicrulesdialog.cpp:297 msgid "" "

    Cantata will query your library using all of the rules listed. The list " "of Include rules will be used to build a set of songs that can be " "used. The list of Exclude rules will be used to build a set of songs " "that cannot be used. If there are no Include rules, Cantata will " -"assume that all songs (bar those from Exclude) can be used.
    e.g. " -"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', " -"you would need the following:

    • Include AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various Artists
    To have Cantata look " -"for 'Songs by Wibble but not from album Abc', you would need the following: " -"
    • Include AlbumArtist=Wibble
    • Exclude Album=Abc
    After " -"the set of usable songs has been created, Cantata will randomly select songs " -"to keep the play queue filled with 10 entries.

    " +"assume that all songs (bar those from Exclude) can be used.

    e." +"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various " +"Artists', you would need the following:

    • Include AlbumArtist=Wibble " +"Genre=Rock
    • Include AlbumArtist=Various Artists
    To have " +"Cantata look for 'Songs by Wibble but not from album Abc', you would need " +"the following:
    • Include AlbumArtist=Wibble
    • Exclude " +"AlbumArtist=Wibble Album=Abc
    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.

    " msgstr "" -#: dynamic/dynamicrulesdialog.cpp:311 +#: 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 @@ "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 "

    Delete all from the following?

      %1

    " -msgstr "

    Alles folgende löschen?

      %1

    " +#: 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 @@ "%1\n" "%2 x %3 (%4)" -#: gui/coverdialog.cpp:126 +#: gui/coverdialog.cpp:129 msgctxt "" "name\n" "width x height" @@ -1946,69 +1959,68 @@ "%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 @@ #. 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 @@ 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 @@ "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 @@ "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 @@ "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 "" "Cantata %1

    MPD client.

    © 2011-2014 Craig " @@ -2561,7 +2525,7 @@ "Drummond
    Veröffentlicht unter der
    GPLv3" -#: gui/mainwindow.cpp:1146 +#: gui/mainwindow.cpp:1214 msgid "" "Based upon QtMPC - © 2007-2010 " "The QtMPC Authors
    " @@ -2569,7 +2533,7 @@ "Basierend auf QtMPC – © 2007–" "2010 Die QtMPC Authoren
    " -#: gui/mainwindow.cpp:1147 +#: gui/mainwindow.cpp:1215 msgctxt "Qt-only" msgid "" "Context view backdrops courtesy of FanArt." @@ -2578,7 +2542,7 @@ "Kontextansicht-Hintergründe mit freundlicher Genehmigung von FanArt.tv" -#: gui/mainwindow.cpp:1148 +#: gui/mainwindow.cpp:1216 msgctxt "Qt-only" msgid "" "Context view metadata courtesy of Wikipedia und Last." "fm" -#: gui/mainwindow.cpp:1149 +#: gui/mainwindow.cpp:1217 msgid "" "Please consider uploading your own music fan-art to FanArt.tv" @@ -2596,18 +2560,30 @@ "Bitte laden Sie ihren eigenen Content zu FanArt.tv 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: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 "Serverinformationen" + +#: gui/mainwindow.cpp:1608 msgid "" "
    " msgstr "" -#: gui/mainwindow.cpp:1532 +#: gui/mainwindow.cpp:1619 msgid "" "" 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 "" -"%1 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 %1 already exists!
    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 %1existiert bereits.
    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 "" "Connected to %1
    The entries below apply to the currently connected " "MPD collection.
    " @@ -2704,9 +2698,9 @@ "Verbindung zu %1
    Die unten angezeigten Einträge beziehen sich auf die " "aktuelle MPD-Instanz.
    " -#. 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 "" "Not Connected!
    The entries below cannot be modified, as Cantata is " "not connected to MPD.
    " @@ -2714,31 +2708,21 @@ "Nicht verbunden.
    Einige Einträge können nicht bearbeitet werden " "solange Cantata nicht mit MPD verbunden wird.
    " -#: gui/playbacksettings.cpp:169 +#: gui/playbacksettings.cpp:174 msgid "" -"

    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.

    The following ReplayGain settings may be used:" +"players.

    The following ReplayGain settings may be used:" "

    • None - No ReplayGain is applied.
    • Track - " "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's ReplayGain tags.
    • Auto - Volume will be adjusted using the track's ReplayGain " "tags if random play is activated, otherwise the album's tags will be used.

    " +"li>" msgstr "" -"

    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.

    Die folgenden " -"Einstellungen können gewählt werden:

    • Keine – ReplayGain wird " -"nicht hinzugefügt.
    • Stück – Lautstärke wird eingestellt auf " -"das Stück.
    • Album – Lautstärke wird eingestellt auf das Album." -"
    • Automatisch – Lautstärke wird auf das Stück eingestellt, " -"wenn die zufällige Wiedergabe eingestellt ist. Sonst wird auf Album " -"eingestellt.

    " -#: 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 "Umbenennen" @@ -2746,37 +2730,37 @@ 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 %1 already exists!
    Overwrite?" +#: gui/playlistspage.cpp:245 gui/playlistspage.cpp:272 +msgid "" +"A playlist named '%1' already exists!\n" +"\n" +"Overwrite?" msgstr "" -"Eine Wiedergabeliste mit Namen %1existiert bereits.
    " -"Ü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 @@ 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 @@ #. 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 "" " This folder will also be used to locate music files for transferring to " "(and from) devices." @@ -3015,333 +3007,313 @@ " Dieser Ordner wird verwendet für Musik-Dateien zur Übertragung zum und " "vom Gerät." -#. 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?
    • Standard - " -"music collection may be shared, is on another machine, or is already setup
    • 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?
  • Standard: " -"
    Musiksammlung kann geteilt werden, ist auf einem anderen Rechner, oder " -"ist bereits eingerichtet.
  • Einfach:
    Musiksammlung ist nicht mit " -"anderen geteilt und Cantata wird Konfiguration und Steuerung der MPD-Instanz " -"übernehmen." +"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 "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 %1?" -msgstr "Lösche %1?" +#: 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 @@ msgid "Disc" msgstr "Disk" +#: models/playqueuemodel.cpp:178 +msgid "Rating" +msgstr "" + #: models/playqueuemodel.cpp:241 msgid "Undo" msgstr "" @@ -3371,85 +3347,81 @@ msgid "Album Artist" msgstr "Albumkünstler" -#: models/playqueuemodel.cpp:583 -msgid "(Priority: %1)" -msgstr "(Priorität: %1)" - -#: 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 @@ "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 %1 to %2" msgstr "Fehler beim Umbenennen von %1 nach %2" -#: mpd/mpdconnection.cpp:1410 +#: mpd/mpdconnection.cpp:1534 msgid "Failed to save %1" msgstr "Fehler beim Speichern von %1" -#: 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 @@ 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 @@ "%2\n" "%3" -#: mpd/song.cpp:601 +#: mpd/song.cpp:683 msgctxt "Song on Album" msgid "%1 on %2" msgstr "" -#: mpd/song.cpp:602 +#: mpd/song.cpp:684 msgctxt "Song by Artist on Album" msgid "%1 by %2 on %3" msgstr "" @@ -3548,19 +3516,19 @@ 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 @@ #. 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 @@ 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 %1?" +#: 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 %1?" -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 @@ 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 @@ #. 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 @@ #. 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 @@ #. 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 @@ 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 "" -"NOTE: 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)." -msgstr "" -"Hinweis: 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)." +"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 @@ 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 "" -"NOTE: Connected to a Mopidy server (manual update required)." +#. 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 @@ #. 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 @@ 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 "" -"NOTE: These settings are only valid, and editable, when the device " -"is connected." +"These settings are only valid, and editable, when the device is connected." msgstr "" -"Hinweis: Diese Einstellungen sind nur gültig, wenn das Gerät " -"verbunden ist." -#. 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 @@ 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 "" -"NOTE: These settings are only editable when the device is not " -"connected." +msgid "These settings are only editable when the device is not connected." msgstr "" -"Hinweis: Diese Einstellungen sind nur gültig, wenn das Gerät nicht " -"verbunden ist." -#. 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 "" -"NOTE: If you enter a password here, it will be stored " -"unencrypted in Cantata's config file. To have Cantata prompt for the " -"password before accessing the share, set the password to '-'" -msgstr "" -"Hinweis: Wenn Sie hier ein Kennwort eingeben, wird es " -"unverschlüsselt in Cantatas Konfigurationdatei gespeichert. Wenn Sie " -"möchten, dass Cantata sie zur Passworteingabe auffordert, setzen Sie das " -"Kennwort auf '-'" +"If you enter a password here, it will be stored unencrypted 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 "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 "" -"NOTE: Due to the way sshfs works, a suitable ssh-askpass " -"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter " -"the password." -msgstr "" -"Hinweis: 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." +"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 "" -"NOTE: 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 "" -"Hinweis: 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" +"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) @@ -4685,39 +4646,51 @@ 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 @@ #. 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 "" -"NOTE Only enter values for the tags you wish to be search on. " +#. 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 "" -"Hinweis: Nur Werte für Tags angeben, welche auch gesucht werden." -#. 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 "" -"NOTE For genre, end string with an asterisk to match various " -"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +"For genre, end string with an asterisk to match various genres. e.g 'rock*' " +"matches 'Hard Rock' and 'Rock and Roll'." msgstr "" -"Hinweis: Für Genre nach dem letzten Buchstaben ein * findet " -"mehrere Genre. z. B. 'rock*' findet 'Hard Rock' und '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 "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 -msgid "" -"NOTE: 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." +#. 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: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 "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/" -"Tracks')" +"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 "" "

    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.

    For more information on MPD itself, please refer to the " -"MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings required for " -"Cantata to function correctly.

    " +"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side " +"application for playing music.

    For more information on MPD itself, " +"please refer to the MPD website http://www.musicpd." +"org

    This 'wizard' will guide you through the basic settings " +"required for Cantata to function correctly.

    " msgstr "" -"

    Cantata ist ein umfangreiches Clientprogramm für den " -"Music Player Daemon (MPD). Damit Cantata funktioniert, muss eine laufende " -"Installation von MPD vorhanden sein.

    Für weitere Information zu MPD " -"besuchen Sie bitte dessen Webseite unter http://www." -"musicpd.org


    Diese 'Hilfsdialog' wird Sie durch die " -"Konfiguration begleiten. damit Cantata richtig funktioniert.

    " #. 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 "

    Welcome to Cantata

    " msgstr "

    Willkommen bei Cantata

    " #. 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 "" "

    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:

    " +"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:

    " 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 "" "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 @@ #. 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 "" "Select this option if your music collection is not shared with others, " "and you wish Cantata to configure and control the MPD instance." @@ -4911,7 +4875,7 @@ #. 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 "" "

    For more information on MPD itself, please refer to " "the MPD website NOTE: 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." -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:493 +#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel) +#: po/rc.cpp:497 rc.cpp:497 msgid "" -"NOTE: When using a local socket the full absolute path to the " -"socket needs to be set. (Port number is not required.)" +"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 "" -"Hinweis: Wenn Sie einen lokalen Domain-Socket benutzen, müssen Sie " -"den absoluten Pfad dorthin angeben. (Portnummer wird dann nicht benötigt.)" -#. i18n: file: gui/initialsettingswizard.ui:571 +#. 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: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 "" "

    Cantata will download missing covers, and lyrics, from the internet.

    For each of these, please confirm whether you wish Cantata to store the " @@ -5008,59 +4968,52 @@ "folders.

    " msgstr "" -#. i18n: file: gui/initialsettingswizard.ui:772 -#. i18n: ectx: property (text), widget (QLabel, persNote) -#: po/rc.cpp:521 rc.cpp:521 -msgid "" -"NOTE: 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." -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 "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'." -"" +"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 -msgid "" -"NOTE: 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 "" -"Hinweis: Das Musikverzeichnis zeigt auf eine HTTP-Adresse und " -"Cantata kann aktuell keine Dateien hochladen. Daher sollten die obigen " -"Einstellungen deaktiviert werden." +#. 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: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!

    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 must 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 "" "Warning: 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 @@ #. 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 "" -"NOTE: 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." +"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 "" -"NOTE: 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." -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 "" -"NOTE: 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." -msgstr "" -"Hinweis: 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." +#. 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 "" "

    When adding artists, or albums to the playqueue, or editing tags, etc, " "then only use songs that pass the current Genre or string filter.

    e.g. " @@ -5340,39 +5326,33 @@ "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 "" "

    This will change Cantata's interface as detailed:\n" @@ -5380,159 +5360,160 @@ "be 'flickable'

  • To drag items, you will need to 'touch' the top-left " "corner
  • Scrollbars will only be a few pixels wide
  • Actions (e." "g. 'Add To Play Queue') will always be visible (not just when item is under " -"mouse)
  • Spin buttons with have + and - buttons at the side of the " +"mouse)
  • Spin buttons will have + and - buttons at the side of the " "text field
  • " 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 "" -"NOTE: Changing the 'Enforce single-click activation of items' " -"setting will require a re-start of Cantata." +"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 "" -"Hinweis: Zur Änderung der Einzelklick-Einstellung muss Cantata neu " -"gestartet werden." -#. 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 "" -"NOTE: Changing the language setting will require a re-start of " -"Cantata." +"Changing the 'touch friendly' setting will require a re-start of Cantata." msgstr "" -"Hinweis: Änderung Sprache benötigt einen Neustart von Cantata." -#. 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 "" -"NOTE: Changing the 'touch friendly' setting will require a re-" -"start of Cantata." +"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 "" -"NOTE: 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." +"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 "" -"Hinweis: Wenn Sie die Stopp-Schaltfläche gedrückt halten, öffnet " -"sich ein Menü für verschiedene Aktionen." -#. 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 "" "

    Filename (without extension) to save downloaded covers as.
    If left " @@ -5547,151 +5528,138 @@ #. 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 -msgid "" -"NOTE: The 'Music folder' setting is used to lookup cover-art " -"(either the value specified above, or cover.jpg / cover.png 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 "" -"Hinweis: Das Musikverzeichnis wird zur Coversuche benötigt (z. B. " -"cover.jpg). Wenn Sie die Berechtigung zum Schreiben auf diese " -"Verzeichnisse (und Unterverzeichnisse) haben, wird Cantata alle " -"heruntergeladenen Cover in den entsprechenden Albenordner ablegen." - -#. i18n: file: gui/serversettings.ui:264 -#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel) -#: po/rc.cpp:841 rc.cpp:841 -msgid "" -"NOTE: '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 -msgid "" -"NOTE: 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 "" -"Hinweis: Wenn sie die Einstellung zum Musikverzeichnis ändern, " -"muss die Musikbibliothek manuell aktualisiert werden. Dies kann über die " -"Schaltfläche 'Aktualisiere Datenbank' ausgeführt werden." - -#. 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: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 cover.jpg / cover.png 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 "" -"NOTE: If no setting is specified for 'Cover filename, then Cantata " -"will use a default of cover " +"If no setting is specified for 'Cover filename, then Cantata will use a " +"default of cover" msgstr "" -"Hinweis: Wenn keine Einstellung zum Covernamen angegeben sind, " -"wird Cantata den voreingestellten Namen cover nehmen." #. 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 +#. i18n: file: http/httpserversettings.ui:40 +#. i18n: ectx: property (text), widget (NoteLabel, label_4) +#: po/rc.cpp:873 rc.cpp:873 msgid "" -"NOTE: 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." -"

    \n" -"NOTE: If you choose 'Local loopback' for 'Network interface', then " -"MPD must also be on this computer.
    " -msgstr "" -"Hinweis: 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.

    \n" -"Hinweis: Wenn Sie 'Local loopback' für die 'Netzwerkkarte', " -"eingestellt haben muss sich MPD auf dem gleichen Computer befinden." +"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 must " +"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
    NOTE: These settings apply to Digitally Imported, JazzRadio.com, " -"RockRadio.com, and Sky.fm" +"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 "" -"NOTE: 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" +"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 "" -"NOTE: Built-in categories are shown in italic, and these cannot be " -"removed." +#. 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 "(Various)" +msgstr "" + +#. i18n: file: tags/tageditor.ui:210 +#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x) +#: po/rc.cpp:1029 rc.cpp:1029 msgid "" -"NOTE Multiple genres should be separated via a semicolon (e.g. " -"'Rock;Hard Rock')" +"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 not 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 "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@web.de" @@ -5882,7 +5866,7 @@ #: 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 @@ #: replaygain/rgdialog.cpp:261 msgid "" -"Scan all tracks?

    NOTE: All tracks have existing ReplyGain " -"tags." +"Scan all tracks?

    All tracks have existing ReplayGain tags." +"" msgstr "" -"Suche in allen Stücken?

    Hinweis: Alle Stücke besitzen einen " -"ReplayGain-Tag. " #: replaygain/rgdialog.cpp:263 msgid "Do you wish to scan all tracks, or only tracks without existing tags?" @@ -5918,17 +5900,17 @@ 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 @@ 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 @@ 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 "" -"NOTE: 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." +"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 @@ 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 "ERROR: Invalid protocol" msgstr "FEHLER: Ungültiges Protokoll" @@ -6137,39 +6119,39 @@ msgstr "" #: streams/streamproviderlistdialog.cpp:257 -msgid "Failed to install %1" +msgid "Failed to install '%1'" msgstr "" #: streams/streamproviderlistdialog.cpp:266 -msgid "Failed to download %1" +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 @@ 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 %1!" -msgstr "Fehler beim Erstellen von %1." +#: streams/streamspage.cpp:249 +msgid "Failed to create '%1'!" +msgstr "" -#: streams/streamspage.cpp:254 streams/streamspage.cpp:435 -msgid "Stream already exists!
    %1" -msgstr "Stream existiert bereits.
    %1" - -#: streams/streamspage.cpp:256 streams/streamspage.cpp:437 -msgid "A stream named %1 already exists!" -msgstr "Der Stream mit dem Namen %1 existiert bereits." +#: streams/streamspage.cpp:266 streams/streamspage.cpp:447 +msgid "Stream '%1' already exists!" +msgstr "" + +#: 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 %1 streams?" -msgstr "Erneutes Laden %1 der Streams?" - -#: streams/streamspage.cpp:362 -msgid "Are you sure you wish to remove bookmark to %1?" -msgstr "Wollen Sie wirklich das Lesezeichen %1 entfernen?" - -#: streams/streamspage.cpp:368 -msgid "Are you sure you wish to remove all %1 bookmarks?" -msgstr "Wollen Sie wirklich alle %1 Lesezeichen entfernen?" +#: streams/streamspage.cpp:356 +msgid "Reload '%1' streams?" +msgstr "" -#: streams/streamspage.cpp:392 +#: streams/streamspage.cpp:374 +msgid "Are you sure you wish to remove bookmark to '%1'?" +msgstr "" + +#: streams/streamspage.cpp:380 +msgid "Are you sure you wish to remove all '%1' bookmarks?" +msgstr "" + +#: 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 %1?" -msgstr "Wollen Sie wirklich %1 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 %1 already exists!
    Overwrite?" +#: streams/streamssettings.cpp:151 +msgid "" +"A category named '%1' already exists!\n" +"\n" +"Overwrite?" msgstr "" -"Eine Kategorie mit Namen %1existiert bereits.
    Ü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 @@ 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 @@ 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 all tracks?" msgstr "" "Hinzufügen der „Verschiedene Künstler“ Problembehebung bei allen " "Stücken?" -#: tags/tageditor.cpp:499 +#: tags/tageditor.cpp:528 +msgid "" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" +msgstr "" +"Dies wird den 'Albumkünstler' und 'Künstler' zu „Verschiedene Künstler“ " +"gesetzt, und der 'Titel' zu \"TrackArtist - TrackTitle\"" + +#: tags/tageditor.cpp:567 msgid "Revert \"Various Artists\" workaround on all tracks?" msgstr "" "Zurücksetzen der „Verschiedene Künstler“ Problembehebung bei allen " "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 "" +"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.

    If 'Title' " +"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " +"will be set to \"Wobble\"
    " +msgstr "" +"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.

    Wenn z. B. " +"'Titel' \"Wibble - Wobble\" lautet, wird der 'Künstler' zu \"Wibble\" " +"gesetzt und der 'Titel' zu \"Wobble\" gesetzt
    " + +#: tags/tageditor.cpp:617 msgid "" "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for all " "tracks?" @@ -6461,73 +6501,152 @@ "Setze 'Albumkünstler' mit 'Künstler' (wenn 'Albumkünstler' leer ist) bei " "allen 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 all tracks?" +"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of " +"all tracks?" msgstr "" -"Ersten Buchstaben von 'Title', 'Artist', 'Album artist', and 'Album' in " -"Großbuchstaben von allen 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!
    %1" -msgstr "Quelldatei existiert nicht.
    %1" - -#: tags/trackorganiser.cpp:297 -msgid "Destination file already exists!
    %1" -msgstr "Zieldateiname existiert bereits.
    %1" - -#: tags/trackorganiser.cpp:319 -msgid "Failed to create destination folder!
    %1" -msgstr "Fehler beim Erstellen des Zielordners
    %1" - -#: tags/trackorganiser.cpp:340 -msgid "Failed to rename %1 to %2" -msgstr "Fehler beim Umbenennen %1 zu %2" +#: tags/trackorganiser.cpp:280 +msgid "Source file does not exist!" +msgstr "" + +#: tags/trackorganiser.cpp:299 +msgid "Destination file already exists!" +msgstr "" + +#: tags/trackorganiser.cpp:321 +msgid "Failed to create destination folder!" +msgstr "" + +#: 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 "

    " msgstr "" -#: widgets/coverwidget.cpp:89 +#: widgets/coverwidget.cpp:78 +msgid "" +msgstr "" + +#: widgets/coverwidget.cpp:80 msgid "" "" 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 @@ msgid "%1 (Disc %2)" msgstr "" -#: devices/musicbrainz.cpp:394 +#: devices/musicbrainz.cpp:388 msgid "No matches found in MusicBrainz" msgstr "" @@ -1324,14 +1355,15 @@ 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 @@ #. 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 @@ 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 @@ 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 @@ #: 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 "ERROR: 'From Year' should be less than 'To Year'" msgstr "" -#: dynamic/dynamicruledialog.cpp:221 +#: dynamic/dynamicruledialog.cpp:220 msgid "" "ERROR: Date range is too large (can only be a maximum of %1 " "years)" @@ -1627,61 +1664,68 @@ msgid "Dynamic Rules" msgstr "" -#: dynamic/dynamicrulesdialog.cpp:292 +#: dynamic/dynamicrulesdialog.cpp:295 +msgid "About dynamic rules" +msgstr "" + +#: dynamic/dynamicrulesdialog.cpp:297 msgid "" "

    Cantata will query your library using all of the rules listed. The list " "of Include rules will be used to build a set of songs that can be " "used. The list of Exclude rules will be used to build a set of songs " "that cannot be used. If there are no Include rules, Cantata will " -"assume that all songs (bar those from Exclude) can be used.
    e.g. " -"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', " -"you would need the following:

    • Include AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various Artists
    To have Cantata look " -"for 'Songs by Wibble but not from album Abc', you would need the following: " -"
    • Include AlbumArtist=Wibble
    • Exclude Album=Abc
    After " -"the set of usable songs has been created, Cantata will randomly select songs " -"to keep the play queue filled with 10 entries.

    " +"assume that all songs (bar those from Exclude) can be used.

    e." +"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various " +"Artists', you would need the following:

    • Include AlbumArtist=Wibble " +"Genre=Rock
    • Include AlbumArtist=Various Artists
    To have " +"Cantata look for 'Songs by Wibble but not from album Abc', you would need " +"the following:
    • Include AlbumArtist=Wibble
    • Exclude " +"AlbumArtist=Wibble Album=Abc
    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.

    " msgstr "" -#: dynamic/dynamicrulesdialog.cpp:311 +#: 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 @@ "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 "

    Delete all from the following?

      %1

    " +#: 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 @@ "%2 x %3 (%4)" msgstr "" -#: gui/coverdialog.cpp:126 +#: gui/coverdialog.cpp:129 msgctxt "" "name\n" "width x height" @@ -1768,67 +1812,68 @@ "%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 @@ #. 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 @@ 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 "" "Cantata %1

    MPD client.

    © 2011-2014 Craig " @@ -2364,44 +2367,56 @@ "html\">GPLv3
    " msgstr "" -#: gui/mainwindow.cpp:1146 +#: gui/mainwindow.cpp:1214 msgid "" "Based upon QtMPC - © 2007-2010 " "The QtMPC Authors
    " msgstr "" -#: gui/mainwindow.cpp:1147 +#: gui/mainwindow.cpp:1215 msgctxt "Qt-only" msgid "" "Context view backdrops courtesy of FanArt." "tv" msgstr "" -#: gui/mainwindow.cpp:1148 +#: gui/mainwindow.cpp:1216 msgctxt "Qt-only" msgid "" "Context view metadata courtesy of Wikipedia and Last.fm" msgstr "" -#: gui/mainwindow.cpp:1149 +#: gui/mainwindow.cpp:1217 msgid "" "Please consider uploading your own music fan-art to FanArt.tv" 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 "" "
    " msgstr "" -#: gui/mainwindow.cpp:1532 +#: gui/mainwindow.cpp:1619 msgid "" "" 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 "" -"%1 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 "" -"%1 is used to store favourite streams, please choose another name." -#: gui/mainwindow.cpp:2013 -msgid "A playlist named %1 already exists!
    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 "" "Connected to %1
    The entries below apply to the currently connected " "MPD collection.
    " 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 "" "Not Connected!
    The entries below cannot be modified, as Cantata is " "not connected to MPD.
    " msgstr "" -#: gui/playbacksettings.cpp:169 +#: gui/playbacksettings.cpp:174 msgid "" -"

    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.

    The following ReplayGain settings may be used:" +"players.

    The following ReplayGain settings may be used:" "

    • None - No ReplayGain is applied.
    • Track - " "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's ReplayGain tags.
    • Auto - Volume will be adjusted using the track's ReplayGain " "tags if random play is activated, otherwise the album's tags will be used.

    " +"li>" 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 @@ 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 %1 already exists!
    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 @@ 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 @@ #. 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 "" " This folder will also be used to locate music files for transferring to " "(and from) devices." 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?
    • Standard - " -"music collection may be shared, is on another machine, or is already setup
    • Basic - music collection is not shared with others, and Cantata will " -"configure and control the MPD instance
    " +"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 %1?" +#: 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 @@ msgid "Disc" msgstr "" +#: models/playqueuemodel.cpp:178 +msgid "Rating" +msgstr "" + #: models/playqueuemodel.cpp:241 msgid "Undo" msgstr "" @@ -3139,111 +3174,107 @@ msgid "Album Artist" msgstr "" -#: models/playqueuemodel.cpp:583 -msgid "(Priority: %1)" -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 %1 to %2" msgstr "" -#: mpd/mpdconnection.cpp:1410 +#: mpd/mpdconnection.cpp:1534 msgid "Failed to save %1" 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 @@ 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 @@ "%3" msgstr "" -#: mpd/song.cpp:601 +#: mpd/song.cpp:683 msgctxt "Song on Album" msgid "%1 on %2" msgstr "" -#: mpd/song.cpp:602 +#: mpd/song.cpp:684 msgctxt "Song by Artist on Album" msgid "%1 by %2 on %3" msgstr "" @@ -3308,19 +3335,19 @@ 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 @@ #. 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 @@ 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:105 streams/streamspage.cpp:99 +#: support/fancytabwidget.cpp:711 +msgid "Configure..." msgstr "" -#: online/onlineservicespage.cpp:523 -msgid "Unsubscribe from %1?" +#: online/onlineservicespage.cpp:322 +msgctxt "Search ServiceName:" +msgid "Search %1:" msgstr "" -#: online/onlineservicespage.cpp:544 -msgid "Refresh all podcast listings?" +#: online/onlineservicespage.cpp:467 +msgid "Re-download music listing for %1?" msgstr "" -#: online/onlineservicespage.cpp:565 -msgid "Refresh episode listing from %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 "" @@ -3618,59 +3649,77 @@ 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 @@ #. 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 @@ #. 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 @@ #. 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 @@ 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 "" -"NOTE: 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)." +"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 @@ 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 "" -"NOTE: Connected to a Mopidy server (manual update required)." +#. 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 @@ #. 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 @@ 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 "" -"NOTE: These settings are only valid, and editable, when the device " -"is connected." +"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 @@ 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 "" -"NOTE: These settings are only editable when the device is not " -"connected." +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 "" -"NOTE: If you enter a password here, it will be stored " -"unencrypted in Cantata's config file. To have Cantata prompt for the " -"password before accessing the share, set the password to '-'" +"If you enter a password here, it will be stored unencrypted 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 "" -"NOTE: Due to the way sshfs works, a suitable ssh-askpass " -"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter " -"the password." +"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 "" -"NOTE: 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." +"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 @@ 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 @@ #. 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 "" -"NOTE Only enter values for the tags you wish to be search on. " +#. 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 "" -"NOTE For genre, end string with an asterisk to match various " -"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +"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 -msgid "" -"NOTE: 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." +#. 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: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 "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/" -"Tracks')" +"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 "" "

    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.

    For more information on MPD itself, please refer to the " -"MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings required for " -"Cantata to function correctly.

    " +"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side " +"application for playing music.

    For more information on MPD itself, " +"please refer to the MPD website http://www.musicpd." +"org

    This 'wizard' will guide you through the basic settings " +"required for Cantata to function correctly.

    " 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 "

    Welcome to Cantata

    " 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 "" "

    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:

    " +"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:

    " 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 "" "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 @@ #. 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 "" "Select this option if your music collection is not shared with others, " "and you wish Cantata to configure and control the MPD instance." @@ -4635,7 +4692,7 @@ #. 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 "" "

    For more information on MPD itself, please refer to " "the MPD website NOTE: 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." -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: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 "" -"NOTE: When using a local socket the full absolute path to the " -"socket needs to be set. (Port number is not required.)" +"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 "" "

    Cantata will download missing covers, and lyrics, from the internet.

    For each of these, please confirm whether you wish Cantata to store the " @@ -4721,56 +4777,52 @@ "folders.

    " msgstr "" -#. i18n: file: gui/initialsettingswizard.ui:772 -#. i18n: ectx: property (text), widget (QLabel, persNote) -#: po/rc.cpp:521 rc.cpp:521 -msgid "" -"NOTE: 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." -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 "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'." -"" +"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 "" -"NOTE: 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." +"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!

    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 must 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 "" "Warning: 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 @@ #. 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 "" -"NOTE: 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." +"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 "" -"NOTE: 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." +#. 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 "" -"NOTE: 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." +#. 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 "" "

    When adding artists, or albums to the playqueue, or editing tags, etc, " "then only use songs that pass the current Genre or string filter.

    e.g. " @@ -5041,39 +5130,33 @@ "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 "" "

    This will change Cantata's interface as detailed:\n" @@ -5081,154 +5164,160 @@ "be 'flickable'

  • To drag items, you will need to 'touch' the top-left " "corner
  • Scrollbars will only be a few pixels wide
  • Actions (e." "g. 'Add To Play Queue') will always be visible (not just when item is under " -"mouse)
  • Spin buttons with have + and - buttons at the side of the " +"mouse)
  • Spin buttons will have + and - buttons at the side of the " "text field
  • " 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 "" -"NOTE: Changing the 'Enforce single-click activation of items' " -"setting will require a re-start of Cantata." +"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 "" -"NOTE: Changing the language setting will require a re-start of " -"Cantata." +"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 "" -"NOTE: Changing the 'touch friendly' setting will require a re-" -"start of Cantata." +"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 "" -"NOTE: 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." +"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 "" "

    Filename (without extension) to save downloaded covers as.
    If left " @@ -5239,135 +5328,138 @@ #. 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 "" -"NOTE: The 'Music folder' setting is used to lookup cover-art " -"(either the value specified above, or cover.jpg / cover.png 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." +"The 'Music folder' setting is used to lookup cover-art (either the value " +"specified above, or cover.jpg / cover.png 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 "" -"NOTE: '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." +"'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 "" -"NOTE: 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." +"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 "" -"NOTE: If no setting is specified for 'Cover filename, then Cantata " -"will use a default of cover " +"If no setting is specified for 'Cover filename, then Cantata will use a " +"default of cover" 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 "" -"NOTE: 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." -"

    \n" -"NOTE: If you choose 'Local loopback' for 'Network interface', then " -"MPD must also be on this computer.
    " +"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 must " +"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
    NOTE: These settings apply to Digitally Imported, JazzRadio.com, " -"RockRadio.com, and Sky.fm
    " +"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 "" -"NOTE: 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" +"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 "" -"NOTE: 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:" +#. 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 "(Various)" +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 "" -"NOTE Multiple genres should be separated via a semicolon (e.g. " -"'Rock;Hard Rock')" +"Ratings are stored in an external database, and not 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 @@ #: 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 @@ #: replaygain/rgdialog.cpp:261 msgid "" -"Scan all tracks?

    NOTE: All tracks have existing ReplyGain " -"tags." +"Scan all tracks?

    All tracks have existing ReplayGain tags." +"" msgstr "" #: replaygain/rgdialog.cpp:263 @@ -5588,17 +5696,17 @@ 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 @@ 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 @@ 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 "" -"NOTE: 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." +"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 @@ 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 "ERROR: Invalid protocol" msgstr "" @@ -5807,39 +5915,39 @@ msgstr "" #: streams/streamproviderlistdialog.cpp:257 -msgid "Failed to install %1" +msgid "Failed to install '%1'" msgstr "" #: streams/streamproviderlistdialog.cpp:266 -msgid "Failed to download %1" +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 @@ 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 %1!" +#: streams/streamspage.cpp:249 +msgid "Failed to create '%1'!" msgstr "" -#: streams/streamspage.cpp:254 streams/streamspage.cpp:435 -msgid "Stream already exists!
    %1" +#: 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 %1 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 %1 streams?" +#: streams/streamspage.cpp:356 +msgid "Reload '%1' streams?" msgstr "" -#: streams/streamspage.cpp:362 -msgid "Are you sure you wish to remove bookmark to %1?" +#: 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 %1 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 %1?" +#: 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 %1 already exists!
    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 @@ 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 @@ 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 all tracks?" msgstr "" -#: tags/tageditor.cpp:499 +#: tags/tageditor.cpp:528 +msgid "" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" +msgstr "" + +#: tags/tageditor.cpp:567 msgid "Revert \"Various Artists\" workaround on all tracks?" msgstr "" -#: tags/tageditor.cpp:549 +#: tags/tageditor.cpp:568 +msgid "Revert \"Various Artists\" workaround" +msgstr "" + +#: tags/tageditor.cpp:570 +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.

    If 'Title' " +"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " +"will be set to \"Wobble\"
    " +msgstr "" + +#: tags/tageditor.cpp:617 msgid "" "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for all " "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 all tracks?" +"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of " +"all tracks?" msgstr "" -"Capitalise the first letter of 'Title', 'Artist', 'Album artist', and " -"'Album' of all tracks?" +"Capitalise the first letter of text fields (e.g. 'Title', 'Artist', etc) of " +"all 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!
    %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!
    %1" +#: tags/trackorganiser.cpp:321 +msgid "Failed to create destination folder!" msgstr "" -#: tags/trackorganiser.cpp:319 -msgid "Failed to create destination folder!
    %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 "

    " msgstr "" -#: widgets/coverwidget.cpp:89 +#: widgets/coverwidget.cpp:78 +msgid "" +msgstr "" + +#: widgets/coverwidget.cpp:80 msgid "" "" 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 "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 @@ 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 @@ 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 @@ #. 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 @@ 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 @@ 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 @@ "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 @@ #: 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 "ERROR: 'From Year' should be less than 'To Year'" msgstr "ERROR: 'Desde el año' debe ser menor que 'Al año'" -#: dynamic/dynamicruledialog.cpp:221 +#: dynamic/dynamicruledialog.cpp:220 msgid "" "ERROR: Date range is too large (can only be a maximum of %1 " "years)" @@ -1820,77 +1825,68 @@ 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 "" "

    Cantata will query your library using all of the rules listed. The list " "of Include rules will be used to build a set of songs that can be " "used. The list of Exclude rules will be used to build a set of songs " "that cannot be used. If there are no Include rules, Cantata will " -"assume that all songs (bar those from Exclude) can be used.
    e.g. " -"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', " -"you would need the following:

    • Include AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various Artists
    To have Cantata look " -"for 'Songs by Wibble but not from album Abc', you would need the following: " -"
    • Include AlbumArtist=Wibble
    • Exclude Album=Abc
    After " -"the set of usable songs has been created, Cantata will randomly select songs " -"to keep the play queue filled with 10 entries.

    " -msgstr "" -"

    Cantata analizará la biblioteca utilizando todas las normas enumeradas. " -"La lista de normas Incluir sirve para generar un conjunto de " -"canciones que utilizar. La lista de normas Excluir sirve para generar " -"un conjunto de canciones que no se utilizarán. Si no hay normas bajo " -"Incluir, Cantata supone que todas las canciones (a excepción de las " -"normas Excluir) se pueden utilizar.
    Por ejemplo, para que " -"Cantata busque \"Canciones de rock por Wibble O canciones de Varios Artistas" -"\", necesita lo siguiente:

    • Include AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various Artists
    Para que Cantata busque " -"\"Canciones por Wibble pero no del álbum Abc\", necesita lo siguiente: " -"
    " msgstr "" -"" +"" -#: gui/mainwindow.cpp:1532 +#: gui/mainwindow.cpp:1619 msgid "" "" msgstr "" -"" -#: 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 "" -"%1 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 "" -"%1 se utiliza para descargar los flujos favoritos, seleccione otro " -"nombre." -#: gui/mainwindow.cpp:2013 -msgid "A playlist named %1 already exists!
    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 %1.
    ¿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 "" "Connected to %1
    The entries below apply to the currently connected " "MPD collection.
    " @@ -2767,9 +2735,9 @@ "Conectando a %1.
    Las entradas a continuación afectan a la colección de " "MPD conectada actualmente." -#. 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 "" "Not Connected!
    The entries below cannot be modified, as Cantata is " "not connected to MPD.
    " @@ -2777,31 +2745,21 @@ "No conectado.
    Las entradas a continuación no se pueden modificar, ya " "que Cantata no está conectado a MPD." -#: gui/playbacksettings.cpp:169 +#: gui/playbacksettings.cpp:174 msgid "" -"

    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.

    The following ReplayGain settings may be used:" +"players.

    The following ReplayGain settings may be used:" "

    • None - No ReplayGain is applied.
    • Track - " "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's ReplayGain tags.
    • Auto - Volume will be adjusted using the track's ReplayGain " "tags if random play is activated, otherwise the album's tags will be used.

    " +"li>" msgstr "" -"

    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.

    Se pueden utilizar los siguientes ajustes de ReplayGain:" -"

    • Ninguno No se aplica ReplayGain.
    • Pista El volumen " -"se ajusta con las etiquetas ReplayGain de la pista
    • Álbum El " -"volumen se ajusta con las etiquetas ReplayGain del álbum.
    • Automático 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.

    " -#: 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 "Renombrar" @@ -2809,37 +2767,37 @@ 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 %1 already exists!
    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 %1
    . " -"¿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 @@ 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 @@ #. 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 "" " This folder will also be used to locate music files for transferring to " "(and from) devices." @@ -3078,336 +3044,313 @@ " Este directorio se utilizará para ubicar los ficheros de audio para la " "transferencia desde y al dispositivo." -#. 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?
    • Standard - " -"music collection may be shared, is on another machine, or is already setup
    • 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?
    • Estándar: la " -"colección de música puede ser compartida, en otro sistema, o ya está " -"configurada.
    • Básica: la colección de música no es compartida, y " -"Cantata configurará y controlará la instancia de MPD.
    " +"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 "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 %1?" -msgstr "¿Eliminar %1?" +#: 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/shortcutssettingspage.cpp:82 -msgid "Do not use media keys to control Cantata" -msgstr "No utilizar teclas multimedia para controlar Cantata" +#: gui/stdactions.cpp:43 +msgid "Previous Track" +msgstr "Pista anterior" -#: 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:44 +msgid "Next Track" +msgstr "Pista siguiente" -#: 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:45 +msgid "Play/Pause" +msgstr "Reproducir/Pausa" #: gui/stdactions.cpp:47 -msgid "Previous Track" -msgstr "Pista anterior" - -#: gui/stdactions.cpp:48 -msgid "Next Track" -msgstr "Pista siguiente" - -#: 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 +#: gui/stdactions.cpp:49 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 @@ msgid "Disc" msgstr "Disco" +#: models/playqueuemodel.cpp:178 +msgid "Rating" +msgstr "" + #: models/playqueuemodel.cpp:241 msgid "Undo" msgstr "Deshacer" @@ -3437,86 +3384,82 @@ msgid "Album Artist" msgstr "Artista del álbum" -#: models/playqueuemodel.cpp:583 -msgid "(Priority: %1)" -msgstr "(Prioridad: %1)" - -#: 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 @@ "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 %1 to %2" msgstr "Fallo al renombrar %1 to %2" -#: mpd/mpdconnection.cpp:1410 +#: mpd/mpdconnection.cpp:1534 msgid "Failed to save %1" msgstr "Fallo al crear %1" -#: 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 @@ 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 @@ "%2\n" "%3" -#: mpd/song.cpp:601 +#: mpd/song.cpp:683 msgctxt "Song on Album" msgid "%1 on %2" msgstr "%1 en %2" -#: mpd/song.cpp:602 +#: mpd/song.cpp:684 msgctxt "Song by Artist on Album" msgid "%1 by %2 on %3" msgstr "%1 por %2 en %3" @@ -3612,19 +3551,19 @@ 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 @@ #. 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 @@ 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 %1?" -msgstr "¿Desea desuscribirse de %1?" +#: 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 %1?" -msgstr "¿Desea actualizar el listado de episodios de %1?" - -#: 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 @@ "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 @@ 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 @@ #. 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 @@ #. 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 @@ #: 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 @@ #. 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 @@ 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 "" -"NOTE: 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)." -msgstr "" -"NOTA: 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»)." +"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 @@ 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 "" -"NOTE: Connected to a Mopidy server (manual update required)." +#. 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 "" -"NOTA: Conectado a un servidor Mopidy (requiere actualización " -"manual)." #. i18n: file: devices/albumdetails.ui:26 #. i18n: ectx: property (title), widget (QGroupBox, groupBox) @@ -4214,13 +4160,13 @@ #. 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 @@ 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 "" -"NOTE: These settings are only valid, and editable, when the device " -"is connected." +"These settings are only valid, and editable, when the device is connected." msgstr "" -"NOTA: Estos ajustes solo son válidos y editables cuando el " -"dispositivo está conectado." -#. 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 @@ 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 "" -"NOTE: These settings are only editable when the device is not " -"connected." +msgid "These settings are only editable when the device is not connected." msgstr "" -"NOTA: Estos ajustes solo son editables cuando el dispositivo está " -"conectado." -#. 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 "" -"NOTE: If you enter a password here, it will be stored " -"unencrypted in Cantata's config file. To have Cantata prompt for the " -"password before accessing the share, set the password to '-'" -msgstr "" -"NOTA: Si introduce una contraseña aquí, se almacenará sin " -"cifrar 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 «-»." +"If you enter a password here, it will be stored unencrypted 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 "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 "" -"NOTE: Due to the way sshfs works, a suitable ssh-askpass " -"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter " -"the password." -msgstr "" -"NOTA: Debido al funcionamiento de sshfs, se requiere una " -"aplicación ssh-askpass adecuada (ksshaskpass, ssh-askpass-gnome, etc.) para " -"introducir la contraseña." +"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 "" -"NOTE: 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 "" -"NOTA: 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." +"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) @@ -4767,39 +4693,51 @@ 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 @@ #. 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 "" -"NOTE Only enter values for the tags you wish to be search on. " +#. 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 "" -"NOTA Introduzca valores sólo para las etiquetas en las que desea " -"buscar. " -#. 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 "" -"NOTE For genre, end string with an asterisk to match various " -"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +"For genre, end string with an asterisk to match various genres. e.g 'rock*' " +"matches 'Hard Rock' and 'Rock and Roll'." msgstr "" -"NOTA 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'. " #. 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 @@ #. 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 "" +"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 "" -"NOTE: 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 "" -"NOTA: 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." - -#. i18n: file: gui/filesettings.ui:104 -#. i18n: ectx: property (text), widget (QLabel, persNote_2) -#: po/rc.cpp:437 rc.cpp:437 -msgid "" -"NOTE: 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 "" -"NOTA: 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\")" +"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 "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 "" "

    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.

    For more information on MPD itself, please refer to the " -"MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings required for " -"Cantata to function correctly.

    " +"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side " +"application for playing music.

    For more information on MPD itself, " +"please refer to the MPD website http://www.musicpd." +"org

    This 'wizard' will guide you through the basic settings " +"required for Cantata to function correctly.

    " msgstr "" -"

    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.

    Para más información sobre MPD, consulte " -"el sitio web de MPD http://www.musicpd.org

    Este asistente le guiará por los pasos necesarios para el " -"funcionamiento adecuado de Cantata.

    " #. 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 "

    Welcome to Cantata

    " msgstr "

    Bienvenido a Cantata

    " #. 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 "" "

    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:

    " -msgstr "" -"

    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:

    " +"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:

    " +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 "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 "" "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 @@ #. 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 "" "Select this option if your music collection is not shared with others, " "and you wish Cantata to configure and control the MPD instance." @@ -5011,7 +4928,7 @@ #. 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 "" "

    For more information on MPD itself, please refer to " "the MPD website NOTE: 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." -msgstr "" -"NOTA: 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." - -#. 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: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 "" -"NOTE: When using a local socket the full absolute path to the " -"socket needs to be set. (Port number is not required.)" +"When using a local socket the full absolute path to the socket needs to be " +"set. (Port number is not required.)" msgstr "" -"NOTA: Al utilizar un «socket» local, se debe especificar la ruta " -"absoluta al mismo. (El número de puerto no es necesario.)" -#. 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 "" "

    Cantata will download missing covers, and lyrics, from the internet.

    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.

    " msgstr "" -"

    Cantata descargará las carátulas faltantes y las letras desde " -"Internet.

    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.

    " - -#. i18n: file: gui/initialsettingswizard.ui:772 -#. i18n: ectx: property (text), widget (QLabel, persNote) -#: po/rc.cpp:521 rc.cpp:521 -msgid "" -"NOTE: 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." -msgstr "" -"NOTA: 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." - -#. i18n: file: gui/initialsettingswizard.ui:801 -#. i18n: ectx: property (text), widget (QLabel, persNote_2) -#: po/rc.cpp:524 rc.cpp:524 +"

    Cantata descargará las carátulas faltantes y las letras desde Internet.

    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.

    " + +#. i18n: file: gui/initialsettingswizard.ui:722 +#. i18n: ectx: property (text), widget (NoteLabel, persNote_2) +#: po/rc.cpp:530 rc.cpp:530 msgid "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'." -"" +"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 "" -"NOTA: 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\")" - -#. i18n: file: gui/initialsettingswizard.ui:830 -#. i18n: ectx: property (text), widget (StateLabel, httpNote) -#: po/rc.cpp:527 rc.cpp:527 -msgid "" -"NOTE: 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 "" -"NOTA: 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." -#. 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!

    Cantata's configuration dialog maybe " "used to customise Cantata's appearance, as well as to add extra MPD hosts, " @@ -5178,9 +5060,20 @@ "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 must 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 "" "Warning: 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 @@ #. 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 "" -"NOTE: 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." -msgstr "" -"NOTA: 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." - -#. i18n: file: gui/interfacesettings.ui:109 -#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel) -#: po/rc.cpp:551 rc.cpp:551 -msgid "" -"NOTE: 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." -msgstr "" -"NOTA: 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." +"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 "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 "" -"NOTE: 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." -msgstr "" -"NOTA: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." +#. 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) +#. 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 "Estilo de vista de búsqueda:" +#. 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 "" "

    When adding artists, or albums to the playqueue, or editing tags, etc, " "then only use songs that pass the current Genre or string filter.

    e.g. " @@ -5475,39 +5395,33 @@ "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 "" "

    This will change Cantata's interface as detailed:\n" @@ -5515,171 +5429,161 @@ "be 'flickable'

  • To drag items, you will need to 'touch' the top-left " "corner
  • Scrollbars will only be a few pixels wide
  • Actions (e." "g. 'Add To Play Queue') will always be visible (not just when item is under " -"mouse)
  • Spin buttons with have + and - buttons at the side of the " +"mouse)
  • Spin buttons will have + and - buttons at the side of the " "text field
  • " msgstr "" -"

    Esto modifica la interfaz de Cantata de la forma siguiente:\n" -"

    • Los botones de reproducción y control son un 33% más " -"grandes.
    • Las vistas serán \"hojeables\".
    • Para arrastrar " -"elementos, se deberá \"tocar\" la esquina superior izquierda.
    • Las " -"barras de desplazamiento tendrán un ancho de solo unos píxeles.
    • 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).
    • Los " -"botones giratorios tendrán botones + y - a los lados del campo de " -"texto.

    " -#. 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 "" -"NOTE: Changing the 'Enforce single-click activation of items' " -"setting will require a re-start of Cantata." +"Changing the 'Enforce single-click activation of items' setting will require " +"a re-start of Cantata." msgstr "" -"NOTA: Cantata requiere reiniciar si se modifica la opción «Forzar " -"la activación de elementos con un solo clic»." -#. 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 "" -"NOTE: Changing the language setting will require a re-start of " -"Cantata." +"Changing the 'touch friendly' setting will require a re-start of Cantata." msgstr "" -"NOTA: Modificar el ajuste de idioma requiere reiniciar " -"Cantata." -#. 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 "" -"NOTE: Changing the 'touch friendly' setting will require a re-" -"start of Cantata." +"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 "" -"NOTA: Modificar el ajuste \"táctil\" requiere reiniciar Cantata." -#. 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 "" -"NOTE: 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." -msgstr "" -"NOTA: 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." +"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 "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 "" "

    Filename (without extension) to save downloaded covers as.
    If left " @@ -5694,157 +5598,140 @@ #. 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 -msgid "" -"NOTE: The 'Music folder' setting is used to lookup cover-art " -"(either the value specified above, or cover.jpg / cover.png 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 "" -"NOTA: Las opciones de «Directorio de música» se utilizan para " -"obtener las carátulas (con el valor definido anteriormente, o, si no se " -"define, cover.jpg / cover.png). Si también tiene permisos de " -"escritura en el directorio (y subdirectorios), Cantata guardará cualquier " -"portada descargada en la carpeta respectiva de cada álbum." - -#. i18n: file: gui/serversettings.ui:264 -#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel) -#: po/rc.cpp:841 rc.cpp:841 -msgid "" -"NOTE: '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 "" -"NOTE: '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." - -#. i18n: file: gui/serversettings.ui:343 -#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel) -#: po/rc.cpp:850 rc.cpp:850 -msgid "" -"NOTE: 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 "" -"NOTA: 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»." - -#. 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: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 cover.jpg / cover.png 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 "" -"NOTE: If no setting is specified for 'Cover filename, then Cantata " -"will use a default of cover " +"'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 cover" msgstr "" -"NOTE: Si no se define ninguna opción para «Nombre de fichero de " -"carátula», Cantata utilizará un valor predefinido cover " #. 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 +#. i18n: file: http/httpserversettings.ui:40 +#. i18n: ectx: property (text), widget (NoteLabel, label_4) +#: po/rc.cpp:873 rc.cpp:873 msgid "" -"NOTE: 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." -"

    \n" -"NOTE: If you choose 'Local loopback' for 'Network interface', then " -"MPD must also be on this computer.
    " -msgstr "" -"NOTA: 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.

    \n" -"NOTA: Si selecciona «Loopback local» para «Interfaz de red», MPD " -"debe estar presente en este sistema
    " +"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 must " +"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
    NOTE: These settings apply to Digitally Imported, JazzRadio.com, " -"RockRadio.com, and Sky.fm
    " -msgstr "" -"NOTA: Estos ajustes se aplican a Importado digitalmente, " -"JazzRadio.com, RockRadio.com, y Sky.fm" - -#. i18n: file: streams/digitallyimportedsettings.ui:174 -#. i18n: ectx: property (text), widget (QLabel, note2Label) -#: po/rc.cpp:941 rc.cpp:941 -msgid "" -"NOTE: 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 "" -"NOTA: 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." +#. 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: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 @@ #. 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 "" -"NOTE: Built-in categories are shown in italic, and these cannot be " -"removed." +#. 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 "" -"NOTA: Las categorías integradas se muestran en itálica, y no se " -"pueden eliminar." - -#. 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 "(Various)" +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 "" -"NOTE Multiple genres should be separated via a semicolon (e.g. " -"'Rock;Hard Rock')" +"Ratings are stored in an external database, and not in the song's " +"file." msgstr "" -"NOTA Varios géneros se deben separa mediante un punto y coma " -"(p.ej. 'Rock;Hard Rock')" #. 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@gmail.com" @@ -6046,7 +5940,7 @@ #: 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 @@ #: replaygain/rgdialog.cpp:261 msgid "" -"Scan all tracks?

    NOTE: All tracks have existing ReplyGain " -"tags." +"Scan all tracks?

    All tracks have existing ReplayGain tags." +"" msgstr "" -"¿Desea analizar todaslas pistas?

    NOTA: Todas las pistas ya " -"tienen etiquetas ReplyGain." #: replaygain/rgdialog.cpp:263 msgid "Do you wish to scan all tracks, or only tracks without existing tags?" @@ -6082,17 +5974,17 @@ 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 @@ 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 @@ 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 "" -"NOTE: 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 "" -"NOTA: 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." +"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 "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 @@ 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 "ERROR: Invalid protocol" msgstr "ERROR:Protocolo no válido" @@ -6305,39 +6193,39 @@ msgstr "Instalando/actualizando %1" #: streams/streamproviderlistdialog.cpp:257 -msgid "Failed to install %1" -msgstr "Fallo al instalar %1" +msgid "Failed to install '%1'" +msgstr "" #: streams/streamproviderlistdialog.cpp:266 -msgid "Failed to download %1" -msgstr "Fallo al descargar %1" +msgid "Failed to download '%1'" +msgstr "" + +#: streams/streamproviderlistdialog.cpp:356 +msgid "Install/update the selected stream providers?" +msgstr "" + +#: streams/streamproviderlistdialog.cpp:358 +msgid "Install the selected stream providers?" +msgstr "" -#: streams/streamproviderlistdialog.cpp:327 -msgid "ListenLive" -msgstr "ListenLive" - -#: streams/streamproviderlistdialog.cpp:364 -msgid "Install the following?" -msgstr "¿Desea instalar los siguientes?" - -#: 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 @@ 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 %1!" -msgstr "Fallo al crear %1." +#: streams/streamspage.cpp:249 +msgid "Failed to create '%1'!" +msgstr "" -#: streams/streamspage.cpp:254 streams/streamspage.cpp:435 -msgid "Stream already exists!
    %1" -msgstr "El flujo ya existe.
    %1" - -#: streams/streamspage.cpp:256 streams/streamspage.cpp:437 -msgid "A stream named %1 already exists!" -msgstr "Ya existe un flujo llamado %1." +#: streams/streamspage.cpp:266 streams/streamspage.cpp:447 +msgid "Stream '%1' already exists!" +msgstr "" + +#: 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 %1 streams?" -msgstr "¿Actualizar %1 flujos?" - -#: streams/streamspage.cpp:362 -msgid "Are you sure you wish to remove bookmark to %1?" -msgstr "¿Seguro que desea eliminar el favorito a %1?" - -#: streams/streamspage.cpp:368 -msgid "Are you sure you wish to remove all %1 bookmarks?" -msgstr "¿Seguro que desea eliminar todos los favoritos %1?" +#: streams/streamspage.cpp:356 +msgid "Reload '%1' streams?" +msgstr "" + +#: streams/streamspage.cpp:374 +msgid "Are you sure you wish to remove bookmark to '%1'?" +msgstr "" -#: streams/streamspage.cpp:392 +#: streams/streamspage.cpp:380 +msgid "Are you sure you wish to remove all '%1' bookmarks?" +msgstr "" + +#: 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 %1?" -msgstr "¿Desea eliminar %1?" +#: 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 %1 already exists!
    Overwrite?" -msgstr "Se ha detectado una categoría llamada %1
    . ¿Sobrescribir?" - -#: streams/streamssettings.cpp:176 -msgid "Failed top open package file" -msgstr "Fallo al abrir el fichero de paquete" +#: streams/streamssettings.cpp:151 +msgid "" +"A category named '%1' already exists!\n" +"\n" +"Overwrite?" +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 "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 @@ 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 @@ 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 all tracks?" msgstr "" "¿Desea aplicar el arreglo para «Varios Artistas» a todas las pistas?" -#: tags/tageditor.cpp:499 +#: tags/tageditor.cpp:528 +msgid "" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" +msgstr "" +"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»" + +#: tags/tageditor.cpp:567 msgid "Revert \"Various Artists\" workaround on all tracks?" msgstr "" "¿Desea deshacer el arreglo para «Varios Artistas» a todas 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 "" +"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.

    If 'Title' " +"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " +"will be set to \"Wobble\"
    " +msgstr "" +"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:" +"

    si «Título» es «Wibble - Wobble», entonces «Artista» se define " +"como «Wibble», y «Título» se define como «Wobble»
    " + +#: tags/tageditor.cpp:617 msgid "" "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for all " "tracks?" @@ -6626,83 +6573,162 @@ "¿Quiere definir «Artista del álbum» como «Artista» (si «Artista del álbum» " "está vacío) para todas 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 all tracks?" +"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of " +"all tracks?" msgstr "" -"¿Desea poner en mayúscula la primera letra de «Título», «Artista», «Artista " -"del álbum», y «Álbum» para todas 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!
    %1" -msgstr "El fichero fuente no existe.
    %1" - -#: tags/trackorganiser.cpp:297 -msgid "Destination file already exists!
    %1" -msgstr "El fichero de destino ya existe.
    %1" - -#: tags/trackorganiser.cpp:319 -msgid "Failed to create destination folder!
    %1" -msgstr "Fallo al crear el directorio de destino.
    %1" - -#: tags/trackorganiser.cpp:340 -msgid "Failed to rename %1 to %2" -msgstr "Fallo al renombrar %1 a %2" +#: tags/trackorganiser.cpp:280 +msgid "Source file does not exist!" +msgstr "" + +#: tags/trackorganiser.cpp:299 +msgid "Destination file already exists!" +msgstr "" + +#: tags/trackorganiser.cpp:321 +msgid "Failed to create destination folder!" +msgstr "" + +#: 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 "(Flujo)" -#: widgets/coverwidget.cpp:87 +#: widgets/coverwidget.cpp:75 msgid "

    " msgstr "" -#: widgets/coverwidget.cpp:89 +#: widgets/coverwidget.cpp:78 +msgid "" +msgstr "" + +#: widgets/coverwidget.cpp:80 msgid "" "" msgstr "" -"" +"" #: widgets/genrecombo.cpp:41 msgid "Filter On Genre" @@ -6712,7 +6738,7 @@ 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 @@ msgid "Menu" msgstr "Menú" -#: widgets/playqueueview.cpp:300 +#: widgets/notelabel.cpp:67 +msgid "NOTE: %1" +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 @@ #: widgets/songdialog.cpp:49 msgid "" -"

    Cannot access song files!

    Please check Cantata's \"Music folder" -"\" setting, and MPD's \"music_directory\" setting.

    " +"Cannot access song files!\n" +"\n" +"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory" +"\" setting." msgstr "" -"

    No se puede acceder a los ficheros de canciones.

    Comrpuebe el " -"ajuste \"Directorio de música\" de Cantata, y el ajuste \"music_directory\" de " -"MPD.

    " #: widgets/songdialog.cpp:52 msgid "" -"

    Cannot access song files!

    Please check that the device is still " -"attached.

    " +"Cannot access song files!\n" +"\n" +"Please check that the device is still attached." msgstr "" -"

    No se puede acceder a los ficheros de canciones.

    Compruebe que " -"el dispositivo sigue conectado.

    " -#: 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 @@ 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 "" +#~ "

    You have not configured the destination device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    El dispositivo de destino no está configurado.
    ¿Desea continuar " +#~ "con las opciones predefinidas?

    " + +#~ msgid "" +#~ "

    You have not configured the source device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    El dispositivo de origen no está configurado.
    ¿Desea continuar con " +#~ "las opciones predefinidas?

    " + +#~ 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 "" +#~ "

    Which type of refresh do you wish to perform?

    • Partial - Only " +#~ "new songs are scanned (quick)
    • Full - All songs are " +#~ "rescanned (slow)

    " +#~ msgstr "" +#~ "

    ¿Qué tipo de actualización desea realizar?

    • Parcial - Solo se " +#~ "analizan canciones nuevas (rápido)
    • Completa - Se analizan " +#~ "todas las canciones (lento)

    " + +#~ 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 %1?" +#~ msgstr "¿Desea olvidar %1?" + +#~ msgid "Are you sure you wish to eject Audio CD %1 - %2?" +#~ msgstr "¿Desea expulsar el CD de audio %1 - %2?" + +#~ msgid "Are you sure you wish to disconnect %1?" +#~ msgstr "¿Está seguro de que quiere desconectar %1?" + +#~ msgid "" +#~ "

    The following variables will be replaced with their corresponding " +#~ "meaning for each track name.

    " +#~ msgstr "" +#~ "

    Las siguientes variables se sustituirán por su significado " +#~ "correspondiente para cada nombre de pista.

    " + +#~ 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 "" +#~ "

    Cantata will query your library using all of the rules listed. The " +#~ "list of Include rules will be used to build a set of songs that " +#~ "can be used. The list of Exclude rules will be used to build a set " +#~ "of songs that cannot be used. If there are no Include rules, " +#~ "Cantata will assume that all songs (bar those from Exclude) can be " +#~ "used.
    e.g. to have Cantata look for 'Rock songs by Wibble OR songs " +#~ "by Various Artists', you would need the following:

    • Include " +#~ "AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various " +#~ "Artists
    To have Cantata look for 'Songs by Wibble but not from " +#~ "album Abc', you would need the following:
    • Include " +#~ "AlbumArtist=Wibble
    • Exclude Album=Abc
    After the set of " +#~ "usable songs has been created, Cantata will randomly select songs to keep " +#~ "the play queue filled with 10 entries.

    " +#~ msgstr "" +#~ "

    Cantata analizará la biblioteca utilizando todas las normas " +#~ "enumeradas. La lista de normas Incluir sirve para generar un " +#~ "conjunto de canciones que utilizar. La lista de normas Excluir " +#~ "sirve para generar un conjunto de canciones que no se utilizarán. Si no " +#~ "hay normas bajo Incluir, Cantata supone que todas las canciones (a " +#~ "excepción de las normas Excluir) se pueden utilizar.
    Por " +#~ "ejemplo, para que Cantata busque \"Canciones de rock por Wibble O " +#~ "canciones de Varios Artistas\", necesita lo siguiente:

    • Include " +#~ "AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various " +#~ "Artists
    Para que Cantata busque \"Canciones por Wibble pero no " +#~ "del álbum Abc\", necesita lo siguiente:
    • Include " +#~ "AlbumArtist=Wibble
    • Exclude Album=Abc
    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." + +#~ msgid "" +#~ "A set of rules named '%1' already exists!\n" +#~ "Overwrite?" +#~ msgstr "" +#~ "Ya existe un conjunto de normas llamado «%1».\n" +#~ "¿Desea sobrescribir?" + +#~ msgid "

    Delete all from the following?

      %1

    " +#~ msgstr "" +#~ "

    ¿Desea eliminar todos los elementos a continuación?

      %1

    " + +#~ 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 "" +#~ "%1 is used to store favorite streams, please choose another name." +#~ msgstr "" +#~ "%1 se utiliza para descargar los flujos favoritos, seleccione otro " +#~ "nombre." + +#~ msgid "A playlist named %1 already exists!
    Add to that playlist?" +#~ msgstr "" +#~ "Se ha detectado una lista de reproducción llamada %1.
    ¿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 "" +#~ "

    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.

    The following ReplayGain settings may be used:" +#~ "

    • None - No ReplayGain is applied.
    • Track - " +#~ "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's " +#~ "ReplayGain tags.
    • Auto - Volume will be adjusted using the " +#~ "track's ReplayGain tags if random play is activated, otherwise the " +#~ "album's tags will be used.

    " +#~ msgstr "" +#~ "

    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.

    Se pueden utilizar los siguientes " +#~ "ajustes de ReplayGain:

    • Ninguno No se aplica ReplayGain.
    • Pista El volumen se ajusta con las etiquetas ReplayGain de la " +#~ "pista
    • Álbum El volumen se ajusta con las etiquetas " +#~ "ReplayGain del álbum.
    • Automático 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.

    " + +#~ 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 %1 already exists!
    Overwrite?" +#~ msgstr "" +#~ "Se ha detectado una lista de reproducción llamada %1
    . " +#~ "¿Sobrescribir?" + +#~ msgid "" +#~ "Which type of collection do you wish to connect to?
    • Standard " +#~ "- music collection may be shared, is on another machine, or is already " +#~ "setup
    • 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?
    • Estándar: la " +#~ "colección de música puede ser compartida, en otro sistema, o ya está " +#~ "configurada.
    • Básica: la colección de música no es compartida, y " +#~ "Cantata configurará y controlará la instancia de MPD.
    " + +#~ msgid "Delete %1?" +#~ msgstr "¿Eliminar %1?" + +#~ 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 "(Priority: %1)" +#~ msgstr "(Prioridad: %1)" + +#~ msgid "Unsubscribe from %1?" +#~ msgstr "¿Desea desuscribirse de %1?" + +#~ msgid "Refresh episode listing from %1?" +#~ msgstr "¿Desea actualizar el listado de episodios de %1?" + +#~ 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 "" +#~ "NOTE: 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)." +#~ msgstr "" +#~ "NOTA: 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»)." + +#~ msgid "" +#~ "NOTE: Connected to a Mopidy server (manual update required)." +#~ msgstr "" +#~ "NOTA: Conectado a un servidor Mopidy (requiere actualización " +#~ "manual)." + +#~ msgid "" +#~ "NOTE: These settings are only valid, and editable, when the " +#~ "device is connected." +#~ msgstr "" +#~ "NOTA: Estos ajustes solo son válidos y editables cuando el " +#~ "dispositivo está conectado." + +#~ msgid "Ignore 'The' in artist names" +#~ msgstr "Ignorar 'The' en nombres de artista" + +#~ msgid "" +#~ "NOTE: These settings are only editable when the device is not " +#~ "connected." +#~ msgstr "" +#~ "NOTA: Estos ajustes solo son editables cuando el dispositivo " +#~ "está conectado." + +#~ msgid "" +#~ "NOTE: If you enter a password here, it will be stored " +#~ "unencrypted in Cantata's config file. To have Cantata prompt for " +#~ "the password before accessing the share, set the password to '-'" +#~ msgstr "" +#~ "NOTA: Si introduce una contraseña aquí, se almacenará sin " +#~ "cifrar 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 «-»." + +#~ msgid "" +#~ "NOTE: Due to the way sshfs works, a suitable ssh-askpass " +#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to " +#~ "enter the password." +#~ msgstr "" +#~ "NOTA: Debido al funcionamiento de sshfs, se requiere una " +#~ "aplicación ssh-askpass adecuada (ksshaskpass, ssh-askpass-gnome, etc.) " +#~ "para introducir la contraseña." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "NOTA: 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." + +#~ msgid "" +#~ "NOTE Only enter values for the tags you wish to be search on. " +#~ msgstr "" +#~ "NOTA Introduzca valores sólo para las etiquetas en las que " +#~ "desea buscar. " + +#~ msgid "" +#~ "NOTE For genre, end string with an asterisk to match various " +#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +#~ msgstr "" +#~ "NOTA 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'. " + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "NOTA: 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." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "NOTA: 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\")" + +#~ msgid "" +#~ "

    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.

    For more information on MPD itself, please " +#~ "refer to the MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings " +#~ "required for Cantata to function correctly.

    " +#~ msgstr "" +#~ "

    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.

    Para más información sobre MPD, " +#~ "consulte el sitio web de MPD http://www.musicpd." +#~ "org

    Este asistente le guiará por los pasos necesarios " +#~ "para el funcionamiento adecuado de Cantata.

    " + +#~ msgid "" +#~ "

    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:

    " +#~ msgstr "" +#~ "

    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:

    " + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "NOTA: 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." + +#~ msgid "" +#~ "NOTE: When using a local socket the full absolute path to the " +#~ "socket needs to be set. (Port number is not required.)" +#~ msgstr "" +#~ "NOTA: Al utilizar un «socket» local, se debe especificar la " +#~ "ruta absoluta al mismo. (El número de puerto no es necesario.)" + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "NOTA: 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." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "NOTA: 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\")" + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "NOTA: 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." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "NOTA: 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." + +#~ msgid "" +#~ "NOTE: 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." +#~ "" +#~ msgstr "" +#~ "NOTA: 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." + +#~ msgid "Covers:" +#~ msgstr "Carátulas:" + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "NOTA: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." + +#~ 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 "" +#~ "

    This will change Cantata's interface as detailed:\n" +#~ "

    • Playback, and control, buttons will be 33% wider
    • Views " +#~ "will be 'flickable'
    • To drag items, you will need to 'touch' the " +#~ "top-left corner
    • Scrollbars will only be a few pixels wide
    • Actions (e.g. 'Add To Play Queue') will always be visible (not " +#~ "just when item is under mouse)
    • Spin buttons with have + and - " +#~ "buttons at the side of the text field

    " +#~ msgstr "" +#~ "

    Esto modifica la interfaz de Cantata de la forma siguiente:\n" +#~ "

    • Los botones de reproducción y control son un 33% más grandes.
    • Las vistas serán \"hojeables\".
    • Para arrastrar elementos, " +#~ "se deberá \"tocar\" la esquina superior izquierda.
    • Las barras de " +#~ "desplazamiento tendrán un ancho de solo unos píxeles.
    • 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).
    • Los botones giratorios tendrán botones + y - a los lados del campo de " +#~ "texto.

    " + +#~ 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 "" +#~ "NOTE: Changing the 'Enforce single-click activation of items' " +#~ "setting will require a re-start of Cantata." +#~ msgstr "" +#~ "NOTA: Cantata requiere reiniciar si se modifica la opción " +#~ "«Forzar la activación de elementos con un solo clic»." + +#~ msgid "" +#~ "NOTE: Changing the language setting will require a re-start of " +#~ "Cantata." +#~ msgstr "" +#~ "NOTA: Modificar el ajuste de idioma requiere reiniciar Cantata." +#~ "" + +#~ msgid "" +#~ "NOTE: Changing the 'touch friendly' setting will require a re-" +#~ "start of Cantata." +#~ msgstr "" +#~ "NOTA: Modificar el ajuste \"táctil\" requiere reiniciar Cantata." +#~ "" + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "NOTA: 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." + +#~ msgid "" +#~ "NOTE: The 'Music folder' setting is used to lookup cover-art " +#~ "(either the value specified above, or cover.jpg / cover.png " +#~ "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 "" +#~ "NOTA: Las opciones de «Directorio de música» se utilizan para " +#~ "obtener las carátulas (con el valor definido anteriormente, o, si no se " +#~ "define, cover.jpg / cover.png). Si también tiene permisos de " +#~ "escritura en el directorio (y subdirectorios), Cantata guardará cualquier " +#~ "portada descargada en la carpeta respectiva de cada álbum." + +#~ msgid "" +#~ "NOTE: '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 "" +#~ "NOTE: '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." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "NOTA: 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»." + +#~ msgid "" +#~ "NOTE: If no setting is specified for 'Cover filename, then " +#~ "Cantata will use a default of cover " +#~ msgstr "" +#~ "NOTE: Si no se define ninguna opción para «Nombre de fichero de " +#~ "carátula», Cantata utilizará un valor predefinido cover " + +#~ msgid "" +#~ "NOTE: 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.

    \n" +#~ "NOTE: If you choose 'Local loopback' for 'Network interface', then " +#~ "MPD must also be on this computer.
    " +#~ msgstr "" +#~ "NOTA: 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.

    \n" +#~ "NOTA: Si selecciona «Loopback local» para «Interfaz de red», MPD " +#~ "debe estar presente en este sistema
    " + +#~ msgid "" +#~ "NOTE: These settings apply to Digitally Imported, JazzRadio." +#~ "com, RockRadio.com, and Sky.fm" +#~ msgstr "" +#~ "NOTA: Estos ajustes se aplican a Importado digitalmente, " +#~ "JazzRadio.com, RockRadio.com, y Sky.fm" + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "NOTA: 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." + +#~ msgid "" +#~ "NOTE: Built-in categories are shown in italic, and these cannot " +#~ "be removed." +#~ msgstr "" +#~ "NOTA: Las categorías integradas se muestran en itálica, y no se " +#~ "pueden eliminar." + +#~ msgid "" +#~ "NOTE Multiple genres should be separated via a semicolon (e.g. " +#~ "'Rock;Hard Rock')" +#~ msgstr "" +#~ "NOTA Varios géneros se deben separa mediante un punto y coma (p." +#~ "ej. 'Rock;Hard Rock')" + +#~ msgid "" +#~ "Scan all tracks?

    NOTE: All tracks have existing " +#~ "ReplayGain tags." +#~ msgstr "" +#~ "¿Desea analizar todaslas pistas?

    NOTA: Todas las pistas " +#~ "ya tienen etiquetas ReplayGain." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "NOTA: 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." + +#~ msgid "Failed to install %1" +#~ msgstr "Fallo al instalar %1" + +#~ msgid "Failed to download %1" +#~ msgstr "Fallo al descargar %1" + +#~ 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 %1!" +#~ msgstr "Fallo al crear %1." + +#~ msgid "Stream already exists!
    %1" +#~ msgstr "El flujo ya existe.
    %1" + +#~ msgid "A stream named %1 already exists!" +#~ msgstr "Ya existe un flujo llamado %1." + +#~ msgid "Reload %1 streams?" +#~ msgstr "¿Actualizar %1 flujos?" + +#~ msgid "Are you sure you wish to remove bookmark to %1?" +#~ msgstr "¿Seguro que desea eliminar el favorito a %1?" + +#~ msgid "Are you sure you wish to remove all %1 bookmarks?" +#~ msgstr "¿Seguro que desea eliminar todos los favoritos %1?" + +#~ msgid "Are you sure you wish to remove %1?" +#~ msgstr "¿Desea eliminar %1?" + +#~ msgid "A category named %1 already exists!
    Overwrite?" +#~ msgstr "" +#~ "Se ha detectado una categoría llamada %1
    . ¿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 all tracks?" +#~ msgstr "" +#~ "¿Desea poner en mayúscula la primera letra de «Título», «Artista», " +#~ "«Artista del álbum», y «Álbum» para todas las pistas?" + +#~ msgid "Source file does not exist!
    %1" +#~ msgstr "El fichero fuente no existe.
    %1" + +#~ msgid "Destination file already exists!
    %1" +#~ msgstr "El fichero de destino ya existe.
    %1" + +#~ msgid "Failed to create destination folder!
    %1" +#~ msgstr "Fallo al crear el directorio de destino.
    %1" + +#~ msgid "Failed to rename %1 to %2" +#~ msgstr "Fallo al renombrar %1 a %2" + +#~ msgid "" +#~ "

    Cannot access song files!

    Please check Cantata's \"Music " +#~ "folder\" setting, and MPD's \"music_directory\" setting.

    " +#~ msgstr "" +#~ "

    No se puede acceder a los ficheros de canciones.

    Comrpuebe el " +#~ "ajuste \"Directorio de música\" de Cantata, y el ajuste \"music_directory" +#~ "\" de MPD.

    " + +#~ msgid "" +#~ "

    Cannot access song files!

    Please check that the device is " +#~ "still attached.

    " +#~ msgstr "" +#~ "

    No se puede acceder a los ficheros de canciones.

    Compruebe " +#~ "que el dispositivo sigue conectado.

    " + #~ msgid "TextLabel" #~ msgstr "TextLabel" @@ -7251,9 +8075,6 @@ #~ msgid " seconds" #~ msgstr " segundos" -#~ msgid "Devices:" -#~ msgstr "Dispositivos:" - #~ msgid "Current URL:" #~ msgstr "URL actual:" diff -Nru cantata-1.4.2.ds1/po/fr.po cantata-1.5.2.ds2/po/fr.po --- cantata-1.4.2.ds1/po/fr.po 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/po/fr.po 2015-03-23 20:09:39.000000000 +0000 @@ -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 , 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 \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 "INVALID" +msgstr "INVALIDE" + +#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168 +msgid "(When different)" +msgstr "(Si différent)" + +#: 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!
    Please check you have sufficient " +"permissions." +msgstr "" +"La création du dossier de destination a échoué !
    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.
    (Required for transcoding to MTP " +"devices.)" +msgstr "" +"La création du fichier temporaire a échoué.
    (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 "" +"

    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'." +"


    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.

    " +msgstr "" +"

    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'." +"


    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'.

    " + +#: devices/devicepropertieswidget.cpp:98 +msgid "" +"

    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.)


    NOTE: 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.

    " +msgstr "" +"

    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.)


    NOTE: 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.

    " + +#: 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 "" +"Advanced Audio " +"Coding (AAC) is a patented lossy codec for digital audio.
    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 "" +"Advanced " +"Audio Coding (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.
    The AAC encoder used by Cantata supports a variable bitrate (VBR) 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.
    For this reason, the bitrate measure in " +"this slider is just an estimate of the
    average bitrate of the encoded track.
    150kb/s is a " +"good choice for music listening on a portable player.
    Anything below " +"120kb/s might be unsatisfactory for music and anything above 200kb/" +"s 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 "" +"MPEG Audio Layer 3 (MP3) is a " +"patented digital audio codec using a form of lossy data compression.
    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.
    The MP3 encoder used by Cantata supports a variable bitrate (VBR) " +"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.
    For this reason, the bitrate measure in this slider " +"is just an estimate of the average bitrate of the encoded track.
    160kb/" +"s is a good choice for music listening on a portable player.
    Anything below 120kb/s might be unsatisfactory for music and " +"anything above 205kb/s 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 "" +"Ogg Vorbis is an open and " +"royalty-free audio codec for lossy audio compression.
    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.
    The Vorbis encoder used by Cantata supports a " +"variable " +"bitrate (VBR) 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.
    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.
    5 is a good choice for music listening on a portable " +"player.
    Anything below 3 might be unsatisfactory for music and " +"anything above 8 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 "" +"Opus 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.
    The Opus encoder used by Cantata supports a variable bitrate (VBR) 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.
    For this reason, the bitrate measure in " +"this slider is just an estimate of the average bitrate of the encoded track." +"
    128kb/s is a good choice for music listening on a portable player." +"
    Anything below 100kb/s might be unsatisfactory for music and " +"anything above 256kb/s 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 "" +"
    Apple Lossless " +"(ALAC) is an audio codec for lossless compression of digital music." +"
    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 "" +"Free Lossless " +"Audio Codec (FLAC) is an open and royalty-free codec for lossless " +"compression of digital music.
    If you wish to store your music without " +"compromising on audio quality, FLAC is an excellent choice." +msgstr "" + +#: devices/encoders.cpp:267 +msgid "" +"The compression level is an integer value between 0 and 8 that " +"represents the tradeoff between file size and compression speed while " +"encoding with FLAC.
    Setting the compression level to 0 " +"yields the shortest compression time but generates a comparably big file.
    On the other hand, a compression level of 8 makes compression quite " +"slow but produces the smallest file.
    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.
    Also, levels above 5 " +"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 "" +"Windows Media " +"Audio (WMA) is a proprietary codec developed by Microsoft for lossy " +"audio compression.
    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.
    Due to the limitations of the proprietary WMA " +"format and the difficulty of reverse-engineering a proprietary encoder, the " +"WMA encoder used by Cantata sets a constant bitrate (CBR) setting." +"
    For this reason, the bitrate measure in this slider is a pretty accurate " +"estimate of the bitrate of the encoded track.
    136kb/s is a good " +"choice for music listening on a portable player.
    Anything below 112kb/" +"s might be unsatisfactory for music and anything above 182kb/s 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 "" +"
    " +msgstr "" +"" + +#: 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 "ERROR: 'From Year' should be less than 'To Year'" +msgstr "" +"ERROR: L'année du début doit être inférieure à l'année de fin" + +#: dynamic/dynamicruledialog.cpp:220 +msgid "" +"ERROR: Date range is too large (can only be a maximum of %1 " +"years)" +msgstr "" +"ERROR: La fourchette de dates est trop large (limite de %1 au " +"maximum)" + +#: 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 "" +"

    Cantata will query your library using all of the rules listed. The list " +"of Include rules will be used to build a set of songs that can be " +"used. The list of Exclude rules will be used to build a set of songs " +"that cannot be used. If there are no Include rules, Cantata will " +"assume that all songs (bar those from Exclude) can be used.

    e." +"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various " +"Artists', you would need the following:

    • Include AlbumArtist=Wibble " +"Genre=Rock
    • Include AlbumArtist=Various Artists
    To have " +"Cantata look for 'Songs by Wibble but not from album Abc', you would need " +"the following:
    • Include AlbumArtist=Wibble
    • Exclude " +"AlbumArtist=Wibble Album=Abc
    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.

    " +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 "" +"Cantata %1

    MPD client.

    © 2011-2014 Craig " +"Drummond
    Released under the GPLv3" +msgstr "" +"Cantata %1

    Client MPD.

    © 2011-2014 Craig " +"Drummond
    Sous licence GPLv3" + +#: gui/mainwindow.cpp:1214 +msgid "" +"Based upon QtMPC - © 2007-2010 " +"The QtMPC Authors
    " +msgstr "" +"Basé sur QtMPC - © 2007-2010 " +"The QtMPC Authors
    " + +#: gui/mainwindow.cpp:1215 +msgctxt "Qt-only" +msgid "" +"Context view backdrops courtesy of FanArt." +"tv" +msgstr "" +"Les images de fond sont issues de FanArt." +"tv" + +#: gui/mainwindow.cpp:1216 +msgctxt "Qt-only" +msgid "" +"Context view metadata courtesy of Wikipedia and Last.fm" +msgstr "" +"Les informations de lecture sont issues de Wikipedia et Last.fm" + +#: gui/mainwindow.cpp:1217 +msgid "" +"Please consider uploading your own music fan-art to FanArt.tv" +msgstr "" +"N'hésitez pas à envoyer vos propres images fan-art sur FanArt.tv" + +#: 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 "" +"
    " +msgstr "" +"" + +#: gui/mainwindow.cpp:1619 +msgid "" +"" +msgstr "" +"" + +#: 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 "" +"Connected to %1
    The entries below apply to the currently connected " +"MPD collection.
    " +msgstr "" +"Connecté à %1
    Les éléments ci-dessous sont liés à la collection MPD " +"courante.
    " + +#. 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 "" +"Not Connected!
    The entries below cannot be modified, as Cantata is " +"not connected to MPD.
    " +msgstr "" +"Non connecté !
    Les entrées ci-dessous ne peuvent être modifiées car " +"Cantata n'est pas connecté à MPD.
    " + +#: 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.

    The following ReplayGain settings may be used:" +"
    • None - No ReplayGain is applied.
    • Track - " +"Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's ReplayGain tags.
    • Auto - Volume will be adjusted using the track's ReplayGain " +"tags if random play is activated, otherwise the album's tags will be used.
    " +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 "" +" This folder will also be used to locate music files for transferring to " +"(and from) devices." +msgstr "" +"Ce dossier va également être utilisé pour trouver les piste à envoyer aux " +"(ou recevoir des) périphériques." + +#. 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 %1 to %2" +msgstr "Le renommage de %1 à %2 a échoué" + +#: mpd/mpdconnection.cpp:1534 +msgid "Failed to save %1" +msgstr "La sauvegarde de %1 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 "%1 on %2" +msgstr "%1 sur %2" + +#: mpd/song.cpp:684 +msgctxt "Song by Artist on Album" +msgid "%1 by %2 on %3" +msgstr "%1 par %2 sur %3" + +#: 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 " +"Track Artist. For compilations, this will often be Various Artists." +"" +msgstr "" +"L'artiste de l'album. Pour la plupart des albums, il aura la même valeur que " +"l'artiste des pistes. Pour les compilations, il sera souvent défini " +"comme Artistes Divers." + +#. 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 Track Artist)." +msgstr "Le titre de la piste (sans l'artiste de la piste)." + +#. 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 Track Artist, if different to Album Artist)." +msgstr "" +"Le titre de la piste (avec l'artiste de la piste s'il est différent " +"de l'artiste de l'album)." + +#. 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 unencrypted 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é en clair 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 "" +"

    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.

    For more information on MPD itself, " +"please refer to the MPD website http://www.musicpd." +"org

    This 'wizard' will guide you through the basic settings " +"required for Cantata to function correctly.

    " +msgstr "" + +#. i18n: file: gui/initialsettingswizard.ui:108 +#. i18n: ectx: property (text), widget (QLabel, label_7) +#: po/rc.cpp:455 rc.cpp:455 +msgid "

    Welcome to Cantata

    " +msgstr "

    Bienvenue sur Cantata

    " + +#. i18n: file: gui/initialsettingswizard.ui:134 +#. i18n: ectx: property (text), widget (QLabel, label_8) +#: po/rc.cpp:458 rc.cpp:458 +msgid "" +"

    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:

    " +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 "" +"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." +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 "" +"Select this option if your music collection is not shared with others, " +"and you wish Cantata to configure and control the MPD instance." +msgstr "" +"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" + +#. i18n: file: gui/initialsettingswizard.ui:268 +#. i18n: ectx: property (text), widget (QLabel, label_11) +#: po/rc.cpp:473 rc.cpp:473 +msgid "" +"

    For more information on MPD itself, please refer to " +"the MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings required for " +"Cantata to function correctly.

    " +msgstr "" +"

    Pour plus d'informations sur MPD veuillez vous référer " +"au site web de MPD http://www.musicpd.org

    Cet assistant vous aidera à configurer les paramètres de bases pour le " +"bon fonctionnement de Cantata.

    " + +#. 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 "" +"

    Cantata will download missing covers, and lyrics, from the internet.

    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.

    " +msgstr "" +"

    Cantata va télécharger les pochettes et paroles manquantes depuis " +"Internet.

    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.

    " + +#. 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!

    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 must 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 "" +"Warning: 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 "" +"

    When adding artists, or albums to the playqueue, or editing tags, etc, " +"then only use songs that pass the current Genre or string filter.

    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 "" +"

    This will change Cantata's interface as detailed:\n" +"

    • Playback, and control, buttons will be 33% wider
    • Views will " +"be 'flickable'
    • To drag items, you will need to 'touch' the top-left " +"corner
    • Scrollbars will only be a few pixels wide
    • Actions (e." +"g. 'Add To Play Queue') will always be visible (not just when item is under " +"mouse)
    • Spin buttons will have + and - buttons at the side of the " +"text field

    " +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 "" +"

    Filename (without extension) to save downloaded covers as.
    If left " +"blank 'cover' will be used.

    %artist% will be replaced with album " +"artist of the current song, and %album% will be replaced with the album name." +"

    " +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 cover.jpg / cover.png 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 cover" +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 must " +"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 http://www.di.fm/premium/ 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 "(Various)" +msgstr "Divers" + +#. 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 not 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@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 all tracks?

    All tracks have existing ReplayGain tags." +"" +msgstr "" +"Analyser toutes les pistes ?

    Toutes les pistes ont déjà " +"une étiquette ReplayGain." + +#: 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 "ERROR: Invalid protocol" +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 all tracks?" +msgstr "" + +#: tags/tageditor.cpp:528 +msgid "" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" +msgstr "" + +#: tags/tageditor.cpp:567 +msgid "Revert \"Various Artists\" workaround on all tracks?" +msgstr "" + +#: tags/tageditor.cpp:568 +msgid "Revert \"Various Artists\" workaround" +msgstr "" + +#: tags/tageditor.cpp:570 +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.

    If 'Title' " +"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " +"will be set to \"Wobble\"
    " +msgstr "" + +#: tags/tageditor.cpp:617 +msgid "" +"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for all " +"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 " +"all 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 "
    " +msgstr "" + +#: widgets/coverwidget.cpp:78 +msgid "" +msgstr "" + +#: widgets/coverwidget.cpp:80 +msgid "" +"" +msgstr "" +"" + +#: 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 "NOTE: %1" +msgstr "NOTE: %1" + +#: 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 "NOT logged into %1" +msgstr "NON 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 -Nru cantata-1.4.2.ds1/po/hu.po cantata-1.5.2.ds2/po/hu.po --- cantata-1.4.2.ds1/po/hu.po 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/po/hu.po 2015-03-23 20:09:39.000000000 +0000 @@ -6,8 +6,8 @@ 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 \n" "Language-Team: Hungarian \n" "Language: hu\n" @@ -21,10 +21,10 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ #. 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 @@ 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 @@ 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 @@ "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 @@ 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 @@ #. 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 @@ msgid "Songs To Be Copied" msgstr "Másolandó dal" -#: devices/actiondialog.cpp:153 +#: devices/actiondialog.cpp:151 msgid "INVALID" msgstr "ÉRVÉNYTELEN" -#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170 +#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168 msgid "(When different)" msgstr "(Ha eltérő)" -#: 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 @@ "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 "" -"

    You have not configured the destination device.
    Continue with the " -"default settings?

    " +"You have not configured the destination device.\n" +"\n" +"Continue with the default settings?" msgstr "" -"

    A céleszközt nem állítottad be.
    Folytatod az alapbeállításokkal?

    " +"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 "" -"

    You have not configured the source device.
    Continue with the default " -"settings?

    " +"You have not configured the source device.\n" +"\n" +"Continue with the default settings?" msgstr "" -"

    Nem állítottad be a forráseszközt.
    Használjuk az alapbeállításokat?" +"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!


    %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!
    Please check you have sufficient " "permissions." @@ -617,31 +645,31 @@ "Nem sikerült létrehozni a célkönyvtárat!
    Ellenőrizd a jogosultságod " "szintjét.
    %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?

    %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.
    (Required for transcoding to MTP " "devices.)" @@ -649,171 +677,172 @@ "Nem sikerült létrehozni az átmeneti fájlt.
    (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.

    %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.

    %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 "" -"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " -"'Title' to \"TrackArtist - TrackTitle\"" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" msgstr "" -"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\"" +"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 "" -"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.

    If 'Title' " -"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " -"will be set to \"Wobble\"
    " +"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 "" -"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.

    ha a \"Cím\" \"Wibble - " -"Wobble\", akkor az \"Előadó\" egyszerűen \"Wibble\", a \"Cím\" pedig \"Wobble" -"\" lesz.
    " +"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 @@ #. 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 @@ 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 "" -"

    Which type of refresh do you wish to perform?

    • Partial - Only new " -"songs are scanned (quick)
    • Full - All songs are rescanned " -"(slow)

    " -msgstr "" -"

    Milyen fajta frissítést szeretne végrehajtani?

    • Részleges - Csak új " -"számokat keres (gyors)
    • Teljes - Minden számot újrakeres " -"(lassú)

    " +#: 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: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:451 +#: 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 %1?" -msgstr "Biztosan el akarod felejteni %1?" - -#: devices/devicespage.cpp:544 -msgid "Are you sure you wish to eject Audio CD %1 - %2?" -msgstr "Biztosan ki szeretnéd adni a hang CD-t %1 - %2" +#: devices/devicespage.cpp:521 +msgid "Are you sure you wish to forget '%1'?" +msgstr "Biztosan el akarod vetni? %1'?" -#: devices/devicespage.cpp:545 +#: 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:541 msgid "Eject" msgstr "Kiadás" -#: devices/devicespage.cpp:546 -msgid "Are you sure you wish to disconnect %1?" -msgstr "Biztosan le szeretnéd csatlakoztatni %1?" +#: 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 @@ "hordozható lejátszókon történő hallgatására.
    Bármi 120kb/s alatt " "bárki számára alkalmatlan lehet és bármi 205kb/s 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 @@ "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.
    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. 5 jó " -"választás zenék hordozható lejátszókon történő hallgatására.
    Bármi " -"3 alatt bárki számára alkalmatlan lehet és bármi 8 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. " +"5 jó választás zenék hordozható lejátszókon történő hallgatására. " +"
    Bármi 3 alatt bárki számára alkalmatlan lehet és bármi 8 " +"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 @@ "(ALAC) veszteségmentes digitális zenetömörítő audio codec.
    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 @@ #: devices/filenameschemedialog.cpp:121 msgid "" -"

    The following variables will be replaced with their corresponding meaning " -"for each track name.

    " +"The following variables will be replaced with their corresponding meaning " +"for each track name." msgstr "" -"

    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 "" "

    " @@ -1416,53 +1449,52 @@ "" -#: 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 @@ 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 @@ 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 @@ #. 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 @@ 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 @@ 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 @@ "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 @@ #: 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 "ERROR: 'From Year' should be less than 'To Year'" msgstr "HIBA: Az 'Évtől...' kisebb legyen mint az 'Évig...'" -#: dynamic/dynamicruledialog.cpp:221 +#: dynamic/dynamicruledialog.cpp:220 msgid "" "ERROR: Date range is too large (can only be a maximum of %1 " "years)" @@ -1789,76 +1829,86 @@ 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 "" "

    Cantata will query your library using all of the rules listed. The list " "of Include rules will be used to build a set of songs that can be " "used. The list of Exclude rules will be used to build a set of songs " "that cannot be used. If there are no Include rules, Cantata will " -"assume that all songs (bar those from Exclude) can be used.
    e.g. " -"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', " -"you would need the following:

    • Include AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various Artists
    To have Cantata look " -"for 'Songs by Wibble but not from album Abc', you would need the following: " -"
    • Include AlbumArtist=Wibble
    • Exclude Album=Abc
    After " -"the set of usable songs has been created, Cantata will randomly select songs " -"to keep the play queue filled with 10 entries.

    " -msgstr "" -"

    A Cantata a felsorolt szabályok szerint végignézi a könyvtáradat. A " -"Hozzávesz szabályokat a szóba jöhető dalokból összeállítás " -"készítésére használja. A Kizár szabályokat fel nem használható dalok " -"összegyűjtésére használja. Hozzávesz szabályok hiányát, a Cantata úgy " -"értelmezi, hogy az összes dal (a Kizár kivételével) felhasználható. " -"
    pl. hogy a Cantata 'Wibble VAGY Válogatott előadók rock dalokat " -"gyűjtse', a következők kellenek:

    • Hozzávesz AlbumElőadó=Wibble " -"Műfaj=Rock
    • Hozzávesz AlbumElőadó=Vegyes előadók
    . Hogy a " -"Cantata keresse a 'Wibble dalokat, de nem az ABC albumból', a következők " -"kellenek:
    • Hozzávesz AlbumElőadó=Wibble
    • Kizár Album=Abc
    • . 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.

      " +"assume that all songs (bar those from Exclude) can be used.

      e." +"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various " +"Artists', you would need the following:

      • Include AlbumArtist=Wibble " +"Genre=Rock
      • Include AlbumArtist=Various Artists
      To have " +"Cantata look for 'Songs by Wibble but not from album Abc', you would need " +"the following:
      • Include AlbumArtist=Wibble
      • Exclude " +"AlbumArtist=Wibble Album=Abc
      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.

      " +msgstr "" +"

      A Cantata az összes felsorolt szabály alapján lekérdezi a könyvtáradat. A " +"Befoglal szabályok listája alapján készít egy összeállítást a " +"használható dalokból. A Kizár szabályok alapján készít egy " +"összeállítást a nem használható dalokból. Ha nincsenek befoglal " +"szabályok, akkor a Cantata feltételezi, hogy (a Kizártaktól " +"eltekintve) mind használható.

      Pl.ahhoz, hogy a Cantata 'Rock dalokat " +"by Zengetés, VAGY Vegyes előadók' alapján keressen, akkor a következőket " +"kellenek:

      • Befoglal AlbumElőadó=Zengetés műfaj=Rock
      • Befoglal " +"AlbumElőadó=Vegyes Előadók
      Ahhoz, hogy 'zenegetés szerinti dalokat " +"keressen de ne az albumból', akkor a következők kellenek:
      • Befoglal " +"AlbumElőadó=Zengetés
      • Kizár AlbumElőadó=Zengetés Album=Abc
      • 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.

        " -#: dynamic/dynamicrulesdialog.cpp:311 +#: 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 @@ "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 "

        Delete all from the following?

          %1

        " -msgstr "

        Innentől kezdve mindent töröl?

          %1

        " +#: 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 @@ "%1\n" "%2 x %3 (%4)" -#: gui/coverdialog.cpp:126 +#: gui/coverdialog.cpp:129 msgctxt "" "name\n" "width x height" @@ -1955,69 +2005,71 @@ "%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 @@ #. 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 @@ 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:207 +#: gui/interfacesettings.cpp:191 +msgid "Small" +msgstr "Kicsi" + +#: 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 @@ "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 @@ "'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 @@ "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 "" "Cantata %1

        MPD client.

        © 2011-2014 Craig " @@ -2570,7 +2583,7 @@ "Drummond
        Kiadva GPLv3 " "szerint." -#: gui/mainwindow.cpp:1146 +#: gui/mainwindow.cpp:1214 msgid "" "Based upon QtMPC - © 2007-2010 " "The QtMPC Authors
        " @@ -2578,7 +2591,7 @@ "Ezen alapul QtMPC - © 2007-2010 " "The QtMPC Authors
        " -#: gui/mainwindow.cpp:1147 +#: gui/mainwindow.cpp:1215 msgctxt "Qt-only" msgid "" "Context view backdrops courtesy of FanArt." @@ -2587,7 +2600,7 @@ "A tartalmi nézet háttere innen származik FanArt.tv" -#: gui/mainwindow.cpp:1148 +#: gui/mainwindow.cpp:1216 msgctxt "Qt-only" msgid "" "Context view metadata courtesy of Wikipédia és Last.fm" -#: gui/mainwindow.cpp:1149 +#: gui/mainwindow.cpp:1217 msgid "" "Please consider uploading your own music fan-art to FanArt.tv" @@ -2604,21 +2617,33 @@ "Fontold meg a kedvenc zenéd feltöltését ide FanArt.tv" -#: 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 "" "
    " -#: gui/mainwindow.cpp:1532 +#: gui/mainwindow.cpp:1619 msgid "" "" -#: 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 "" -"%1 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) %1 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 %1 already exists!
    Add to that playlist?" +#: gui/mainwindow.cpp:2053 +msgid "" +"A playlist named '%1' already exists!\n" +"\n" +"Add to that playlist?" msgstr "" -"A(z) %1 lejátszási lista már létezik!
    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 "" "Connected to %1
    The entries below apply to the currently connected " "MPD collection.
    " @@ -2727,9 +2773,9 @@ "csatlakozva ehhez %1
    Alábbi elemeket a jelenleg kapcsolt MPD-" "gyűjteményre érvényesíti.
    " -#. 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 "" "Not Connected!
    The entries below cannot be modified, as Cantata is " "not connected to MPD.
    " @@ -2737,31 +2783,31 @@ "Nincs csatlakoztatva!
    Az alábbi elemek nem módosíthatóak, mivel a " "Cantata ben csatlakozik az MPD-hez.
    " -#: gui/playbacksettings.cpp:169 +#: gui/playbacksettings.cpp:174 msgid "" -"

    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.

    The following ReplayGain settings may be used:" +"players.

    The following ReplayGain settings may be used:" "

    • None - No ReplayGain is applied.
    • Track - " "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's ReplayGain tags.
    • Auto - Volume will be adjusted using the track's ReplayGain " "tags if random play is activated, otherwise the album's tags will be used.

    " +"li>" msgstr "" -"

    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.

    A következő Lejátszási " -"szint beállítások használhatók:

    • Semmi - Nincs beállítva szint." -"
    • Szám - A hangerőt a számok ReplayGain címkéi alapján állítja " -"be.
    • Album - A hangerőt az albumok ReplayGain címkéi alapján " -"állítja be.
    • Automatikus - 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.

    " +"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..

    A következő Replay Gain (lejátszási " +"szint)beállítások használhatók
    • Nincs - értelemszerű.
    • Szám - A hangerőt a szám ReplayGain jelölője szerint állítja " +"be.
    • Album - A hangerő beállításához az album ReplayGain " +"jelölőjét használja.
    • Auto - 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.
    " -#: 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 "Átnevezés" @@ -2769,35 +2815,43 @@ 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 %1 already exists!
    Overwrite?" -msgstr "A(z) %1 lejátszási lista létezik!
    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 @@ 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 @@ #. 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 "" " This folder will also be used to locate music files for transferring to " "(and from) devices." @@ -3036,335 +3098,317 @@ " A könyvtár az eszközökre (és eszközökről) átvitelre szánt zene " "tárolására is szolgál." -#. 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 "" +"Standard - music collection may be shared, is on another machine, or is " +"already setup" +msgstr "" +"Standard - megosztható zeneválogatás, másik gépen van, vagy már be lett " +"állítva" + +#: gui/serversettings.cpp:241 msgid "" -"Which type of collection do you wish to connect to?
    • Standard - " -"music collection may be shared, is on another machine, or is already setup
    • Basic - music collection is not shared with others, and Cantata will " -"configure and control the MPD instance
    " -msgstr "" -"Milyen gyűjteménytípushoz akarsz csatlakozni?
    • Standard - " -"zenegyűjtemény már megosztva másik gépen, vagy már be van állítva
    • Basic - zenegyűjtemény nincs megosztva más gépekkel, és a Cantata " -"állítja be és vezérli az MPD példányt.
    " +"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:237 +#: 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 %1?" -msgstr "Törlöd %1?" +#: 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 @@ 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 @@ msgid "Album Artist" msgstr "Album előadója" -#: models/playqueuemodel.cpp:583 -msgid "(Priority: %1)" -msgstr "(Prioritás: %1)" - -#: 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 @@ "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 %1 to %2" msgstr "Sikertelen átnevezés erről %1 erre %2" -#: mpd/mpdconnection.cpp:1410 +#: mpd/mpdconnection.cpp:1534 msgid "Failed to save %1" 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 @@ 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 @@ "%2\n" "%3" -#: mpd/song.cpp:601 +#: mpd/song.cpp:683 msgctxt "Song on Album" msgid "%1 on %2" msgstr "%1 a %2-ön" -#: mpd/song.cpp:602 +#: mpd/song.cpp:684 msgctxt "Song by Artist on Album" msgid "%1 by %2 on %3" msgstr "%1 %2-vel %3-on" @@ -3571,19 +3611,19 @@ 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 @@ #. 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 @@ 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 %1?" -msgstr "Leiratkozik innen %1?" +#: 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 %1?" -msgstr "Frissíti a részek listáját innentől: %1?" - -#: 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:595 +msgid "Refresh episode listing from '%1'?" +msgstr "A(z) '%1' részeinek listáját frissíti?" -#: 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 -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 +#: online/onlineservicespage.cpp:648 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 @@ "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 @@ 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 @@ #. 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 @@ #. 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 @@ #. 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 @@ 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 "" -"NOTE: 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)." -msgstr "" -"Megjegyzés: 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)." +"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 @@ 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 "" -"NOTE: Connected to a Mopidy server (manual update required)." -msgstr "" -"Megjegyzés: Mopidy szerverhez kapcsolódva (kézi frissítés " -"szükséges)." +#. 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 @@ #. 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 @@ 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 "" -"NOTE: These settings are only valid, and editable, when the device " -"is connected." +"These settings are only valid, and editable, when the device is connected." msgstr "" -"Megjegyzés: Ezek a beállítások csak akkor érvényesek és " -"szerkeszthetők, ha az eszköz csatlakozik." +"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 @@ 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 "" -"NOTE: These settings are only editable when the device is not " -"connected." +msgid "These settings are only editable when the device is not connected." msgstr "" -"Megjegyzés: Ezek a beállítások csak akkor szerkeszthetők, ha az " -"eszköz nincs csatlakoztatva." +"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 "" -"NOTE: If you enter a password here, it will be stored " -"unencrypted in Cantata's config file. To have Cantata prompt for the " -"password before accessing the share, set the password to '-'" -msgstr "" -"Megjegyzés: az itt megadott jelszó nyíltan 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." +"If you enter a password here, it will be stored unencrypted in " +"Cantata's config file. To have Cantata prompt for the password before " +"accessing the share, set the password to '-'" +msgstr "" +"Az itt beírt jelszót titkosítatlanul 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 "" -"NOTE: Due to the way sshfs works, a suitable ssh-askpass " -"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter " -"the password." -msgstr "" -"Megjegyzés: az sshfs futási módja miatt, megfelelő ssh " -"jelszóbekérő alkalmazás (ksshaskpass, ssh-askpass-gnome, stb.) kell jelszó " -"beviteléhez." +"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, " +"ssh-askpass-gnome, etc.) will be required to enter the password." +msgstr "" +"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 "" -"NOTE: 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 "" -"Megjegyzés: 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." +"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 "" +"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 @@ 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 @@ #. 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 "" -"NOTE Only enter values for the tags you wish to be search on. " -msgstr "" -"Megjegyzés: csak azokhoz a címkékhez írj értéket, amelyekre " -"keresni akarsz." +#. 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 "" -"NOTE For genre, end string with an asterisk to match various " -"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +"For genre, end string with an asterisk to match various genres. e.g 'rock*' " +"matches 'Hard Rock' and 'Rock and Roll'." msgstr "" -"Megjegyzés: 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. " +"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 +#. 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 "" -"NOTE: 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 "" -"Megjegyzés: 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. " - -#. i18n: file: gui/filesettings.ui:104 -#. i18n: ectx: property (text), widget (QLabel, persNote_2) -#: po/rc.cpp:437 rc.cpp:437 -msgid "" -"NOTE: 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 "" -"Megjegyzés: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')" +"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 "" +"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 "" "

    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.

    For more information on MPD itself, please refer to the " -"MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings required for " -"Cantata to function correctly.

    " -msgstr "" -"

    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.

    Az MPD-vel kapcsolatos további információkért " -"fordulj az MPD honlapjához span style=\" " -"text-decoration: underline; color:#0000ff;\">http://www.musicpd.org

    Ez a varázsló átvezet a Cantata megfelelő működéséhez szükséges " -"alapbeállításokon.<

    " +"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side " +"application for playing music.

    For more information on MPD itself, " +"please refer to the MPD website http://www.musicpd." +"org

    This 'wizard' will guide you through the basic settings " +"required for Cantata to function correctly.

    " +msgstr "" +"

    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.

    Az MPD-ről további információk az MPD " +"honlapján http://www.musicpd.org

    Ez a " +"varázs végigvezet a Cantata megfelelő működéséhez szükséges " +"alapbeállításokon.

    " #. 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 "

    Welcome to Cantata

    " msgstr "

    Légy üdvözölve a Cantata-ban.

    " #. 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 "" "

    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:

    " -msgstr "" -"

    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):

    " +"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:

    " +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 "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 "" "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 @@ #. 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 "" "Select this option if your music collection is not shared with others, " "and you wish Cantata to configure and control the MPD instance." @@ -4966,7 +5028,7 @@ #. 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 "" "

    For more information on MPD itself, please refer to " "the MPD website NOTE: 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." -msgstr "" -"Megjegyzés: 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ó." - -#. 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: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 "" +"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: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 "" -"NOTE: When using a local socket the full absolute path to the " -"socket needs to be set. (Port number is not required.)" +"When using a local socket the full absolute path to the socket needs to be " +"set. (Port number is not required.)" msgstr "" -"Megjegyzés: helyi csatlakozó használatakor a csatlakozó teljes, " -"abszolút elérési útvonalát kell beállítani. (Portszám nem kell.)" +"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 "" "

    Cantata will download missing covers, and lyrics, from the internet.

    For each of these, please confirm whether you wish Cantata to store the " @@ -5068,61 +5128,37 @@ "fájlokat a zenekönyvtárban, vagy a személyes cache, vagy config könyvtáradba " "mentse.

    " -#. i18n: file: gui/initialsettingswizard.ui:772 -#. i18n: ectx: property (text), widget (QLabel, persNote) -#: po/rc.cpp:521 rc.cpp:521 -msgid "" -"NOTE: 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." -msgstr "" -"Megjegyzés: 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." - -#. 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 "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'." -"" +"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 "" -"Megjegyzés: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'." - -#. i18n: file: gui/initialsettingswizard.ui:830 -#. i18n: ectx: property (text), widget (StateLabel, httpNote) -#: po/rc.cpp:527 rc.cpp:527 -msgid "" -"NOTE: 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 "" -"Megjegyzés: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." +"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: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 "" +"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!

    Cantata's configuration dialog maybe " "used to customise Cantata's appearance, as well as to add extra MPD hosts, " @@ -5132,9 +5168,24 @@ "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 must 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 be kell " +"á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 "" "Warning: 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 @@ #. 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 -msgid "" -"NOTE: 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." -msgstr "" -"Megjegyzés: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." - -#. i18n: file: gui/interfacesettings.ui:109 -#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel) -#: po/rc.cpp:551 rc.cpp:551 -msgid "" -"NOTE: 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." -msgstr "" -"Megjegyzés: 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." +#. 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 "" +"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: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 "" -"NOTE: 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." -msgstr "" -"Megjegyzés: 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." +#. 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 "" "

    When adding artists, or albums to the playqueue, or editing tags, etc, " "then only use songs that pass the current Genre or string filter.

    e.g. " @@ -5428,39 +5509,33 @@ "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 "" "

    This will change Cantata's interface as detailed:\n" @@ -5468,170 +5543,176 @@ "be 'flickable'

  • To drag items, you will need to 'touch' the top-left " "corner
  • Scrollbars will only be a few pixels wide
  • Actions (e." "g. 'Add To Play Queue') will always be visible (not just when item is under " -"mouse)
  • Spin buttons with have + and - buttons at the side of the " +"mouse)
  • Spin buttons will have + and - buttons at the side of the " "text field
  • " msgstr "" -"

    Ez az alábbiak szerint változtatja meg a Cantata felületét:\n" -"

    • a lejátszó és vezérlő gombok 33%-kal szélesebbek lesznek
    • a " -"nézet 'kattintható' lesz
    • elemek húzásához 'érinteni' kell a bal " -"felső sarkát
    • a görgetősávok csak néhány pontnyi szélesek lesznek
    • a műveletek (p. 'Hozzáadás a lejátszási sorhoz') mindig láthatók (nem " -"csak az egérmutató által érintett)
    • a forgató gomboknak a szövegmező " -"oldalánál + és - gombjai lesznek

    " +"

    Ez a Cantata megjelenését az alábbiak szerint megváltoztatja:\n" +"

    • a Lejátszás és szabályozó gombok 33%-kal szélesebbek
    • a " +"nézetek 'válthatóak'
    • elemek vonszolásához a bal felső sarok " +"'érintése' szükséges
    • a görgetősáv csak pár pixel széles
    • a " +"műveletek (pl.. 'Lejátszási sorhoz fűz') mindig látható (nem csak ha az " +"egérmutató rajta van)
    • a tekerés gomboknál a felirat mellett + és - " +"jelek

    " -#. 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: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: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: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 "" -"NOTE: Changing the 'Enforce single-click activation of items' " -"setting will require a re-start of Cantata." +"Changing the 'Enforce single-click activation of items' setting will require " +"a re-start of Cantata." msgstr "" -"Megjegyzés: az 'Elemek egy-kattintásos aktiválása' " -"engedélyezésekor a Cantata újraindítása szükséges." +"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: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 "A nyelvi beállítások változtatása a Cantata újraindítását igényli." + +#. i18n: file: gui/interfacesettings.ui:813 +#. i18n: ectx: property (text), widget (NoteLabel, touchFriendlyNoteLabel) +#: po/rc.cpp:764 rc.cpp:764 msgid "" -"NOTE: Changing the language setting will require a re-start of " -"Cantata." +"Changing the 'touch friendly' setting will require a re-start of Cantata." msgstr "" -"Megjegyzés:a nyelvi beállítások változtatása esetén a Cantata " -"újraindítása szükséges." +"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 "" -"NOTE: Changing the 'touch friendly' setting will require a re-" -"start of Cantata." +"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 "" -"Megjegyzés: a kinézet 'érintésbarát' beállításaihoz Cantata-t újra " -"kell indítani." +"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 -msgid "" -"NOTE: 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." -msgstr "" -"Megjegyzés: 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." +#. 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 "" +"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 "" "

    Filename (without extension) to save downloaded covers as.
    If left " @@ -5645,155 +5726,156 @@ #. 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 -msgid "" -"NOTE: The 'Music folder' setting is used to lookup cover-art " -"(either the value specified above, or cover.jpg / cover.png 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 "" -"Megjegyzés: 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 borító.jpg / " -"borító.png 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." - -#. i18n: file: gui/serversettings.ui:264 -#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel) -#: po/rc.cpp:841 rc.cpp:841 -msgid "" -"NOTE: '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 "" -"Megjegyzés: 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." - -#. i18n: file: gui/serversettings.ui:343 -#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel) -#: po/rc.cpp:850 rc.cpp:850 -msgid "" -"NOTE: 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 "" -"Megjegyzés: 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." - -#. 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: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 cover.jpg / cover.png 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 "" +"A 'Zenekönyvtár' beállítása borítók keresésére való (akár előbbiekben " +"meghatározott értékre, vagy cover.jpg / cover.png, 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: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 "" +"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: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 "" +"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:268 +#. i18n: ectx: property (text), widget (NoteLabel, musicFolderNoteLabel_2) +#: po/rc.cpp:867 rc.cpp:867 msgid "" -"NOTE: If no setting is specified for 'Cover filename, then Cantata " -"will use a default of cover " +"If no setting is specified for 'Cover filename, then Cantata will use a " +"default of cover" msgstr "" -"Megjegyzés: Ha a 'Borító fájlneve' nincs meghatározva, akkor a " -"Cantata a borító alapbeállítást használja" +"Ha a 'Borító fájlneve' nincs meghatározva, akkor a Cantata egy " +"alapbeállított cover-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 +#. 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 "" -"NOTE: 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." -"

    \n" -"NOTE: If you choose 'Local loopback' for 'Network interface', then " -"MPD must also be on this computer.
    " -msgstr "" -"Megjegyzés: 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.

    \n" -"Megjegyzés: ha a hálózati interfésznek a 'helyi visszacsatolást' " -"választod, akkor az MPD-nek is ezen a gépen kell lennie.
    " +"If you choose 'Local loopback' for 'Network interface', then MPD must " +"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 kell lennie" #. 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
    NOTE: These settings apply to Digitally Imported, JazzRadio.com, " -"RockRadio.com, and Sky.fm
    " -msgstr "" -"Megjegyzés: a beállítások ezekre érvényesek: Digitally Imported, " -"JazzRadio.com, RockRadio.com és Sky.fm." - -#. i18n: file: streams/digitallyimportedsettings.ui:174 -#. i18n: ectx: property (text), widget (QLabel, note2Label) -#: po/rc.cpp:941 rc.cpp:941 -msgid "" -"NOTE: 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 "" -"Megjegyzés: 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." +#. 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 "" +"Ezek a beállítások a Digitally Imported, JazzRadio.com, RockRadio.com, és " +"Sky.fm-re érvényesek." + +#. 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 "" +"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 "" -"NOTE: Built-in categories are shown in italic, and these cannot be " -"removed." +#. 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 "" -"Megjegyzés: a dőlt betűsek beépített beállítások, és nem lehet " -"eltávolítani őket." - -#. 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 "(Various)" +msgstr "(Vegyes)" + +#. 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 "" -"NOTE Multiple genres should be separated via a semicolon (e.g. " -"'Rock;Hard Rock')" +"Ratings are stored in an external database, and not in the song's " +"file." msgstr "" -"Megjegzés: a többes műfaji megjelöléseket pontosvesszővel kell " -"elválasztani (p. 'Rock;Hard Rock')" +"A besorolást (minősítést) külső adatbázis tárolja és nem 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@freemail.hu" @@ -5994,7 +6091,7 @@ #: 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 @@ #: replaygain/rgdialog.cpp:261 msgid "" -"Scan all tracks?

    NOTE: All tracks have existing ReplyGain " -"tags." +"Scan all tracks?

    All tracks have existing ReplayGain tags." +"" msgstr "" -"Az összes számot átnézzem?

    Megjegyzés: minden szám " -"rendelkezik lejátszási szint címkével." +"Az összes számot átnézi?

    Minden szám rendelkezik " +"Lejátszási Szint jelölővel." #: replaygain/rgdialog.cpp:263 msgid "Do you wish to scan all tracks, or only tracks without existing tags?" @@ -6030,17 +6127,17 @@ 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 @@ 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 @@ 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 "" -"NOTE: 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 "" -"Megjegyzés: 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." +"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 "" +"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 @@ #: 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 @@ 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 "ERROR: Invalid protocol" msgstr "Hiba: érvénytelen protokoll" @@ -6253,39 +6350,39 @@ msgstr "Telepítés, frissítés %1" #: streams/streamproviderlistdialog.cpp:257 -msgid "Failed to install %1" -msgstr "Nem sikerült telepíteni %1" +msgid "Failed to install '%1'" +msgstr "A(z) '%1' telepítése sikertelen" #: streams/streamproviderlistdialog.cpp:266 -msgid "Failed to download %1" -msgstr "Nem sikerült letölteni %1" +msgid "Failed to download '%1'" +msgstr "A(z) '%1' letöltése sikertelen" -#: streams/streamproviderlistdialog.cpp:327 -msgid "ListenLive" -msgstr "ListenLive" - -#: streams/streamproviderlistdialog.cpp:364 -msgid "Install the following?" -msgstr "Telepíted a következőt?" - -#: streams/streamproviderlistdialog.cpp:374 -msgid "Update the following?" -msgstr "Frissíted a következőt?" +#: 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:358 +msgid "Install the selected stream providers?" +msgstr "A kiválasztott adatfolyam-szolgáltatókat telepíti?" + +#: 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 @@ 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 %1!" -msgstr "Létrehozás sikertelen %1!" - -#: streams/streamspage.cpp:254 streams/streamspage.cpp:435 -msgid "Stream already exists!
    %1" -msgstr "Létező stream!
    %1" - -#: streams/streamspage.cpp:256 streams/streamspage.cpp:437 -msgid "A stream named %1 already exists!" -msgstr "A nevezett stream %1 már létezik!" +#: streams/streamspage.cpp:249 +msgid "Failed to create '%1'!" +msgstr "A(z) '%1'-t nem sikerült létrehozni!" + +#: 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: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 %1 streams?" -msgstr "%1 stream-ek újratöltése?" - -#: streams/streamspage.cpp:362 -msgid "Are you sure you wish to remove bookmark to %1?" -msgstr "Biztosan eltávolítanád a könyvjelzőjét ennek: %1?" - -#: streams/streamspage.cpp:368 -msgid "Are you sure you wish to remove all %1 bookmarks?" -msgstr "Biztosan eltávolítanád az összes %1 könyvjelzőt?" +#: streams/streamspage.cpp:356 +msgid "Reload '%1' streams?" +msgstr "A(z) '%1' adatfolyamot újratölti?" + +#: 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: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 %1?" -msgstr "Biztosan eltávolítanád ezt %1?" +#: 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 %1 already exists!
    Overwrite?" -msgstr "Már van %1 nevű lejátszási lista!
    Felülírjam?" - -#: streams/streamssettings.cpp:176 -msgid "Failed top open package file" -msgstr "Nem sikerült megnyitni a csomagfájlt" +#: 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: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!
    %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 @@ 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,133 +6635,261 @@ 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 +#: 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 all tracks?" msgstr "" "\"Válogatott előadók\" munkakörnyezet alkalmazása az összes számra?" -#: tags/tageditor.cpp:499 -msgid "Revert \"Various Artists\" workaround on all tracks?" -msgstr "" -"Visszaállítod a \"Vegyes előadók\" munkakörnyezetet az összes számra? " - -#: tags/tageditor.cpp:549 +#: tags/tageditor.cpp:528 msgid "" -"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for all " -"tracks?" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" +msgstr "" +"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\"" + +#: tags/tageditor.cpp:567 +msgid "Revert \"Various Artists\" workaround on all tracks?" +msgstr "" +"Visszaállítod a \"Vegyes előadók\" munkakörnyezetet az összes számra? " + +#: 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 "" +"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.

    If 'Title' " +"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " +"will be set to \"Wobble\"
    " +msgstr "" +"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.

    ha a \"Cím\" \"Wibble - " +"Wobble\", akkor az \"Előadó\" egyszerűen \"Wibble\", a \"Cím\" pedig \"Wobble" +"\" lesz.
    " + +#: tags/tageditor.cpp:617 +msgid "" +"Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for all " +"tracks?" msgstr "" "'Album Előadó'-t állítasz az 'Előadó' helyett (ha az 'Album Előadó' üres) " "az összes 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 all tracks?" +"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of " +"all tracks?" msgstr "" -"A 'Cím', 'Előadó', 'Album előadó' és 'Album' első betűjének nagyra váltása " -"az összes számnál?" +"Nagybetűsítse a (pl. 'Cím', 'Előadó, 'Előadó' stb.) első betűjét az " +"összes 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!
    %1" -msgstr "Forrásfájl nem létezik!
    %1" - -#: tags/trackorganiser.cpp:297 -msgid "Destination file already exists!
    %1" -msgstr "A célfájl már létezik!
    " - -#: tags/trackorganiser.cpp:319 -msgid "Failed to create destination folder!
    %1" -msgstr "Nem sikerült létrehozni a könyvtárat!
    %1" - -#: tags/trackorganiser.cpp:340 -msgid "Failed to rename %1 to %2" -msgstr "Nem sikerült %1 átnevezése %2-re" +#: 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:321 +msgid "Failed to create destination folder!" +msgstr "Nem sikerült létrehozni a célkönyvtárat!" + +#: tags/trackorganiser.cpp:342 +msgid "Failed to rename '%1' to '%2'" +msgstr "'%1'-t nem sikerült átnevezni '%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 "

    " msgstr "" -#: widgets/coverwidget.cpp:89 +#: widgets/coverwidget.cpp:78 +msgid "" +msgstr "" + +#: widgets/coverwidget.cpp:80 msgid "" "" 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 "%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 @@ 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 @@ 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 @@ #. 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 @@ 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 @@ 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 @@ #: 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 "ERROR: 'From Year' should be less than 'To Year'" msgstr "오류: '시작 연도'는 '마지막 연도'보다 작아야 합니다" -#: dynamic/dynamicruledialog.cpp:221 +#: dynamic/dynamicruledialog.cpp:220 msgid "" "ERROR: Date range is too large (can only be a maximum of %1 " "years)" @@ -1756,72 +1801,80 @@ msgid "Dynamic Rules" msgstr "동적 규정" -#: dynamic/dynamicrulesdialog.cpp:292 +#: dynamic/dynamicrulesdialog.cpp:295 +msgid "About dynamic rules" +msgstr "동적 규정에 대하여" + +#: dynamic/dynamicrulesdialog.cpp:297 msgid "" "

    Cantata will query your library using all of the rules listed. The list " "of Include rules will be used to build a set of songs that can be " "used. The list of Exclude rules will be used to build a set of songs " "that cannot be used. If there are no Include rules, Cantata will " -"assume that all songs (bar those from Exclude) can be used.
    e.g. " -"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', " -"you would need the following:

    • Include AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various Artists
    To have Cantata look " -"for 'Songs by Wibble but not from album Abc', you would need the following: " -"
    • Include AlbumArtist=Wibble
    • Exclude Album=Abc
    After " -"the set of usable songs has been created, Cantata will randomly select songs " -"to keep the play queue filled with 10 entries.

    " +"assume that all songs (bar those from Exclude) can be used.

    e." +"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various " +"Artists', you would need the following:

    • Include AlbumArtist=Wibble " +"Genre=Rock
    • Include AlbumArtist=Various Artists
    To have " +"Cantata look for 'Songs by Wibble but not from album Abc', you would need " +"the following:
    • Include AlbumArtist=Wibble
    • Exclude " +"AlbumArtist=Wibble Album=Abc
    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.

    " msgstr "" "

    칸타타는 등록된 모든 규정을 이용하여 라이브러리를 조회합니다. 포함" "된 규정 항목은 사용될 곡들을 선별하는 데에 사용됩니다. 제외된 규정 항" "목은 사용되지 않을 곡들을 선별하는 데에 사용됩니다. 포함된 규정이 없으" -"면, 전곡(제외된 규정을 제외하고)을 사용할 수 있다고 가정합니다.
    " -"예로 '유재하의 Ballad 및 여러 연주자의 곡'을 선택하려면 다음과 같이 하면 됩니" -"다:

    • 포함 음반연주자=유재하 장르=Ballad
    • 포함 음반연주자=여러 " -"연주자
    '유재하의 모든 곡 중에 미련 음반을 제외'하려면:
    • 포" -"함 음반연주자=유재하
    • 제외 음반=미련
    사용할 곡들이 만들어지" +"면, 전곡(제외된 규정을 제외하고)을 사용할 수 있다고 가정합니다.

    예로 '유재하의 Ballad 및 여러 연주자의 곡'을 선택하려면 다음과 같이 하면 됩" +"니다:
    • 포함 음반연주자=유재하 장르=Ballad
    • 포함 음반연주자=여" +"러 연주자
    '유재하의 모든 곡 중에 미련 음반을 제외'하려면:
    • " +"포함 음반연주자=유재하
    • 제외 음반=미련
    사용할 곡들이 만들어지" "면 칸타타는 무작위로 곡들을 선택하여 연주순서에 10개 항목을 유지합니다.

    " -#: 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 @@ "내려받았으나 음악 폴더에 저장되지 못한 경우입니다 (접근할 수 없거나, 저장하" "지 않도록 설정해서입니다). 아래는 캐시를 사용한 내역입니다." -#: 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 "

    Delete all from the following?

      %1

    " -msgstr "

    아래 전부를 지웁니까?

      %1

    " +#: 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 @@ "%1\n" "%2 x %3 (%4)" -#: gui/coverdialog.cpp:126 +#: gui/coverdialog.cpp:129 msgctxt "" "name\n" "width x height" @@ -1916,71 +1969,73 @@ "%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 @@ #. 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 @@ 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 @@ "'단일'이 선택되면, 지금 곡 다음에 연주를 멈춥니다. '반복'이 선택되면, 곡은 반" "복됩니다." -#: 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 "" "Cantata %1

    MPD client.

    © 2011-2014 Craig " @@ -2525,7 +2541,7 @@ "Drummond
    GPLv3에 따" "라 배포" -#: gui/mainwindow.cpp:1146 +#: gui/mainwindow.cpp:1214 msgid "" "Based upon QtMPC - © 2007-2010 " "The QtMPC Authors
    " @@ -2533,14 +2549,14 @@ "QtMPC 기반 - © 2007-2010 QtMPC " "개발자
    " -#: gui/mainwindow.cpp:1147 +#: gui/mainwindow.cpp:1215 msgctxt "Qt-only" msgid "" "Context view backdrops courtesy of FanArt." "tv" msgstr "찾아보기 배경 도움은 FanArt.tv" -#: gui/mainwindow.cpp:1148 +#: gui/mainwindow.cpp:1216 msgctxt "Qt-only" msgid "" "Context view metadata courtesy of 위키피디아 와 " "Last.fm" -#: gui/mainwindow.cpp:1149 +#: gui/mainwindow.cpp:1217 msgid "" "Please consider uploading your own music fan-art to FanArt.tv" @@ -2557,21 +2573,33 @@ "나만의 음악 팬아트를 올려주실 곳은 FanArt." "tv" -#: 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:1381 gui/mainwindow.cpp:1392 +msgid "Enabled: %1" +msgstr "사용 가능: %1" -#: gui/mainwindow.cpp:1205 -msgid "Abort downloads and quit" -msgstr "내려받기를 그만두고 취소" +#: gui/mainwindow.cpp:1385 gui/mainwindow.cpp:1393 +msgid "Disabled: %1" +msgstr "사용 불가능: %1" -#: gui/mainwindow.cpp:1521 +#: gui/mainwindow.cpp:1605 gui/mainwindow.cpp:1628 +msgid "Server Information" +msgstr "서버정보" + +#: gui/mainwindow.cpp:1608 msgid "" "
    " -#: gui/mainwindow.cpp:1532 +#: gui/mainwindow.cpp:1619 msgid "" "" -#: 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 "" -"%1 is used to store favorite streams, please choose another name." +"A playlist named '%1' already exists!\n" +"\n" +"Add to that playlist?" msgstr "" -"%1이 선호하는 스트림을 저장하기 위해 사용되므로, 다른 이름을 선택합니" -"다." - -#: gui/mainwindow.cpp:2013 -msgid "A playlist named %1 already exists!
    Add to that playlist?" -msgstr "연주목록 이름 %1이 이미 있습니다!
    연주목록에 추가할까요?" +"연주목록 이름 '%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 "" "Connected to %1
    The entries below apply to the currently connected " "MPD collection.
    " msgstr "" "%1에 연결
    아래 목록들은 지금 연결된 MPD 음원에 적용됩니다.
    " -#. 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 "" "Not Connected!
    The entries below cannot be modified, as Cantata is " "not connected to MPD.
    " @@ -2687,28 +2736,28 @@ "연결 안 됨!
    칸타타가 MPD에 연결되지 않았으므로 아래 목록은 수정" "되지 않습니다.
    " -#: gui/playbacksettings.cpp:169 +#: gui/playbacksettings.cpp:174 msgid "" -"

    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.

    The following ReplayGain settings may be used:" +"players.

    The following ReplayGain settings may be used:" "

    • None - No ReplayGain is applied.
    • Track - " "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's ReplayGain tags.
    • Auto - Volume will be adjusted using the track's ReplayGain " "tags if random play is activated, otherwise the album's tags will be used.

    " +"li>" msgstr "" -"

    리플레이게인은 MP3나 Ogg Vorbis 같은 오디오 포맷의 소리 크기를 맞추기 위하" -"여 2001년에 제안된 표준입니다. 곡이나 음반 단위로 작동하며 이제는 점점 더 많" -"은 연주기가 지원합니다.

    아래 설정이 사용될 수 있습니다:

    • 안 함" +"리플레이게인은 MP3나 Ogg Vorbis 같은 오디오 포맷의 소리 크기를 맞추기 위하여 " +"2001년에 제안된 표준입니다. 곡이나 음반 단위로 작동하며 이제는 점점 더 많은 " +"연주기가 지원합니다.

      아래 설정이 사용될 수 있습니다:
      • 안 함" " - 리플레이게인을 적용 안 함.
      • - 곡의 리플레이게인 태그" "를 이용하여 음량을 조정함.
      • 음반 - 음반의 리플레이게인 태그를 " "이용하여 음량을 조정함.
      • 자동 - 무작위연주는 곡의 리플레이게인 " -"태그를, 그 밖은 음반의 태그를 이용하여 음량을 조정함.

      " +"태그를, 그 밖은 음반의 태그를 이용하여 음량을 조정함.
    " -#: 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 @@ 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 %1 already exists!
    Overwrite?" -msgstr "연주목록 이름 %1은 이미 있습니다!
    덮어쓸까요?" +#: 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 @@ 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 @@ #. 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 "" " This folder will also be used to locate music files for transferring to " "(and from) devices." 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?
    • Standard - " -"music collection may be shared, is on another machine, or is already setup
    • Basic - music collection is not shared with others, and Cantata will " -"configure and control the MPD instance
    " -msgstr "" -"어떤 형식의 음원에 연결할까요?
    • 표준 - 다른 컴퓨터에 연결되거나 이" -"미 설정되어, 음원을 공유할 수 있음
    • 기본 - 음원이 공유되지 않고 MPD만 " -"설정하고 관리함
    " +"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 "기본 - 음원이 공유되지 않고 MPD만 설정하고 관리함" + +#: 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 %1?" -msgstr "%1을 지울까요?" +#: 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 -msgctxt "Album by Artist" +#: 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 @@ msgid "Disc" msgstr "디스크" +#: models/playqueuemodel.cpp:178 +msgid "Rating" +msgstr "등급" + #: models/playqueuemodel.cpp:241 msgid "Undo" msgstr "되돌리기" @@ -3336,111 +3387,107 @@ msgid "Album Artist" msgstr "음반연주자" -#: models/playqueuemodel.cpp:583 -msgid "(Priority: %1)" -msgstr "(우선순위: %1)" - -#: 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 %1 to %2" msgstr "%1에서 %2로 이름 바꾸기 안 됨" -#: mpd/mpdconnection.cpp:1410 +#: mpd/mpdconnection.cpp:1534 msgid "Failed to save %1" msgstr "%1 저장 안 됨" -#: 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 @@ 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 @@ "%2\n" "%3" -#: mpd/song.cpp:601 +#: mpd/song.cpp:683 msgctxt "Song on Album" msgid "%1 on %2" msgstr "%2%1" -#: mpd/song.cpp:602 +#: mpd/song.cpp:684 msgctxt "Song by Artist on Album" msgid "%1 by %2 on %3" msgstr "%3에서 %2%1" @@ -3508,19 +3551,19 @@ 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 @@ #. 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 @@ 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 %1?" -msgstr "%1을 구독 취소할까요?" +#: 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 %1?" -msgstr "%1의 팟캐스트 항목을 새로 읽을까요?" - -#: 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 "'%1'의 팟캐스트 항목을 새로 읽을까요?" -#: 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 "아래 팟캐스트 에피소드에서 내려받은 한 파일을 지울까요?" +"Cancel podcast episode downloads (both current and any that are queued)?" +msgstr "팟캐스트 에피소드 내려받기를 취소할까요 (지금과 대기 모두)?" -#: online/onlineservicespage.cpp:696 -msgid "" -"Do you wish to the delete downloaded files of the following podcast episodes?" -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/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 "웹사이트:" -#: 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 @@ "오디오 팟캐스트만 지원합니다! 입력한 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 @@ 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 @@ #. 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 @@ #. 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 @@ #. 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 @@ 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 "" -"NOTE: 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)." -msgstr "" -"참고: 칸타타는 위키피디아의 이미지나 링크가 포함된 전체 페이지가 아" -"니라, 이를 단순화해서 보여줍니다. 이 단순화는 항상 100% 정확하지는 않아서, 기" -"본 본문을 보여주게 됩니다. 전체 본문에서는 오류가 있을 수 있습니다. 또한 '캐" -"시' 설정을 이용하여 저장된 기본 본문을 지워야 합니다." +"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 "" +"칸타타는 위키피디아의 이미지나 링크가 없이 단순화해서 보여줍니다. 이 단순화" +"는 항상 100% 정확하지는 않아서, 기본 본문을 보여주게 됩니다. 전체 본문에서는 " +"오류가 있을 수 있습니다. 또한 '캐시' 설정을 이용하여 저장된 기본 본문을 지워" +"야 합니다." #. i18n: file: context/togglelist.ui:17 #. i18n: ectx: property (text), widget (QLabel, label_2) @@ -4073,22 +4137,21 @@ 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 "" -"NOTE: Connected to a Mopidy server (manual update required)." -msgstr "참고: Mopidy 서버에 연결됨 (수동 업데이트 필요)." +#. 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 @@ #. 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 @@ 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 "" -"NOTE: These settings are only valid, and editable, when the device " -"is connected." -msgstr "" -"참고: 이 설정은 장치가 연결되었을 때에만 유효하고 수정할 수 있습니" -"다." +"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 @@ 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 "" -"NOTE: These settings are only editable when the device is not " -"connected." -msgstr "" -"참고: 이 설정은 장치가 연결되지 않았을 때에만 수정할 수 있습니다." +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 "" -"NOTE: If you enter a password here, it will be stored " -"unencrypted in Cantata's config file. To have Cantata prompt for the " -"password before accessing the share, set the password to '-'" -msgstr "" -"참고: 여기에 비밀번호를 입력하면, 설정 파일에 비 암호화되어 " -"저장됩니다. 공유에 접근하기 전에 비밀번호를 입력하려면, 비밀번호를 '-'로 설정" -"합니다." +"If you enter a password here, it will be stored unencrypted 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 "" -"NOTE: Due to the way sshfs works, a suitable ssh-askpass " -"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter " -"the password." +"Due to the way sshfs works, a suitable ssh-askpass application (ksshaskpass, " +"ssh-askpass-gnome, etc.) will be required to enter the password." msgstr "" -"참고: sshfs의 작동 원리에 따라, 적당한 ssh-askpass 응용프로그램" -"(ksshaskpass, ssh-askpass-gnome, 등.)이 비밀번호 입력을 위해 필요합니다." +"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 "" -"NOTE: 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 "" -"참고: 이 대화상자는 원격장치를 삼바(Samba)등으로 추가하거나 로컬 마" -"운트된 폴더에 연결할 때만 사용됩니다. 일반적인 미디어 연주기나 USB 장치는 연" -"결되면 자동으로 표시됩니다." +"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 "" +"이 대화상자는 원격장치를 추가(예. Samba)하거나 로컬 마운트된 폴더에 연결할 때" +"만 사용됩니다. 일반 미디어 연주기나 USB 장치는 연결되면 자동으로 표시됩니다." #. i18n: file: dynamic/dynamicpage.ui:26 #. i18n: ectx: property (text), widget (StatusLabel, remoteRunningLabel) @@ -4644,39 +4696,51 @@ 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 @@ #. 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 "" -"NOTE Only enter values for the tags you wish to be search on. " -msgstr "참고 찾고자 하는 태그값만 입력합니다. " +#. 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 "" -"NOTE For genre, end string with an asterisk to match various " -"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +"For genre, end string with an asterisk to match various genres. e.g 'rock*' " +"matches 'Hard Rock' and 'Rock and Roll'." msgstr "" -"참고 장르에서 별표(*)로 끝나는 문자열은 다양한 장르를 포함합니다. " -"예) 'rock*'은 'Hard Rock'과 'Rock and Roll'을 포함. " +"장르에서 별표(*)로 끝나는 문자열은 다양한 장르를 포함합니다. 예) '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 +#. 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 "" -"NOTE: 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 -msgid "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/" -"Tracks')" +"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 "" "

    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.

    For more information on MPD itself, please refer to the " -"MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings required for " -"Cantata to function correctly.

    " +"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side " +"application for playing music.

    For more information on MPD itself, " +"please refer to the MPD website http://www.musicpd." +"org

    This 'wizard' will guide you through the basic settings " +"required for Cantata to function correctly.

    " msgstr "" "

    칸타타는 기능이 다양하고 사용하기가 편리한 Music " "Player Daemon (MPD) 클라이언트 입니다. MPD는 음악 연주에 사용되는 백그라운드 " @@ -4820,19 +4887,19 @@ #. 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 "

    Welcome to Cantata

    " 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 "" "

    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:

    " +"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:

    " msgstr "" "

    칸타타는 기능이 다양하고 사용하기가 편리한 Music " "Player Daemon (MPD) 클라이언트 입니다. MPD는 음악 연주에 사용되는 백그라운드 " @@ -4841,13 +4908,13 @@ #. 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 "" "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 @@ #. 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 "" "Select this option if your music collection is not shared with others, " "and you wish Cantata to configure and control the MPD instance." @@ -4877,7 +4944,7 @@ #. 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 "" "

    For more information on MPD itself, please refer to " "the MPD website NOTE: 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." -msgstr "" -"참고: '음악 폴더' 설정은 음반표지나 가사 등을 찾기 위해 사용됩니" -"다. 만약 MPD가 원격 호스트에 있다면 HTTP URL로 설정할 수 있습니다." - -#. 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: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 "" +"'음악 폴더' 설정은 음반표지나 가사 등을 찾기 위해 사용됩니다. 만약 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 "" -"NOTE: When using a local socket the full absolute path to the " -"socket needs to be set. (Port number is not required.)" +"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 "" "

    Cantata will download missing covers, and lyrics, from the internet.

    For each of these, please confirm whether you wish Cantata to store the " @@ -4976,56 +5041,36 @@ "

    인터넷으로부터 없는 음반표지와 가사를 내려받습니다.

    이를 위하여, 음" "악폴더 또는 개인 캐시/설정 폴더에 내려받을 지를 확인합니다.

    " -#. i18n: file: gui/initialsettingswizard.ui:772 -#. i18n: ectx: property (text), widget (QLabel, persNote) -#: po/rc.cpp:521 rc.cpp:521 -msgid "" -"NOTE: 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." -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 "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'." -"" +"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 "" -"NOTE: 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." +"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 "" -"참고: '음악 폴더'가 HTTP 주소로 지정되어, 외부 HTTP 서버에 파일을 " -"올릴 수 없습니다. 따라서 위의 설정은 사용하지 않아야 합니다." +"'음악 폴더'가 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!

    Cantata's configuration dialog maybe " "used to customise Cantata's appearance, as well as to add extra MPD hosts, " @@ -5034,9 +5079,24 @@ "이제 칸타타가 설정되었습니다!

    칸타타의 설정 대화창은 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 must 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 "" "Warning: 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 @@ #. 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 -msgid "" -"NOTE: 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." -msgstr "" -"참고: 기본적으로 연주순서는 다른 보기의 옆에 보입니다. 위를 선택한 " -"경우에는, 다른 보기처럼 옆줄에 합쳐집니다." - -#. i18n: file: gui/interfacesettings.ui:109 -#. i18n: ectx: property (text), widget (StateLabel, sbInfoLabel) -#: po/rc.cpp:551 rc.cpp:551 -msgid "" -"NOTE: 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." -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:150 +#. 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: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 "" -"NOTE: 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." -msgstr "" -"참고: 연주자이미지를 찾을 때, 지금 곡이 있는 폴더나 상위 폴더의 " -"artist.jpg, artist.png, '연주자'.jpg 또는 '연주자'.png\n" -"를 찾습니다.만약 이미지를 찾지 못하면 내려받기를 시도합니다." +#. 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 "알림 영역에 아이콘 보이기" +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 "" "

    When adding artists, or albums to the playqueue, or editing tags, etc, " "then only use songs that pass the current Genre or string filter.

    e.g. " @@ -5323,39 +5414,33 @@ "'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 "" "

    This will change Cantata's interface as detailed:\n" @@ -5363,163 +5448,171 @@ "be 'flickable'

  • To drag items, you will need to 'touch' the top-left " "corner
  • Scrollbars will only be a few pixels wide
  • Actions (e." "g. 'Add To Play Queue') will always be visible (not just when item is under " -"mouse)
  • Spin buttons with have + and - buttons at the side of the " +"mouse)
  • Spin buttons will have + and - buttons at the side of the " "text field
  • " msgstr "" "

    칸타타의 인터페이스를 아래와 같이 바꿉니다:\n" -"

    • 연주와 컨트롤버튼은 33% 더 넓어집니다
    • 보기는 '깜빡'거립니다" -"
    • 드래그하려면, 상단-좌측 모서리를 '터치'해야 합니다
    • 스크롤바" -"는 조금 넓어집니다
    • 동작(예. '연주순서 추가')는 항상 보입니다 (마우스" -"아래에 항목이 있지 않아도)
    • 회전 단추가 문자영역 옆에 +와 -를 가집니" -"다

    " +"
    " msgstr "" -#: widgets/coverwidget.cpp:89 +#: widgets/coverwidget.cpp:78 +msgid "" +msgstr "" + +#: widgets/coverwidget.cpp:80 msgid "" "" @@ -1444,53 +1477,52 @@ "" -#: 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 @@ 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 @@ 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 @@ #. 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 @@ 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 @@ 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 @@ "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 @@ #: 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 "ERROR: 'From Year' should be less than 'To Year'" msgstr "" "BŁĄD: 'Od roku' powinno mieć mniejszą wartość niż 'Do roku'" -#: dynamic/dynamicruledialog.cpp:221 +#: dynamic/dynamicruledialog.cpp:220 msgid "" "ERROR: Date range is too large (can only be a maximum of %1 " "years)" @@ -1821,77 +1862,86 @@ 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 "" "

    Cantata will query your library using all of the rules listed. The list " "of Include rules will be used to build a set of songs that can be " "used. The list of Exclude rules will be used to build a set of songs " "that cannot be used. If there are no Include rules, Cantata will " -"assume that all songs (bar those from Exclude) can be used.
    e.g. " -"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', " -"you would need the following:

    • Include AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various Artists
    To have Cantata look " -"for 'Songs by Wibble but not from album Abc', you would need the following: " -"
    • Include AlbumArtist=Wibble
    • Exclude Album=Abc
    After " -"the set of usable songs has been created, Cantata will randomly select songs " -"to keep the play queue filled with 10 entries.

    " +"assume that all songs (bar those from Exclude) can be used.

    e." +"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various " +"Artists', you would need the following:

    • Include AlbumArtist=Wibble " +"Genre=Rock
    • Include AlbumArtist=Various Artists
    To have " +"Cantata look for 'Songs by Wibble but not from album Abc', you would need " +"the following:
    • Include AlbumArtist=Wibble
    • Exclude " +"AlbumArtist=Wibble Album=Abc
    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.

    " msgstr "" -"

    Cantata przeszuka bibliotekę używając wszystkich przypisanych reguł. " -"Lista reguł Zawiera zostanie użyta do zbudowania zbioru utworów, " +"

    Cantata odpyta bazę danych używając wszystkich podanych reguł. Lista " +"reguł o nazwie Zawiera zostanie użyta do zbudowania listy utworów, " "które mogą zostać użyte. Lista reguł Nie zawiera zostanie użyta do " -"zbudowania zbioru utworów, które nie będą użyte. Jeśli nie ma reguł typu " -"Zawiera to Cantata zakłada, że wszystkie utwory (oprócz pasujących do " -"reguł Nie zawiera) mogą zostać użyte.
    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:

    • Zawiera " +"zbudowania listy utworów, które nie mogą być użyte. Jeśli lista reguł " +"Zawiera jest pusta, to Cantata przyjmuje, że wszystkie utwory (za " +"wyjątkiem nie spełniających reguł Nie zawiera) mogą być użyte.

      np. aby Cantata wyszukała wszystkich 'Rockowych utworów artysty Wibble " +"lub Various Artists', należy użyć następujących reguł:

      • Zawiera " "ArtystaAlbumu=Wibble Gatunek=Rock
      • Zawiera ArtystaAlbumu=Various " -"Artists
      aby Cantata szukała 'Utworów w wykonaniu Wibble ale nie z " -"albumu Abc', wymagane będą następujące reguły:
      • Zawiera " -"ArtystaAlbumu=Wibble
      • Nie zawiera Album=Abc
      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.

      " +"Artists
    Aby Cantata wyszukała 'Utworów w wykonaniu Wibble ale nie " +"z albumu Abc', należy użyć:
    • Zawiera ArtystaAlbumu=Wibble
    • Nie " +"zawiera ArtystaAlbumu=Wibble Album=Abc
    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.

    " -#: dynamic/dynamicrulesdialog.cpp:311 +#: 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 @@ "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 "

    Delete all from the following?

      %1

    " -msgstr "

    Czy usunąć wszystkie z wymienionych?

      %1

    " +#: 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 @@ "%1\n" "%2 x %3 (%4)" -#: gui/coverdialog.cpp:126 +#: gui/coverdialog.cpp:129 msgctxt "" "name\n" "width x height" @@ -1988,69 +2038,71 @@ "%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 @@ #. 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 @@ 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:191 +msgid "Small" +msgstr "Małe" -#: gui/interfacesettings.cpp:207 +#: 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 @@ "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 @@ "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 @@ "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 "" "Cantata %1

    MPD client.

    © 2011-2014 Craig " @@ -2606,7 +2619,7 @@ "Drummond
    Wydano na warunkach licencji
    GPLv3" -#: gui/mainwindow.cpp:1146 +#: gui/mainwindow.cpp:1214 msgid "" "Based upon QtMPC - © 2007-2010 " "The QtMPC Authors
    " @@ -2614,7 +2627,7 @@ "Program bazujący na QtMPC - © " "2007-2010 Autorzy QtMPC " -#: gui/mainwindow.cpp:1147 +#: gui/mainwindow.cpp:1215 msgctxt "Qt-only" msgid "" "Context view backdrops courtesy of FanArt." @@ -2623,7 +2636,7 @@ "Tło widoku kontekstowego za uprzejmością FanArt.tv" -#: gui/mainwindow.cpp:1148 +#: gui/mainwindow.cpp:1216 msgctxt "Qt-only" msgid "" "Context view metadata courtesy of Wikipedii i Last.fm" -#: gui/mainwindow.cpp:1149 +#: gui/mainwindow.cpp:1217 msgid "" "Please consider uploading your own music fan-art to FanArt.tv" @@ -2640,21 +2653,33 @@ "Proszę rozpatrzeć przesłanie własnych obrazów na FanArt.tv" -#: 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:1205 -msgid "Abort downloads and quit" -msgstr "Anuluj 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:1605 gui/mainwindow.cpp:1628 +msgid "Server Information" +msgstr "Informacje serwera" -#: gui/mainwindow.cpp:1521 +#: gui/mainwindow.cpp:1608 msgid "" "
    " +"pracy: " -#: gui/mainwindow.cpp:1532 +#: gui/mainwindow.cpp:1619 msgid "" "" +"align=\"right\">Aktualizacja: " -#: gui/mainwindow.cpp:1541 -msgid "Server Information" -msgstr "Informacje serwera" - -#: 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 "" -"%1 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 "" -"%1 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 %1 already exists!
    Add to that playlist?" -msgstr "Playlista o nazwie %1 już istnieje!
    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 "" "Connected to %1
    The entries below apply to the currently connected " "MPD collection.
    " @@ -2764,9 +2809,9 @@ "Połączono z %1
    Poniższe ustawienia dotyczą aktualnie połączonej " "kolekcji MPD.
    " -#. 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 "" "Not Connected!
    The entries below cannot be modified, as Cantata is " "not connected to MPD.
    " @@ -2774,32 +2819,32 @@ "Brak połączenia.
    Poniższe ustawienia nie mogą być modyfikowane, " "ponieważ Cantata nie jest połączona z MPD.
    " -#: gui/playbacksettings.cpp:169 +#: gui/playbacksettings.cpp:174 msgid "" -"

    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.

    The following ReplayGain settings may be used:" +"players.

    The following ReplayGain settings may be used:" "

    • None - No ReplayGain is applied.
    • Track - " "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's ReplayGain tags.
    • Auto - Volume will be adjusted using the track's ReplayGain " "tags if random play is activated, otherwise the album's tags will be used.

    " +"li>" msgstr "" -"

    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.

    Następujące ustawienia ReplayGain " -"mogą zostać użyte:

    " msgstr "" -"

    To ustawienie wpłynie na interfejst w następujący sposób:\n" -"

    " msgstr "" -#: widgets/coverwidget.cpp:89 +#: widgets/coverwidget.cpp:78 +msgid "" +msgstr "" + +#: widgets/coverwidget.cpp:80 msgid "" "" @@ -1435,53 +1438,52 @@ "" -#: 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 @@ 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 @@ 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 @@ #. 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 @@ 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 @@ 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 @@ #: 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 "ERROR: 'From Year' should be less than 'To Year'" msgstr "" "ОШИБКА: значение «с года» должно быть меньше значения «до года»" -#: dynamic/dynamicruledialog.cpp:221 +#: dynamic/dynamicruledialog.cpp:220 msgid "" "ERROR: Date range is too large (can only be a maximum of %1 " "years)" @@ -1807,77 +1811,68 @@ msgid "Dynamic Rules" msgstr "Динамические правила" -#: dynamic/dynamicrulesdialog.cpp:292 +#: dynamic/dynamicrulesdialog.cpp:295 +msgid "About dynamic rules" +msgstr "" + +#: dynamic/dynamicrulesdialog.cpp:297 msgid "" "

    Cantata will query your library using all of the rules listed. The list " "of Include rules will be used to build a set of songs that can be " "used. The list of Exclude rules will be used to build a set of songs " "that cannot be used. If there are no Include rules, Cantata will " -"assume that all songs (bar those from Exclude) can be used.
    e.g. " -"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', " -"you would need the following:

    • Include AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various Artists
    To have Cantata look " -"for 'Songs by Wibble but not from album Abc', you would need the following: " -"
    • Include AlbumArtist=Wibble
    • Exclude Album=Abc
    After " -"the set of usable songs has been created, Cantata will randomly select songs " -"to keep the play queue filled with 10 entries.

    " -msgstr "" -"

    Cantata будет опрашивать вашу библиотеку, используя все перечисленные " -"правила.Список правил Включить будет применяться для создания списка " -"песен, которыеможно использовать. Список правил Исключить будет " -"применяться для создания списка песен, которые нельзя использовать. Если " -"правил Включить не существует, Cantata будет использовать все песни " -"(включая песни из правил Исключить).
    То есть, если вам нужно " -"найти песни в стиле «Rock» исполнителя Петров ИЛИ нескольких исполнителей, " -"то правило будет таким:

    • Включить AlbumArtist=Петров Genre=Rock
    • Включить AlbumArtist=Несколько исполнителей
    Чтобы заставить " -"Cantata искать песни исполнителя Иванов, не входящие в альбом АБВ, вам " -"понадобится следующее правило:
    • Включить AlbumArtist=Иванов
    • Исключить Album=АБВ
    После того, как набор используемых песен " -"будет создан, Cantata сделает случайную подборку песен, чтобы в очереди на " -"воспроизведение было заполнено 10 позиций.

    " +"assume that all songs (bar those from Exclude) can be used.

    e." +"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various " +"Artists', you would need the following:

    • Include AlbumArtist=Wibble " +"Genre=Rock
    • Include AlbumArtist=Various Artists
    To have " +"Cantata look for 'Songs by Wibble but not from album Abc', you would need " +"the following:
    • Include AlbumArtist=Wibble
    • Exclude " +"AlbumArtist=Wibble Album=Abc
    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.

    " +msgstr "" -#: 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" -"Перезаписать?" -#: 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 @@ "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 "

    Delete all from the following?

      %1

    " -msgstr "

    Удалить всё из следующего?

      %1

    " +#: 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 @@ "%1\n" "%2 x %3 (%4)" -#: gui/coverdialog.cpp:126 +#: gui/coverdialog.cpp:129 msgctxt "" "name\n" "width x height" @@ -1966,71 +1961,70 @@ "%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 @@ #. 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 @@ 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 @@ "Художественное оформление контекстного вида (не забудьте выложить свой фан-" "арт на музыкальные темы на сайте 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 @@ "«Одиночный» режим: воспроизведение останавливается после текущей песни, или, " "в случае активного режима «Повтор», текущая песня повторяется" -#: 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 "" "Cantata %1

    MPD client.

    © 2011-2014 Craig " @@ -2581,7 +2527,7 @@ "Drummond
    Выходит на условиях лицензии
    GPLv3" -#: gui/mainwindow.cpp:1146 +#: gui/mainwindow.cpp:1214 msgid "" "Based upon QtMPC - © 2007-2010 " "The QtMPC Authors
    " @@ -2589,7 +2535,7 @@ "На базе QtMPC — ©авторы QtMPC, " "2007-2010
    " -#: gui/mainwindow.cpp:1147 +#: gui/mainwindow.cpp:1215 msgctxt "Qt-only" msgid "" "Context view backdrops courtesy of FanArt." @@ -2598,7 +2544,7 @@ "Художественное оформление контекстного вида предоставлено сайтом FanArt.tv" -#: gui/mainwindow.cpp:1148 +#: gui/mainwindow.cpp:1216 msgctxt "Qt-only" msgid "" "Context view metadata courtesy of Wikipedia и Last.fm." -#: gui/mainwindow.cpp:1149 +#: gui/mainwindow.cpp:1217 msgid "" "Please consider uploading your own music fan-art to FanArt.tv" @@ -2615,21 +2561,30 @@ "Вы можете выкладывать ваши творческие работы на темы музыкального фан-арта " "на сайт FanArt.tv" -#: 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 "" -"В настоящее время происходит загрузка подкастов\n" -"\n" -"Выход из программы отменит все загрузки." -#: gui/mainwindow.cpp:1205 -msgid "Abort downloads 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:1605 gui/mainwindow.cpp:1628 +msgid "Server Information" +msgstr "Сведения о сервере" -#: gui/mainwindow.cpp:1521 +#: gui/mainwindow.cpp:1608 msgid "" "
    " -#: gui/mainwindow.cpp:1532 +#: gui/mainwindow.cpp:1619 msgid "" "" -#: 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 "" -"%1 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 "" -"%1 используется для хранения любимых потоков, выберите другое имя." -#: gui/mainwindow.cpp:2013 -msgid "A playlist named %1 already exists!
    Add to that playlist?" -msgstr "Плейлист с именем %1 уже существует
    Добавить к нему?" +#: 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 "" "Connected to %1
    The entries below apply to the currently connected " "MPD collection.
    " @@ -2735,9 +2709,9 @@ "Подключено к %1
    Элементы ниже относятся к текущей подключённой " "коллекции MPD.
    " -#. 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 "" "Not Connected!
    The entries below cannot be modified, as Cantata is " "not connected to MPD.
    " @@ -2745,31 +2719,21 @@ "Не подключено.
    Элементы ниже нельзя изменять, т.к. Cantata не " "подключена к MPD.
    " -#: gui/playbacksettings.cpp:169 +#: gui/playbacksettings.cpp:174 msgid "" -"

    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.

    The following ReplayGain settings may be used:" +"players.

    The following ReplayGain settings may be used:" "

    • None - No ReplayGain is applied.
    • Track - " "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's ReplayGain tags.
    • Auto - Volume will be adjusted using the track's ReplayGain " "tags if random play is activated, otherwise the album's tags will be used.

    " +"li>" msgstr "" -"

    Replay Gain — это стандарт, предложенный в 2001 году для выравнивания " -"уровня громкости компьютерных аудио-форматов, таких, как MP3 и Ogg Vorbis. " -"Он функционирует на базе принципа трек/альбом, и на сегодня поддерживается " -"большим числом плееров.

    Для ReplayGain можно использовать следующие " -"настройки:

    • Нет — ReplayGain не используется
    • Трек — громкость будет настроена с использованием тегов ReplayGain данного " -"трека
    • Альбом — громкость будет настроена с использованием " -"тегов ReplayGain данного альбома
    • Авто — в случае случайного " -"режима воспроизведения громкость будет настроена с использованием тегов " -"ReplayGain данного трека, иначе — используются теги альбома.

    " -#: 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 "Переименовывать" @@ -2777,35 +2741,37 @@ 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 %1 already exists!
    Overwrite?" -msgstr "Плейлист с именем %1 уже существует.
    Перезаписать?" +#: 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[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 @@ #. 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 "" " This folder will also be used to locate music files for transferring to " "(and from) devices." @@ -3064,336 +3038,313 @@ " Эта папка также будет использоваться для хранения музыкальных файлов, " "переносимых с/на устройства." -#. 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?
    • Standard - " -"music collection may be shared, is on another machine, or is already setup
    • Basic - music collection is not shared with others, and Cantata will " -"configure and control the MPD instance
    " -msgstr "" -"К какому типу коллекции вы хотите подключиться?
    • Стандартный — " -"коллекцию можно сделать общим ресурсом, она находится на другой машине или " -"уже настроена
    • Базовый — коллекция не является общим ресурсом, и " -"Cantata настроит и будет управлятьэкземпляром MPD.
    " +"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 %1?" -msgstr "Удалить %1?" +#: 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 @@ msgid "Disc" msgstr "Диск" +#: models/playqueuemodel.cpp:178 +msgid "Rating" +msgstr "" + #: models/playqueuemodel.cpp:241 msgid "Undo" msgstr "Отменить" @@ -3423,85 +3378,81 @@ msgid "Album Artist" msgstr "Исполнитель альбома" -#: models/playqueuemodel.cpp:583 -msgid "(Priority: %1)" -msgstr "(Приоритет: %1)" - -#: 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 @@ "Сбой загрузки. 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 %1 to %2" msgstr "Сбой переименования %1 в %2" -#: mpd/mpdconnection.cpp:1410 +#: mpd/mpdconnection.cpp:1534 msgid "Failed to save %1" msgstr "Сбой сохранения %1" -#: 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 @@ 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 @@ "%2\n" "%3" -#: mpd/song.cpp:601 +#: mpd/song.cpp:683 msgctxt "Song on Album" msgid "%1 on %2" msgstr "" -#: mpd/song.cpp:602 +#: mpd/song.cpp:684 msgctxt "Song by Artist on Album" msgid "%1 by %2 on %3" msgstr "" @@ -3597,19 +3544,19 @@ 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 @@ #. 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 @@ 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 %1?" -msgstr "Отменить подписку для %1?" +#: 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 %1?" -msgstr "Обновить список эпизодов для %1?" - -#: 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 -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 "Удалить загруженные файлы выбранного эпизода подкаста?" -#: 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 @@ "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 @@ 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 @@ #. 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 @@ #. 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 @@ #. 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 @@ 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 "" -"NOTE: 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)." -msgstr "" -"ВНИМАНИЕ: Cantata не показывает страницы wikipedia полностью (с " -"изображениями, ссылками и т.п), показывается только усечённая версия. Эта " -"версия не всегда получается аккуратно на все 100%, поэтому, по умолчанию, " -"Cantata показывает только базовое введение для каждой статьи. Если выбрать " -"показ страницы полностью, то возможны ошибки обработки. Также будет " -"необходимо удалить любую текущую кешированную статью (на страничке «Кеш»)." +"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 @@ 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 "" -"NOTE: Connected to a Mopidy server (manual update required)." +#. 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 @@ #. 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 @@ 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 "" -"NOTE: These settings are only valid, and editable, when the device " -"is connected." +"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 "" -#. 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 @@ 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 "" -"NOTE: These settings are only editable when the device is not " -"connected." +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 "" -"NOTE: If you enter a password here, it will be stored " -"unencrypted in Cantata's config file. To have Cantata prompt for the " -"password before accessing the share, set the password to '-'" -msgstr "" -"ВНИМАНИЕ: введённый здесь пароль будет " -"хранитьсянезашифрованным в файле настроек Cantata. Для того, чтобы " -"Cantata запрашивала пароль перед доступом к общему ресурсу, укажите пароль " -"'-'" +"If you enter a password here, it will be stored unencrypted 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 "" -"NOTE: Due to the way sshfs works, a suitable ssh-askpass " -"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter " -"the password." -msgstr "" -"ВНИМАНИЕ: исходя из принципа работы sshfs, для ввода пароля вам " -"потребуется подходящее приложение на базе ssh-askpass (ksshaskpass, ssh-" -"askpass-gnome, и т.п.)." +"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 "" -"NOTE: 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 "" -"ВНИМАНИЕ: с помощью этого диалога можно добавить только удалённые " -"устройства (например, через Samba) или получить доступ к локально " -"смонтированным папкам. Для обычных медиа-плееров, подключённых по USB, " -"Cantata автоматически покажет устройство сразу после его подключения." +"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) @@ -4740,39 +4680,51 @@ 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 @@ #. 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 "" -"NOTE Only enter values for the tags you wish to be search on. " +#. 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 "" -"NOTE For genre, end string with an asterisk to match various " -"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +"For genre, end string with an asterisk to match various genres. e.g 'rock*' " +"matches 'Hard Rock' and 'Rock and Roll'." msgstr "" -"ВНИМАНИЕ Чтобы указать несколько жанров заканчивайте строку " -"астериском (знак «*»). Например, '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 "" -"NOTE: 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." +#. 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: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 "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/" -"Tracks')" +"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 "" "

    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.

    For more information on MPD itself, please refer to the " -"MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings required for " -"Cantata to function correctly.

    " +"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side " +"application for playing music.

    For more information on MPD itself, " +"please refer to the MPD website http://www.musicpd." +"org

    This 'wizard' will guide you through the basic settings " +"required for Cantata to function correctly.

    " msgstr "" -"

    Cantata — это многофункциональный и дружественный к " -"пользователю клиент Music Player Daemon (MPD). MPD — это фоновое приложение, " -"которое можно использовать для проигрывания музыки.

    За подробной " -"информацией по MPD обращайтесь на его официальный сайт: http://www.musicpd.org.

    Этот помощник проведёт вас по " -"базовым настройкам программы Cantata, необходимым для её правильной работы." #. 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 "

    Welcome to Cantata

    " msgstr "" "

    Добро пожаловать в программу Cantata!

    " #. 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 "" "

    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:

    " -msgstr "" -"

    Cantata — это многофункциональный и дружественный к " -"пользователю клиент Music Player Daemon (MPD). MPD — это фоновое приложение, " -"которое можно использовать для проигрывания музыки. MPD можно запускать как " -"общесистемно, так и отдельно для каждого пользователя. Выберите, как Cantata " -"должна подключаться к MPD при запуске:

    " +"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:

    " +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 "" "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 @@ #. 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 "" "Select this option if your music collection is not shared with others, " "and you wish Cantata to configure and control the MPD instance." @@ -4979,7 +4916,7 @@ #. 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 "" "

    For more information on MPD itself, please refer to " "the MPD website NOTE: 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." -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: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 "" -"NOTE: When using a local socket the full absolute path to the " -"socket needs to be set. (Port number is not required.)" +"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 "" "

    Cantata will download missing covers, and lyrics, from the internet.

    For each of these, please confirm whether you wish Cantata to store the " @@ -5075,55 +5009,32 @@ "folders.

    " msgstr "" -#. i18n: file: gui/initialsettingswizard.ui:772 -#. i18n: ectx: property (text), widget (QLabel, persNote) -#: po/rc.cpp:521 rc.cpp:521 -msgid "" -"NOTE: 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." -msgstr "" -"ВНИМАНИЕ: если Cantata настроена на сохранение обложек или текстов " -"песен в папке с музыкой, а у вас нет доступа на запись в эту папку, то в " -"этом случае Cantata будет сохранять файлы в вашей персональной папке для " -"кеша. Тем не менее, если речь идёт о потоках, то при отсутствии доступа на " -"запись, вы сможете только просматривать и проигрывать потоки, сохранённые в " -"папке с музыкой, но не добавлять их и не редактировать. Если вы не указывали " -"сохранять потоки в папку с музыкой, тогда они будут сохраняться вв вашей " -"локальной папке с настройками, и будут доступны только вам." - -#. 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 "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'." -"" +"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 "" -"NOTE: 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." +"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!

    Cantata's configuration dialog maybe " "used to customise Cantata's appearance, as well as to add extra MPD hosts, " @@ -5133,9 +5044,20 @@ "использовано для настройки внешнего вида 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 must 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 "" "Warning: 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 @@ #. 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 "" -"NOTE: 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." +"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 "" -"NOTE: 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." -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 "" -"NOTE: 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." -msgstr "" -"ПРИМЕЧАНИЕ:.. При поиске фотографий исполнителей, Cantata будет " -"искать или artist.jpg, artist.png, 'Artist'.jpg, или 'Artist'.png, \n" -" в папке текущего трека или в пределах своей родительской папки. Если " -"изображение не найдено, Cantata попытается загрузить его." +#. 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 "" "

    When adding artists, or albums to the playqueue, or editing tags, etc, " "then only use songs that pass the current Genre or string filter.

    e.g. " @@ -5419,39 +5374,33 @@ "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 "" "

    This will change Cantata's interface as detailed:\n" @@ -5459,163 +5408,160 @@ "be 'flickable'

  • To drag items, you will need to 'touch' the top-left " "corner
  • Scrollbars will only be a few pixels wide
  • Actions (e." "g. 'Add To Play Queue') will always be visible (not just when item is under " -"mouse)
  • Spin buttons with have + and - buttons at the side of the " +"mouse)
  • Spin buttons will have + and - buttons at the side of the " "text field
  • " 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 "" -"NOTE: Changing the 'Enforce single-click activation of items' " -"setting will require a re-start of Cantata." +"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 "" -"ВНИМАНИЕ: настройка «Принудительно включить выделение элементов по " -"одному щелчку» потребует перезапуска программы Cantata." -#. 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 "" -"NOTE: Changing the language setting will require a re-start of " -"Cantata." +"Changing the 'touch friendly' setting will require a re-start of Cantata." msgstr "" -"Примечание: При изменении языка потребуется перезапустить Cantata." -"" -#. 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 "" -"NOTE: Changing the 'touch friendly' setting will require a re-" -"start of Cantata." +"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 "" -"Примечание: Изменение параметра «дружественный интерфейс» требует " -"перезапуска Cantata." -#. 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 "" -"NOTE: 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." -msgstr "" -"ВНИМАНИЕ: если нажать и удерживать кнопку «стоп», то будет " -"показано меню, где можно выбрать, остановить ли воспроизведение сейчас или " -"после окончания текущей композиции." +"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 " 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 "" "

    Filename (without extension) to save downloaded covers as.
    If left " @@ -5630,154 +5576,138 @@ #. 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 -msgid "" -"NOTE: The 'Music folder' setting is used to lookup cover-art " -"(either the value specified above, or cover.jpg / cover.png 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 "" -"ВНИМАНИЕ: Настройка «папка с музыкой» используется для поиска " -"обложек (введите значение, указанное выше или cover.jpg / cover.png при пустом значении). Если у вас также есть рекурсивные права на " -"запись в эту папку, то Cantata будет сохранять все загружаемые обложки в " -"соответствующую папку альбома." - -#. i18n: file: gui/serversettings.ui:264 -#. i18n: ectx: property (text), widget (QLabel, streamUrlNoteLabel) -#: po/rc.cpp:841 rc.cpp:841 -msgid "" -"NOTE: '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 "" -"ВНИМАНИЕ: параметр «адрес потока HTTP» можно использовать, только " -"если вывод MPD настроен на HTTP-поток, и вам нужно, чтобы Cantata умела его " -"проигрывать." - -#. i18n: file: gui/serversettings.ui:343 -#. i18n: ectx: property (text), widget (StateLabel, basicMusicFolderNoteLabel) -#: po/rc.cpp:850 rc.cpp:850 -msgid "" -"NOTE: 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: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 cover.jpg / cover.png 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 "" -"NOTE: If no setting is specified for 'Cover filename, then Cantata " -"will use a default of cover " +"If no setting is specified for 'Cover filename, then Cantata will use a " +"default of cover" msgstr "" -"ВНИМАНИЕ: если значение для имени файла обложки не указано, то " -"Cantata будет использовать имя по умолчанию: cover " #. 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 "" -"NOTE: 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." -"

    \n" -"NOTE: If you choose 'Local loopback' for 'Network interface', then " -"MPD must also be on this computer.
    " -msgstr "" -"ВНИМАНИЕ: как правило, MPD проигрывает только песни, расположенные " -"в папках MPD. Для возможности проигрывания других файлов Cantata может " -"использовать свой мини-HTTP-сервер, но сервер работает только когда запущена " -"Cantata.

    \n" -"ВНИМАНИЕ: если в качестве сетевого интерфейса выбрана «локальная " -"петля», тогда MPD также должен присутствовать на данной машине.
    " +"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: network/proxysettings.ui:26 +#. 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 must " +"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
    NOTE: These settings apply to Digitally Imported, JazzRadio.com, " -"RockRadio.com, and Sky.fm
    " -msgstr "" -"ВНИМАНИЕ: Эти настройки применимы для 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 -msgid "" -"NOTE: 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 "" -"ВНИМАНИЕ: При выборе настроек учётной записи, под списком потоков " -"будет показан значок-индикатор авторизации ('DI'), изменяющийся в " -"зависимости от того, был ли выполнен вход или нет." +#. 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: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 "" -"NOTE: Built-in categories are shown in italic, and these cannot be " -"removed." +#. 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 "(Various)" +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 "" -"NOTE Multiple genres should be separated via a semicolon (e.g. " -"'Rock;Hard Rock')" +"Ratings are stored in an external database, and not in the song's " +"file." msgstr "" -"К сведению несколько жанров должны быть разделены через точку с " -"запятой (например 'Rock;Hard Rock')" #. 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 "juliette.tux@gmail.com" @@ -5977,7 +5914,7 @@ #: 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 @@ #: replaygain/rgdialog.cpp:261 msgid "" -"Scan all tracks?

    NOTE: All tracks have existing ReplyGain " -"tags." +"Scan all tracks?

    All tracks have existing ReplayGain tags." +"" msgstr "" -"Сканировать все треки?

    ВНИМАНИЕ: у всех треков уже есть " -"теги ReplyGain." #: replaygain/rgdialog.cpp:263 msgid "Do you wish to scan all tracks, or only tracks without existing tags?" @@ -6013,17 +5948,17 @@ 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 @@ 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 @@ 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 "" -"NOTE: 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." +"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 @@ 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 "ERROR: Invalid protocol" msgstr "ОШИБКА: недопустимый протокол" @@ -6233,39 +6168,39 @@ msgstr "" #: streams/streamproviderlistdialog.cpp:257 -msgid "Failed to install %1" +msgid "Failed to install '%1'" msgstr "" #: streams/streamproviderlistdialog.cpp:266 -msgid "Failed to download %1" +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 @@ 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 %1!" -msgstr "Сбой создания %1" +#: streams/streamspage.cpp:249 +msgid "Failed to create '%1'!" +msgstr "" + +#: streams/streamspage.cpp:266 streams/streamspage.cpp:447 +msgid "Stream '%1' already exists!" +msgstr "" -#: streams/streamspage.cpp:254 streams/streamspage.cpp:435 -msgid "Stream already exists!
    %1" -msgstr "Поток уже существует:
    %1" - -#: streams/streamspage.cpp:256 streams/streamspage.cpp:437 -msgid "A stream named %1 already exists!" -msgstr "Поток с именем %1 уже существует." +#: 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 %1 streams?" -msgstr "Обновить %1 потоков?" - -#: streams/streamspage.cpp:362 -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 %1 bookmarks?" -msgstr "Точно удалить все %1 закладок?" +#: streams/streamspage.cpp:356 +msgid "Reload '%1' streams?" +msgstr "" + +#: streams/streamspage.cpp:374 +msgid "Are you sure you wish to remove bookmark to '%1'?" +msgstr "" + +#: 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 %1?" -msgstr "Точно удалить %1?" +#: 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 %1 already exists!
    Overwrite?" -msgstr "Категория %1 уже существует.
    Перезаписать?" +#: 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 @@ 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 @@ 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[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 all tracks?" msgstr "" "Применить обходное решение «несколько исполнителей» для всех треков?" -#: tags/tageditor.cpp:499 +#: tags/tageditor.cpp:528 +msgid "" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" +msgstr "" +"Эта настройка установит значения «Исполнитель альбома» и «Исполнитель» на " +"«Несколько исполнителей» и значение «Название» на \"TrackArtist - TrackTitle" +"\"" + +#: tags/tageditor.cpp:567 msgid "Revert \"Various Artists\" workaround on all tracks?" msgstr "" "Откатить обходное решение «несколько исполнителей» для всех треков?" -#: tags/tageditor.cpp:549 +#: tags/tageditor.cpp:568 +msgid "Revert \"Various Artists\" workaround" +msgstr "Откатить обходное решение «несколько исполнителей»" + +#: tags/tageditor.cpp:570 +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.

    If 'Title' " +"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " +"will be set to \"Wobble\"
    " +msgstr "" +"Там, где значение «Исполнитель альбома» равно значению «Исполнитель», и " +"название имеет формат \"TrackArtist - TrackTitle\", значение «Исполнитель» " +"будет получаться из «Названия», а само значение «Название» будет равно " +"названию композиции, т.е.

    Скажем, если «Название» имеет формат " +"\"Wibble - Wobble\", тогда «Исполнитель» будет иметь значение «Wibble», а " +"«Название» — «Wobble»
    " + +#: tags/tageditor.cpp:617 msgid "" "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for all " "tracks?" @@ -6556,74 +6552,153 @@ "Установить значение «Исполнитель альбома» из значения «Исполнитель» (при " "пустом значении «Исполнитель альбома») для всех треков?" -#: 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 all tracks?" +"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of " +"all 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!
    %1" -msgstr "Исходный файл не существует.
    %1" - -#: tags/trackorganiser.cpp:297 -msgid "Destination file already exists!
    %1" -msgstr "Конечный файл уже существует
    %1" - -#: tags/trackorganiser.cpp:319 -msgid "Failed to create destination folder!
    %1" -msgstr "Сбой создания папки назначения.
    %1" - -#: tags/trackorganiser.cpp:340 -msgid "Failed to rename %1 to %2" -msgstr "Сбой переименования %1 в %2" +#: tags/trackorganiser.cpp:280 +msgid "Source file does not exist!" +msgstr "" + +#: tags/trackorganiser.cpp:299 +msgid "Destination file already exists!" +msgstr "" + +#: tags/trackorganiser.cpp:321 +msgid "Failed to create destination folder!" +msgstr "" + +#: 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 "

    " msgstr "" -#: widgets/coverwidget.cpp:89 +#: widgets/coverwidget.cpp:78 +msgid "" +msgstr "" + +#: widgets/coverwidget.cpp:80 msgid "" "" 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 @@ 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 @@ 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 @@ #. 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 @@ 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 @@ 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 @@ #: 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 "ERROR: 'From Year' should be less than 'To Year'" msgstr "错误: 原有的年份应在更改后的年份之前" -#: dynamic/dynamicruledialog.cpp:221 +#: dynamic/dynamicruledialog.cpp:220 msgid "" "ERROR: Date range is too large (can only be a maximum of %1 " "years)" @@ -1652,63 +1677,68 @@ msgid "Dynamic Rules" msgstr "动态规则" -#: dynamic/dynamicrulesdialog.cpp:292 +#: dynamic/dynamicrulesdialog.cpp:295 +msgid "About dynamic rules" +msgstr "" + +#: dynamic/dynamicrulesdialog.cpp:297 msgid "" "

    Cantata will query your library using all of the rules listed. The list " "of Include rules will be used to build a set of songs that can be " "used. The list of Exclude rules will be used to build a set of songs " "that cannot be used. If there are no Include rules, Cantata will " -"assume that all songs (bar those from Exclude) can be used.
    e.g. " -"to have Cantata look for 'Rock songs by Wibble OR songs by Various Artists', " -"you would need the following:

    • Include AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various Artists
    To have Cantata look " -"for 'Songs by Wibble but not from album Abc', you would need the following: " -"
    • Include AlbumArtist=Wibble
    • Exclude Album=Abc
    After " -"the set of usable songs has been created, Cantata will randomly select songs " -"to keep the play queue filled with 10 entries.

    " +"assume that all songs (bar those from Exclude) can be used.

    e." +"g. to have Cantata look for 'Rock songs by Wibble OR songs by Various " +"Artists', you would need the following:

    • Include AlbumArtist=Wibble " +"Genre=Rock
    • Include AlbumArtist=Various Artists
    To have " +"Cantata look for 'Songs by Wibble but not from album Abc', you would need " +"the following:
    • Include AlbumArtist=Wibble
    • Exclude " +"AlbumArtist=Wibble Album=Abc
    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.

    " msgstr "" -#: 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" -"覆盖吗?" -#: 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 @@ "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 "

    Delete all from the following?

      %1

    " -msgstr "

    删除下面所有的项目吗?

      %1

    " +#: 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 @@ "%1\n" "%2 x %3 (%4)" -#: gui/coverdialog.cpp:126 +#: gui/coverdialog.cpp:129 msgctxt "" "name\n" "width x height" @@ -1797,69 +1827,68 @@ "%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 @@ #. 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 @@ 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: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 "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 "" "Cantata %1

    MPD client.

    © 2011-2014 Craig " @@ -2402,44 +2383,56 @@ "html\">GPLv3
    " msgstr "" -#: gui/mainwindow.cpp:1146 +#: gui/mainwindow.cpp:1214 msgid "" "Based upon QtMPC - © 2007-2010 " "The QtMPC Authors
    " msgstr "" -#: gui/mainwindow.cpp:1147 +#: gui/mainwindow.cpp:1215 msgctxt "Qt-only" msgid "" "Context view backdrops courtesy of FanArt." "tv" msgstr "" -#: gui/mainwindow.cpp:1148 +#: gui/mainwindow.cpp:1216 msgctxt "Qt-only" msgid "" "Context view metadata courtesy of Wikipedia and Last.fm" msgstr "" -#: gui/mainwindow.cpp:1149 +#: gui/mainwindow.cpp:1217 msgid "" "Please consider uploading your own music fan-art to FanArt.tv" 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:1205 -msgid "Abort downloads and quit" +#: gui/mainwindow.cpp:1381 gui/mainwindow.cpp:1392 +msgid "Enabled: %1" msgstr "" -#: gui/mainwindow.cpp:1521 +#: 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 "" "
    " msgstr "" -#: gui/mainwindow.cpp:1532 +#: gui/mainwindow.cpp:1619 msgid "" "" 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 "" -"%1 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 %1 already exists!
    Add to that playlist?" -msgstr "已经有名为 %1的播放列表!
    添加到它吗?" +#: 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 "" "Connected to %1
    The entries below apply to the currently connected " "MPD collection.
    " 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 "" "Not Connected!
    The entries below cannot be modified, as Cantata is " "not connected to MPD.
    " msgstr "" -#: gui/playbacksettings.cpp:169 +#: gui/playbacksettings.cpp:174 msgid "" -"

    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.

    The following ReplayGain settings may be used:" +"players.

    The following ReplayGain settings may be used:" "

    • None - No ReplayGain is applied.
    • Track - " "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's ReplayGain tags.
    • Auto - Volume will be adjusted using the track's ReplayGain " "tags if random play is activated, otherwise the album's tags will be used.

    " +"li>" 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 @@ 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 %1 already exists!
    Overwrite?" -msgstr "已经有名为 %1的播放列表!

    覆盖吗?" +#: 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_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 @@ #. 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 "" " This folder will also be used to locate music files for transferring to " "(and from) devices." 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?
    • Standard - " -"music collection may be shared, is on another machine, or is already setup
    • Basic - music collection is not shared with others, and Cantata will " -"configure and control the MPD instance
    " +"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 %1?" +#: 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 @@ msgid "Disc" msgstr "碟片" +#: models/playqueuemodel.cpp:178 +msgid "Rating" +msgstr "" + #: models/playqueuemodel.cpp:241 msgid "Undo" msgstr "" @@ -3168,111 +3180,107 @@ msgid "Album Artist" msgstr "专辑艺术家" -#: models/playqueuemodel.cpp:583 -msgid "(Priority: %1)" -msgstr "(属性: %1)" - -#: 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 %1 to %2" msgstr "%1 重命名为 %2 失败" -#: mpd/mpdconnection.cpp:1410 +#: mpd/mpdconnection.cpp:1534 msgid "Failed to save %1" msgstr "%1 保存失败" -#: 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 @@ 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 @@ "%2\n" "%3" -#: mpd/song.cpp:601 +#: mpd/song.cpp:683 msgctxt "Song on Album" msgid "%1 on %2" msgstr "" -#: mpd/song.cpp:602 +#: mpd/song.cpp:684 msgctxt "Song by Artist on Album" msgid "%1 by %2 on %3" msgstr "" @@ -3340,19 +3344,19 @@ 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 @@ #. 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 @@ 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 %1?" +#: 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 %1?" +#: 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 @@ 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 @@ #. 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 @@ #. 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 @@ #. 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 @@ 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 "" -"NOTE: 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)." +"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 @@ 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 "" -"NOTE: Connected to a Mopidy server (manual update required)." +#. 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 @@ #. 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 @@ 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 "" -"NOTE: These settings are only valid, and editable, when the device " -"is connected." +"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 @@ 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 "" -"NOTE: These settings are only editable when the device is not " -"connected." +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 "" -"NOTE: If you enter a password here, it will be stored " -"unencrypted in Cantata's config file. To have Cantata prompt for the " -"password before accessing the share, set the password to '-'" +"If you enter a password here, it will be stored unencrypted 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 "" -"NOTE: Due to the way sshfs works, a suitable ssh-askpass " -"application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to enter " -"the password." +"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 "" -"NOTE: 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." +"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 @@ 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 @@ #. 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 "" -"NOTE Only enter values for the tags you wish to be search on. " -msgstr "注意 输入你所需要搜索的标签。 " +#. 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 "" -"NOTE For genre, end string with an asterisk to match various " -"genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +"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 -msgid "" -"NOTE: 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." +#. 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: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 "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. (i.e. 'Artist/Album/" -"Tracks')" +"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 "" "

    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.

    For more information on MPD itself, please refer to the " -"MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings required for " -"Cantata to function correctly.

    " +"Music Player Daemon (MPD). MPD is a flexible, powerful, server-side " +"application for playing music.

    For more information on MPD itself, " +"please refer to the MPD website http://www.musicpd." +"org

    This 'wizard' will guide you through the basic settings " +"required for Cantata to function correctly.

    " 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 "

    Welcome to Cantata

    " 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 "" "

    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:

    " +"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:

    " 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 "" "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 @@ #. 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 "" "Select this option if your music collection is not shared with others, " "and you wish Cantata to configure and control the MPD instance." @@ -4666,7 +4700,7 @@ #. 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 "" "

    For more information on MPD itself, please refer to " "the MPD website NOTE: 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." -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: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 "" -"NOTE: When using a local socket the full absolute path to the " -"socket needs to be set. (Port number is not required.)" +"When using a local socket the full absolute path to the socket needs to be " +"set. (Port number is not required.)" msgstr "" -"注意: 使用本地 Socket 时请输入完整路径。 (端口号可以省略)." -#. 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 "" "

    Cantata will download missing covers, and lyrics, from the internet.

    For each of these, please confirm whether you wish Cantata to store the " @@ -4753,56 +4785,52 @@ "folders.

    " msgstr "" -#. i18n: file: gui/initialsettingswizard.ui:772 -#. i18n: ectx: property (text), widget (QLabel, persNote) -#: po/rc.cpp:521 rc.cpp:521 -msgid "" -"NOTE: 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." -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 "" -"NOTE: Cantata can only save backdrops and artist images within the " -"music folder hierarchy if this is 2 levels deep. i.e. 'Artist/Album/Tracks'." -"" +"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 "" -"NOTE: 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." +"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!

    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 must 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 "" "Warning: 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 @@ #. 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 "" -"NOTE: 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." +"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 "" -"NOTE: 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." -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 "" -"NOTE: 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." +#. 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 "" "

    When adding artists, or albums to the playqueue, or editing tags, etc, " "then only use songs that pass the current Genre or string filter.

    e.g. " @@ -5073,39 +5138,33 @@ "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 "" "

    This will change Cantata's interface as detailed:\n" @@ -5113,155 +5172,160 @@ "be 'flickable'

  • To drag items, you will need to 'touch' the top-left " "corner
  • Scrollbars will only be a few pixels wide
  • Actions (e." "g. 'Add To Play Queue') will always be visible (not just when item is under " -"mouse)
  • Spin buttons with have + and - buttons at the side of the " +"mouse)
  • Spin buttons will have + and - buttons at the side of the " "text field
  • " 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 "" -"NOTE: Changing the 'Enforce single-click activation of items' " -"setting will require a re-start of Cantata." +"Changing the 'Enforce single-click activation of items' setting will require " +"a re-start of Cantata." msgstr "" -"注意: 启用\"强制使用单击激活项目\"后必须重新启动 Cantata。" -#. 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 "" -"NOTE: Changing the language setting will require a re-start of " -"Cantata." +"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 "" -"NOTE: Changing the 'touch friendly' setting will require a re-" -"start of Cantata." +"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 "" -"NOTE: 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." +"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 "" "

    Filename (without extension) to save downloaded covers as.
    If left " @@ -5272,138 +5336,138 @@ #. 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 "" -"NOTE: The 'Music folder' setting is used to lookup cover-art " -"(either the value specified above, or cover.jpg / cover.png 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." +"The 'Music folder' setting is used to lookup cover-art (either the value " +"specified above, or cover.jpg / cover.png 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 "" -"注意: '音乐文件夹' 将被用来查找专辑封面 (如果未指定值,默认使用 " -"cover.jpg/cover.png). 如果有文件夹及子文件的写入权限,Cantata 将" -"自动下载专辑封面到专辑文件夹" -#. 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 "" -"NOTE: '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." +"'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 "" -"NOTE: 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." +"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 "" -"NOTE: If no setting is specified for 'Cover filename, then Cantata " -"will use a default of cover " +"If no setting is specified for 'Cover filename, then Cantata will use a " +"default of cover" 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 "" +"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 "" -"NOTE: 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." -"

    \n" -"NOTE: If you choose 'Local loopback' for 'Network interface', then " -"MPD must also be on this computer.
    " +"If you choose 'Local loopback' for 'Network interface', then MPD must " +"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
    NOTE: These settings apply to Digitally Imported, JazzRadio.com, " -"RockRadio.com, and Sky.fm
    " +"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 "" -"NOTE: 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" +"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 "" -"NOTE: Built-in categories are shown in italic, and these cannot be " -"removed." +#. 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 "(Various)" +msgstr "" + +#. i18n: file: tags/tageditor.ui:210 +#. i18n: ectx: property (text), widget (PlainNoteLabel, label_7x) +#: po/rc.cpp:1029 rc.cpp:1029 msgid "" -"NOTE Multiple genres should be separated via a semicolon (e.g. " -"'Rock;Hard Rock')" +"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 not 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 @@ #: 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 @@ #: replaygain/rgdialog.cpp:261 msgid "" -"Scan all tracks?

    NOTE: All tracks have existing ReplyGain " -"tags." +"Scan all tracks?

    All tracks have existing ReplayGain tags." +"" msgstr "" #: replaygain/rgdialog.cpp:263 @@ -5624,17 +5704,17 @@ 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 @@ 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 @@ 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 "" -"NOTE: 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." +"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 @@ 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 "ERROR: Invalid protocol" msgstr "错误:协议无效" @@ -5843,39 +5923,39 @@ msgstr "" #: streams/streamproviderlistdialog.cpp:257 -msgid "Failed to install %1" +msgid "Failed to install '%1'" msgstr "" #: streams/streamproviderlistdialog.cpp:266 -msgid "Failed to download %1" +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 @@ 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 %1!" -msgstr "%1 创建失败!" +#: streams/streamspage.cpp:249 +msgid "Failed to create '%1'!" +msgstr "" + +#: streams/streamspage.cpp:266 streams/streamspage.cpp:447 +msgid "Stream '%1' already exists!" +msgstr "" -#: streams/streamspage.cpp:254 streams/streamspage.cpp:435 -msgid "Stream already exists!
    %1" -msgstr "流媒体已经存在!
    %1" - -#: streams/streamspage.cpp:256 streams/streamspage.cpp:437 -msgid "A stream named %1 already exists!" -msgstr "已经有名为 %1 的流媒体!" +#: 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 %1 streams?" +#: streams/streamspage.cpp:356 +msgid "Reload '%1' streams?" msgstr "" -#: streams/streamspage.cpp:362 -msgid "Are you sure you wish to remove bookmark to %1?" +#: 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 %1 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 %1?" -msgstr "确定要移除 %1 ?" +#: 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 %1 already exists!
    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 @@ 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 @@ 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 all tracks?" msgstr "应用\"多个艺术家\" 环境到 所有 音轨?" -#: tags/tageditor.cpp:499 +#: tags/tageditor.cpp:528 +msgid "" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" +msgstr "" +"'专辑艺人' 和 '艺术家'将被设置成 '多个艺术家','标题'将被设置为'音轨艺人 " +"- 音轨标题'。" + +#: tags/tageditor.cpp:567 msgid "Revert \"Various Artists\" workaround on all tracks?" msgstr "确定恢复 \"多个艺术家\" 环境到 所有音轨?" -#: tags/tageditor.cpp:549 +#: tags/tageditor.cpp:568 +msgid "Revert \"Various Artists\" workaround" +msgstr "恢复 \"多个艺术家\" 环境" + +#: tags/tageditor.cpp:570 +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.

    If 'Title' " +"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " +"will be set to \"Wobble\"
    " +msgstr "" + +#: tags/tageditor.cpp:617 msgid "" "Set 'Album Artist' from 'Artist' (if 'Album Artist' is empty) for all " "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 all tracks?" -msgstr "所有音轨的'标题', '艺术家', '专辑艺术家', '专辑' 的首字母大写?" +"Capitalize the first letter of text fields (e.g. 'Title', 'Artist', etc) of " +"all 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!
    %1" +#: tags/trackorganiser.cpp:280 +msgid "Source file does not exist!" msgstr "" -#: tags/trackorganiser.cpp:297 -msgid "Destination file already exists!
    %1" -msgstr "目标文件已存在!
    %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!
    %1" -msgstr "文件夹
    %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 "

    " msgstr "" -#: widgets/coverwidget.cpp:89 +#: widgets/coverwidget.cpp:78 +msgid "" +msgstr "" + +#: widgets/coverwidget.cpp:80 msgid "" "
    Server
    Protocol: %1.%2.%3
    Uptime: %4
    VariableButtonDescription
    Server
    Protocol: %1.%2.%3
    Uptime:" @@ -2409,7 +2423,7 @@ "tr>
    Tags: %7
    Database
    Artists: %1
    Albums: Updated: %5
    Composer:%1
    Performer:%1
    Artist:%1
    Album:%2
    Year:" @@ -6199,7 +6440,7 @@ msgid "All Genres" msgstr "" -#: widgets/itemview.cpp:628 +#: widgets/itemview.cpp:681 msgid "Go Back" msgstr "" @@ -6207,15 +6448,19 @@ msgid "Menu" msgstr "" -#: widgets/playqueueview.cpp:300 +#: widgets/notelabel.cpp:67 +msgid "NOTE: %1" +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 @@ #: widgets/songdialog.cpp:49 msgid "" -"

    Cannot access song files!

    Please check Cantata's \"Music folder" -"\" setting, and MPD's \"music_directory\" setting.

    " +"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 "" -"

    Cannot access song files!

    Please check that the device is still " -"attached.

    " +"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 -Nru cantata-1.4.2.ds1/po/cs.po cantata-1.5.2.ds2/po/cs.po --- cantata-1.4.2.ds1/po/cs.po 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/po/cs.po 2015-03-23 20:09:39.000000000 +0000 @@ -6,9 +6,9 @@ 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 \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 \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" @@ -23,10 +23,10 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ #. 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 @@ 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 @@ 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 @@ "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 @@ 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 @@ #. 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 @@ msgid "Songs To Be Copied" msgstr "Písně ke zkopírování" -#: devices/actiondialog.cpp:153 +#: devices/actiondialog.cpp:151 msgid "INVALID" msgstr "NEPLATNÝ" -#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170 +#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168 msgid "(When different)" msgstr "(Když jiný)" -#: 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 @@ "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 "" -"

    You have not configured the destination device.
    Continue with the " -"default settings?

    " +"You have not configured the destination device.\n" +"\n" +"Continue with the default settings?" msgstr "" -"

    Nenastavil jste cílové zařízení.
    Pokračovat s výchozím nastavením?

    " +"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 "" -"

    You have not configured the source device.
    Continue with the default " -"settings?

    " +"You have not configured the source device.\n" +"\n" +"Continue with the default settings?" msgstr "" -"

    Nenastavil jste zdrojové zařízení.
    Pokračovat s výchozím nastavením?" +"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!
    Please check you have sufficient " "permissions." @@ -620,31 +649,31 @@ "Nepodařilo se vytvořit cílovou složku!
    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.
    (Required for transcoding to MTP " "devices.)" @@ -652,169 +681,171 @@ "Nepodařilo se vytvořit dočasný soubor.
    (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 "" -"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " -"'Title' to \"TrackArtist - TrackTitle\"" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" msgstr "" -"Toto nastaví Umělce alba a Umělce na Různí umělci, a nastaví Název na " -"\"Umělec skladby - Název skladby\"" +"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 "" -"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.

    If 'Title' " -"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " -"will be set to \"Wobble\"
    " +"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 "" -"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ř.

    Pokud je Název \"Wibble - Wobble\", " -"pak Umělec se nastaví na \"Wibble\" a Název na \"Wobble\"
    " +"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 @@ #. 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 @@ 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 "" -"

    Which type of refresh do you wish to perform?

    • Partial - Only new " -"songs are scanned (quick)
    • Full - All songs are rescanned " -"(slow)

    " -msgstr "" -"

    Jaký typ aktualizace chcete provést?

    • Částečný - Jsou prohledány " -"pouze nové písně (rychlé)
    • Úplný - Jsou prohledány všechny " -"písně (pomalé)

    " +#: 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 %1?" -msgstr "Opravdu chcete zapomenout na %1?" - -#: devices/devicespage.cpp:544 -msgid "Are you sure you wish to eject Audio CD %1 - %2?" -msgstr "Opravdu chcete vysunout zvukové CD %1 - %2?" +#: devices/devicespage.cpp:521 +msgid "Are you sure you wish to forget '%1'?" +msgstr "Opravdu chcete zapomenout na '%1'?" + +#: 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 %1?" -msgstr "Opravdu chcete odpojit %1?" +#: 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 @@ "přenosném přehrávači.
    Cokoli pod 120 kb/s může být hudebně " "neuspokojivé a cokoli nad 205 kb/s 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 @@ "
    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 @@ #: devices/filenameschemedialog.cpp:121 msgid "" -"

    The following variables will be replaced with their corresponding meaning " -"for each track name.

    " +"The following variables will be replaced with their corresponding meaning " +"for each track name." msgstr "" -"

    Následující proměnné budou nahrazeny jejich odpovídajícím významem pro " -"každý název skladby.

    " +"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 "" "
    VariableButtonDescription
    ProměnnáTlačítkoPopis
    Server
    Protocol: %1.%2.%3
    Uptime:" @@ -2650,12 +2672,11 @@ msgstr "" "
    Server
    Protokol: %1.%2.%3
    Doba " -"provozu:" -" %4
    Přehrává se: " -"%5
    Ovladače: %6
    Značky: %7
    %4
    Přehrává se: " +"%5
    Ovladače: %6
    Značky: %7
    Database
    Artists: %1
    Albums: Umělci: %1
    Alba: %2
    Písně: %3
    Doba trvání: %4
    Obnoveno: %5
    %5
    Composer:%1
    Skladatel:%1
    Performer:%1
    Účinkující:%1
    Artist:%1
    Album:%2
    Year:" @@ -6698,7 +6935,7 @@ 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 @@ msgid "Menu" msgstr "Nabídka" -#: widgets/playqueueview.cpp:300 +#: widgets/notelabel.cpp:67 +msgid "NOTE: %1" +msgstr "POZNÁMKA: %1" + +#: 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 @@ #: widgets/songdialog.cpp:49 msgid "" -"

    Cannot access song files!

    Please check Cantata's \"Music folder" -"\" setting, and MPD's \"music_directory\" setting.

    " +"Cannot access song files!\n" +"\n" +"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory" +"\" setting." msgstr "" -"

    Nelze přistupovat k souborům s písněmi!

    Prověřte, prosím, " -"nastavení složky s hudbou Cantaty a nastavení adresáře s hudbou MPD " -"(music_directory).

    " +"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 "" -"

    Cannot access song files!

    Please check that the device is still " -"attached.

    " +"Cannot access song files!\n" +"\n" +"Please check that the device is still attached." msgstr "" -"

    Nelze přistupovat k souborům s písněmi!

    Prověřte, prosím, že " -"zařízení je stále ještě připojeno.

    " +"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 @@ 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 "" +#~ "

    You have not configured the destination device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    Nenastavil jste cílové zařízení.
    Pokračovat s výchozím nastavením?" +#~ "

    " + +#~ msgid "" +#~ "

    You have not configured the source device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    Nenastavil jste zdrojové zařízení.
    Pokračovat s výchozím " +#~ "nastavením?

    " + +#~ 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 "" +#~ "

    Which type of refresh do you wish to perform?

    • Partial - Only " +#~ "new songs are scanned (quick)
    • Full - All songs are " +#~ "rescanned (slow)

    " +#~ msgstr "" +#~ "

    Jaký typ aktualizace chcete provést?

    • Částečný - Jsou prohledány " +#~ "pouze nové písně (rychlé)
    • Úplný - Jsou prohledány všechny " +#~ "písně (pomalé)

    " + +#~ 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 %1?" +#~ msgstr "Opravdu chcete zapomenout na %1?" + +#~ msgid "Are you sure you wish to eject Audio CD %1 - %2?" +#~ msgstr "Opravdu chcete vysunout zvukové CD %1 - %2?" + +#~ msgid "Are you sure you wish to disconnect %1?" +#~ msgstr "Opravdu chcete odpojit %1?" + +#~ msgid "" +#~ "

    The following variables will be replaced with their corresponding " +#~ "meaning for each track name.

    " +#~ msgstr "" +#~ "

    Následující proměnné budou nahrazeny jejich odpovídajícím významem pro " +#~ "každý název skladby.

    " + +#~ 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 "" +#~ "

    Cantata will query your library using all of the rules listed. The " +#~ "list of Include rules will be used to build a set of songs that " +#~ "can be used. The list of Exclude rules will be used to build a set " +#~ "of songs that cannot be used. If there are no Include rules, " +#~ "Cantata will assume that all songs (bar those from Exclude) can be " +#~ "used.
    e.g. to have Cantata look for 'Rock songs by Wibble OR songs " +#~ "by Various Artists', you would need the following:

    • Include " +#~ "AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various " +#~ "Artists
    To have Cantata look for 'Songs by Wibble but not from " +#~ "album Abc', you would need the following:
    • Include " +#~ "AlbumArtist=Wibble
    • Exclude Album=Abc
    After the set of " +#~ "usable songs has been created, Cantata will randomly select songs to keep " +#~ "the play queue filled with 10 entries.

    " +#~ msgstr "" +#~ "

    Cantata se dotáže vaší knihovny za použití všech v seznamu uvedených " +#~ "pravidel. Seznam pravidel Zahrnout se použije na sestavení souboru " +#~ "písní, které se mohou použít. Seznam pravidel Vyloučit se použije " +#~ "na sestavení souboru písní, které se použít nemohou. Pokud nejsou žádná " +#~ "pravidla Zahrnout, Cantata bude předpokládat, že se mohou použít " +#~ "všechny písně (nepřipouštět ta z Vyloučit).
    např. aby Cantata " +#~ "hledala 'Rock songs od Wibble NEBO písně od Různí umělci, budete " +#~ "potřebovat následující:

    • Zahrnout Umělec alba=Wibble Žánr=Rock
    • Zahrnout Umělec alba=Různí umělci
    . Aby Cantata hledala " +#~ "'Písně od Wibble, ale ne z alba Abc', budete potřebovat následující: " +#~ "
    • Zahrnout Umělec alba=Wibble
    • Vyloučit Album=Abc
    • 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." + +#~ msgid "" +#~ "A set of rules named '%1' already exists!\n" +#~ "Overwrite?" +#~ msgstr "" +#~ "Seznam pravidel pojmenovaný '%1' již existuje!\n" +#~ "Přepsat?" + +#~ msgid "

      Delete all from the following?

        %1

      " +#~ msgstr "

      Smazat vše z následujícího?

        %1

      " + +#~ 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 "" +#~ "%1 is used to store favorite streams, please choose another name." +#~ msgstr "" +#~ "%1 se používá na ukládání oblíbených proudů. Vyberte, prosím, jiný " +#~ "název." + +#~ msgid "A playlist named %1 already exists!
      Add to that playlist?" +#~ msgstr "" +#~ "Seznam skladeb pojmenovaný %1 již existuje!
      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 "" +#~ "

      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.

      The following ReplayGain settings may be used:" +#~ "

      • None - No ReplayGain is applied.
      • Track - " +#~ "Volume will be adjusted using the track's ReplayGain tags.
      • Album - Volume will be adjusted using the albums's " +#~ "ReplayGain tags.
      • Auto - Volume will be adjusted using the " +#~ "track's ReplayGain tags if random play is activated, otherwise the " +#~ "album's tags will be used.

      " +#~ msgstr "" +#~ "

      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čů.

      Je možné použít " +#~ "následující nastavení vyrovnání hlasitosti:

      • Žádné - Není " +#~ "použito žádné vyrovnání hlasitosti.
      • Skladba - Hlasitost je " +#~ "upravena za použití značek pro vyrovnání hlasitosti u skladby.
      • Album - Hlasitost je upravena za použití značek pro " +#~ "vyrovnání hlasitosti u alba.
      • Automaticky - 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.
      • " + +#~ 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 %1 already exists!
        Overwrite?" +#~ msgstr "Seznam skladeb pojmenovaný %1 již existuje!
        Přepsat?" + +#~ msgid "" +#~ "Which type of collection do you wish to connect to?
        • Standard " +#~ "- music collection may be shared, is on another machine, or is already " +#~ "setup
        • 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?
        • Obvyklý - hudební sbírku " +#~ "může být sdílena, je na jiném stroji, nebo je již nastavena
        • Základní - hudební sbírka není sdílena s ostatními, a Cantata " +#~ "nastaví a bude řídit instanci MPD
        " + +#~ msgid "Delete %1?" +#~ msgstr "Smazat %1?" + +#~ 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 "(Priority: %1)" +#~ msgstr "(Přednost: %1)" + +#~ msgid "Unsubscribe from %1?" +#~ msgstr "Odhlásit odběr z %1?" + +#~ msgid "Refresh episode listing from %1?" +#~ msgstr "Obnovit soupis dílů z %1?" + +#~ 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 "" +#~ "NOTE: 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)." +#~ msgstr "" +#~ "POZNÁMKA: 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ěť)." + +#~ msgid "" +#~ "NOTE: Connected to a Mopidy server (manual update required)." +#~ msgstr "" +#~ "POZNÁMKA: Připojeno k serveru Mopidy (vyžadována ruční " +#~ "aktualizace)." + +#~ msgid "" +#~ "NOTE: These settings are only valid, and editable, when the " +#~ "device is connected." +#~ msgstr "" +#~ "POZNÁMKA: Tato nastavení jsou platná, a upravitelná, jen když " +#~ "je zařízení připojeno." + +#~ msgid "Ignore 'The' in artist names" +#~ msgstr "Nevšímat si The ve jménech umělců" + +#~ msgid "" +#~ "NOTE: These settings are only editable when the device is not " +#~ "connected." +#~ msgstr "" +#~ "POZNÁMKA: Tato nastavení jsou upravitelná, jen když není " +#~ "zařízení připojeno." + +#~ msgid "" +#~ "NOTE: If you enter a password here, it will be stored " +#~ "unencrypted in Cantata's config file. To have Cantata prompt for " +#~ "the password before accessing the share, set the password to '-'" +#~ msgstr "" +#~ "POZNÁMKA: Pokud zde zadáte heslo, bude uloženo " +#~ "nezašifrované v souboru s nastavením pro Cantatu. Aby Cantata " +#~ "vyzvala k zadání hesla před přístupem k sdílení, nastavte heslo na '-'" + +#~ msgid "" +#~ "NOTE: Due to the way sshfs works, a suitable ssh-askpass " +#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to " +#~ "enter the password." +#~ msgstr "" +#~ "POZNÁMKA: 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.)." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "POZNÁMKA: 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." + +#~ msgid "" +#~ "NOTE Only enter values for the tags you wish to be search on. " +#~ msgstr "" +#~ "POZNÁMKA: Zadejte hodnoty pouze pro značky, které si přejete " +#~ "hledat. " + +#~ msgid "" +#~ "NOTE For genre, end string with an asterisk to match various " +#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +#~ msgstr "" +#~ "POZNÁMKA: 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'. " +#~ "" + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "POZNÁMKA: 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." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "POZNÁMKA: 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')" + +#~ msgid "" +#~ "

        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.

        For more information on MPD itself, please " +#~ "refer to the MPD website http://www.musicpd.org

        This 'wizard' will guide you through the basic settings " +#~ "required for Cantata to function correctly.

        " +#~ msgstr "" +#~ "

        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.

        Více informací o MPD naleznete na stránkách MPD http://www.musicpd.org

        Tento průvodce vás provede " +#~ "základními nastaveními, která jsou potřeba pro to, aby Cantata pracovala " +#~ "správně.

        " + +#~ msgid "" +#~ "

        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:

        " +#~ msgstr "" +#~ "

        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:" + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "POZNÁMKA: 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." + +#~ msgid "" +#~ "NOTE: When using a local socket the full absolute path to the " +#~ "socket needs to be set. (Port number is not required.)" +#~ msgstr "" +#~ "POZNÁMKA: 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í.)" + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "POZNÁMKA: 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." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "POZNÁMKA: 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')," + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "POZNÁMKA: 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." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "POZNÁMKA: 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." + +#~ msgid "" +#~ "NOTE: 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." +#~ "" +#~ msgstr "" +#~ "POZNÁMKA: 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." + +#~ msgid "Covers:" +#~ msgstr "Obaly:" + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "POZNÁMKA: 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." + +#~ 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 "" +#~ "

        This will change Cantata's interface as detailed:\n" +#~ "

        • Playback, and control, buttons will be 33% wider
        • Views " +#~ "will be 'flickable'
        • To drag items, you will need to 'touch' the " +#~ "top-left corner
        • Scrollbars will only be a few pixels wide
        • Actions (e.g. 'Add To Play Queue') will always be visible (not " +#~ "just when item is under mouse)
        • Spin buttons with have + and - " +#~ "buttons at the side of the text field

        " +#~ msgstr "" +#~ "

        Toto změní rozhraní Cantaty, jak je to popsáno dále:\n" +#~ "

        • Tlačítka pro přehrávání a ovládání budou o 33 % širší
        • Pohledy budou odstrčitelné.
        • Pro táhnutí položek budete " +#~ "potřebovat najet do horního levého rohu
        • Posuvníky budou široké " +#~ "jen několik pixelů
        • Činnosti (např. Přidat do řady skladeb k " +#~ "přehrání) budou vždy viditelné (ne jen tehdy, když je položka pod myší)
        • Otočná tlačítka budou mít tlačítka + a - na straně textového pole." +#~ "

        " + +#~ 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 "" +#~ "NOTE: Changing the 'Enforce single-click activation of items' " +#~ "setting will require a re-start of Cantata." +#~ msgstr "" +#~ "POZNÁMKA: Změna nastavení Vynutit zapnutí jedním klepnutím u " +#~ "položek vyžaduje opětovné spuštění Cantaty." + +#~ msgid "" +#~ "NOTE: Changing the language setting will require a re-start of " +#~ "Cantata." +#~ msgstr "" +#~ "POZNÁMKA: Změna nastavení jazyka vyžaduje opětovné spuštění " +#~ "Cantaty." + +#~ msgid "" +#~ "NOTE: Changing the 'touch friendly' setting will require a re-" +#~ "start of Cantata." +#~ msgstr "" +#~ "POZNÁMKA: Změna nastavení rozhraní na dotykově přátelské " +#~ "vyžaduje opětovné spuštění Cantaty." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "POZNÁMKA: 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ě." + +#~ msgid "" +#~ "NOTE: The 'Music folder' setting is used to lookup cover-art " +#~ "(either the value specified above, or cover.jpg / cover.png " +#~ "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 "" +#~ "Poznámka: Nastavení Složka s hudbou se používá pro hledání " +#~ "obrázků obalů (buď hodnota stanovená výše, nebo cover.jpg / cover." +#~ "png). 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." + +#~ msgid "" +#~ "NOTE: '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 "" +#~ "POZNÁMKA: 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." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "POZNÁMKA: 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." + +#~ msgid "" +#~ "NOTE: If no setting is specified for 'Cover filename, then " +#~ "Cantata will use a default of cover " +#~ msgstr "" +#~ "POZNÁMKA: Pokud není nastaveno žádné nastavení pro název " +#~ "souboru s obalem, pak bude Cantata používat výchozí obal " + +#~ msgid "" +#~ "NOTE: 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.

        \n" +#~ "NOTE: If you choose 'Local loopback' for 'Network interface', then " +#~ "MPD must also be on this computer.
        " +#~ msgstr "" +#~ "POZNÁMKA: 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ěží.

        \n" +#~ "POZNÁMKA: Pokud zvolíte pro síťové rozhraní místní smyčku, potom " +#~ "musí být MPD rovněž na tomto počítači.
        " + +#~ msgid "" +#~ "NOTE: These settings apply to Digitally Imported, JazzRadio." +#~ "com, RockRadio.com, and Sky.fm" +#~ msgstr "" +#~ "POZNÁMKA: Tato nastavení se použijí na Digitally Imported, " +#~ "JazzRadio.com, RockRadio.com, and Sky.fm." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "POZNÁMKA: Pokud zadáte podrobnosti účtu, stav 'DI' (Digitally " +#~ "Imported) se objeví pod seznamem proudů. To ukáže, zda jste přihlášen " +#~ "nebo nejste." + +#~ msgid "" +#~ "NOTE: Built-in categories are shown in italic, and these cannot " +#~ "be removed." +#~ msgstr "" +#~ "POZNÁMKA: Vestavěné skupiny jsou zobrazovány kurzívou, a tyto " +#~ "nelze odstranit." + +#~ msgid "" +#~ "NOTE Multiple genres should be separated via a semicolon (e.g. " +#~ "'Rock;Hard Rock')" +#~ msgstr "" +#~ "POZNÁMKA: Více žánrů se musí oddělit středníkem (např. 'Rock;" +#~ "Hard Rock')" + +#~ msgid "" +#~ "Scan all tracks?

        NOTE: All tracks have existing " +#~ "ReplayGain tags." +#~ msgstr "" +#~ "Prohledat všechny skladby?

        POZNÁMKA: Všechny skladby " +#~ "mají existující značky pro vyrovnání hlasitost." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "POZNÁMKA: 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" + +#~ msgid "Failed to install %1" +#~ msgstr "Nepodařilo se nainstalovat %1" + +#~ msgid "Failed to download %1" +#~ msgstr "Nepodařilo se stáhnout %1" + +#~ 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 %1!" +#~ msgstr "Nepodařilo se vytvořit %1!" + +#~ msgid "Stream already exists!
        %1" +#~ msgstr "Proud již existuje!
        %1" + +#~ msgid "A stream named %1 already exists!" +#~ msgstr "Proud pojmenovaný %1 již existuje!" + +#~ msgid "Reload %1 streams?" +#~ msgstr "Nahrát znovu %1 proudů?" + +#~ msgid "Are you sure you wish to remove bookmark to %1?" +#~ msgstr "Opravdu chcete odstranit záložku k %1?" + +#~ msgid "Are you sure you wish to remove all %1 bookmarks?" +#~ msgstr "Opravdu chcete odstranit všech %1 záložek?" + +#~ msgid "Are you sure you wish to remove %1?" +#~ msgstr "Opravdu chcete odstranit %1?" + +#~ msgid "A category named %1 already exists!
        Overwrite?" +#~ msgstr "Skupina pojmenovaná %1 již existuje!
        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 all tracks?" +#~ msgstr "" +#~ "Psát velkým písmenem první písmeno Názvu, Umělce, Umělce alba a Alba u " +#~ "všech skladeb?" + +#~ msgid "Source file does not exist!
        %1" +#~ msgstr "Zdrojový soubor neexistuje!
        %1" + +#~ msgid "Destination file already exists!
        %1" +#~ msgstr "Cílový soubor již existuje!
        %1" + +#~ msgid "Failed to create destination folder!
        %1" +#~ msgstr "Nepodařilo se vytvořit cílovou složku!
        %1" + +#~ msgid "Failed to rename %1 to %2" +#~ msgstr "Nepodařilo se přejmenovat %1 na %2" + +#~ msgid "" +#~ "

        Cannot access song files!

        Please check Cantata's \"Music " +#~ "folder\" setting, and MPD's \"music_directory\" setting.

        " +#~ msgstr "" +#~ "

        Nelze přistupovat k souborům s písněmi!

        Prověřte, prosím, " +#~ "nastavení složky s hudbou Cantaty a nastavení adresáře s hudbou MPD " +#~ "(music_directory).

        " + +#~ msgid "" +#~ "

        Cannot access song files!

        Please check that the device is " +#~ "still attached.

        " +#~ msgstr "" +#~ "

        Nelze přistupovat k souborům s písněmi!

        Prověřte, prosím, že " +#~ "zařízení je stále ještě připojeno.

        " + #~ msgid "TextLabel" #~ msgstr "TextovýŠtítek" @@ -7381,9 +8409,6 @@ #~ msgid " seconds" #~ msgstr " sekund" -#~ msgid "Devices:" -#~ msgstr "Zařízení:" - #~ msgid "Current URL:" #~ msgstr "Nynější adresa (URL):" @@ -7493,9 +8518,6 @@ #~ 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 @@ #~ 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 -Nru cantata-1.4.2.ds1/po/de.po cantata-1.5.2.ds2/po/de.po --- cantata-1.4.2.ds1/po/de.po 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/po/de.po 2015-03-23 20:09:39.000000000 +0000 @@ -7,7 +7,7 @@ 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 \n" "Language-Team: German \n" @@ -23,10 +23,10 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ #. 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ msgid "Songs To Be Copied" msgstr "Stücke zum kopieren" -#: devices/actiondialog.cpp:153 +#: devices/actiondialog.cpp:151 msgid "INVALID" msgstr "UNGÜLTIG" -#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170 +#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168 msgid "(When different)" msgstr "(Wenn unterschiedlich)" -#: 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 @@ "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 "" -"

        You have not configured the destination device.
        Continue with the " -"default settings?

        " +"You have not configured the destination device.\n" +"\n" +"Continue with the default settings?" msgstr "" -"

        Sie haben das Zielgerät nicht konfiguriert.
        Mit den " -"Standardeinstellungen fortfahren?

        " -#: 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 "" -"

        You have not configured the source device.
        Continue with the default " -"settings?

        " +"You have not configured the source device.\n" +"\n" +"Continue with the default settings?" msgstr "" -"

        Sie haben das Quellgerät nicht konfiguriert.
        Mit den " -"Standardeinstellungen fortfahren?

        " -#: 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!
        Please check you have sufficient " "permissions." @@ -612,31 +626,31 @@ "Fehler beim Erstellen des Ordners auf Zielgerät.
        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.
        (Required for transcoding to MTP " "devices.)" @@ -644,172 +658,164 @@ "Fehler beim Erstellen einer temporären Datei.
        (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 "" -"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " -"'Title' to \"TrackArtist - TrackTitle\"" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" msgstr "" -"Dies wird den 'Albumkünstler' und 'Künstler' zu „Verschiedene Künstler“ " -"gesetzt, und der 'Titel' zu \"TrackArtist - TrackTitle\"" -#: 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 "" -"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.

        If 'Title' " -"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " -"will be set to \"Wobble\"
        " +"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 "" -"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.

        Wenn z. B. " -"'Titel' \"Wibble - Wobble\" lautet, wird der 'Künstler' zu \"Wibble\" " -"gesetzt und der 'Titel' zu \"Wobble\" gesetzt
        " -#: 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 @@ #. 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 @@ 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 "" -"

        Which type of refresh do you wish to perform?

        • Partial - Only new " -"songs are scanned (quick)
        • Full - All songs are rescanned " -"(slow)

        " +#: 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 "" -"

        Welcher Typ von Aktualisierung soll ausgeführt werden?

        • Partiell – " -"Nur neue Stücke werden gesucht (schnell)
        • Voll – Alle Stücke " -"werden neu gesucht (langsam)

        " -#: 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 %1?" -msgstr "Wollen Sie wirklich %1 entfernen?" - -#: devices/devicespage.cpp:544 -msgid "Are you sure you wish to eject Audio CD %1 - %2?" -msgstr "Wollen Sie wirklich Audio-CD %1 – %2 auswerfen?" +#: devices/devicespage.cpp:521 +msgid "Are you sure you wish to forget '%1'?" +msgstr "Wollen Sie wirklich '%1' vergessen?" + +#: 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 %1?" -msgstr "Wollen Sie wirklich die Verbindung zu %1 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 @@ "120kb/s könnte nicht zufriedenstellend sein alles über 205kb/s " "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 @@ "Musik.
        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 @@ #: devices/filenameschemedialog.cpp:121 msgid "" -"

        The following variables will be replaced with their corresponding meaning " -"for each track name.

        " +"The following variables will be replaced with their corresponding meaning " +"for each track name." msgstr "" -#: devices/filenameschemedialog.cpp:123 +#: devices/filenameschemedialog.cpp:127 msgid "" "
    VariableButtonDescription
    Server
    Protocol: %1.%2.%3
    Uptime:" @@ -2616,7 +2592,7 @@ "tr>
    Tags: %7
    Database
    Artists: %1
    Albums: Updated: %5
    Composer:%1
    Komponist:%1
    Performer:%1
    Artist:%1
    Album:%2
    Year:" @@ -6545,7 +6664,7 @@ msgid "All Genres" msgstr "Alle Genre" -#: widgets/itemview.cpp:628 +#: widgets/itemview.cpp:681 msgid "Go Back" msgstr "Zurück" @@ -6553,15 +6672,19 @@ msgid "Menu" msgstr "Menü" -#: widgets/playqueueview.cpp:300 +#: widgets/notelabel.cpp:67 +msgid "NOTE: %1" +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 @@ #: widgets/songdialog.cpp:49 msgid "" -"

    Cannot access song files!

    Please check Cantata's \"Music folder" -"\" setting, and MPD's \"music_directory\" setting.

    " +"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 "" -"

    Cannot access song files!

    Please check that the device is still " -"attached.

    " +"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 @@ 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 "" +#~ "

    You have not configured the destination device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    Sie haben das Zielgerät nicht konfiguriert.
    Mit den " +#~ "Standardeinstellungen fortfahren?

    " + +#~ msgid "" +#~ "

    You have not configured the source device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    Sie haben das Quellgerät nicht konfiguriert.
    Mit den " +#~ "Standardeinstellungen fortfahren?

    " + +#~ 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 "" +#~ "

    Which type of refresh do you wish to perform?

    • Partial - Only " +#~ "new songs are scanned (quick)
    • Full - All songs are " +#~ "rescanned (slow)

    " +#~ msgstr "" +#~ "

    Welcher Typ von Aktualisierung soll ausgeführt werden?

    • " +#~ "Partiell – Nur neue Stücke werden gesucht (schnell)
    • Voll " +#~ "– Alle Stücke werden neu gesucht (langsam)

    " + +#~ 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 %1?" +#~ msgstr "Wollen Sie wirklich %1 entfernen?" + +#~ msgid "Are you sure you wish to eject Audio CD %1 - %2?" +#~ msgstr "Wollen Sie wirklich Audio-CD %1 – %2 auswerfen?" + +#~ msgid "Are you sure you wish to disconnect %1?" +#~ msgstr "Wollen Sie wirklich die Verbindung zu %1 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 "

    Delete all from the following?

      %1

    " +#~ msgstr "

    Alles folgende löschen?

      %1

    " + +#~ 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 %1 already exists!
    Add to that playlist?" +#~ msgstr "" +#~ "Eine Wiedergabeliste mit Namen %1existiert bereits.
    Zur " +#~ "Wiedergabeliste hinzufügen?" + +#~ 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.

    The following ReplayGain settings may be used:" +#~ "

    • None - No ReplayGain is applied.
    • Track - " +#~ "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's " +#~ "ReplayGain tags.
    • Auto - Volume will be adjusted using the " +#~ "track's ReplayGain tags if random play is activated, otherwise the " +#~ "album's tags will be used.

    " +#~ msgstr "" +#~ "

    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.

    Die folgenden Einstellungen können gewählt werden:

    • Keine – ReplayGain wird nicht hinzugefügt.
    • Stück – Lautstärke " +#~ "wird eingestellt auf das Stück.
    • Album – Lautstärke wird " +#~ "eingestellt auf das Album.
    • Automatisch – Lautstärke wird " +#~ "auf das Stück eingestellt, wenn die zufällige Wiedergabe eingestellt ist. " +#~ "Sonst wird auf Album eingestellt.

    " + +#~ 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 %1 already exists!
    Overwrite?" +#~ msgstr "" +#~ "Eine Wiedergabeliste mit Namen %1existiert bereits.
    " +#~ "Überschreiben?" + +#~ msgid "" +#~ "Which type of collection do you wish to connect to?
    • Standard " +#~ "- music collection may be shared, is on another machine, or is already " +#~ "setup
    • 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?
  • " +#~ "Standard:
    Musiksammlung kann geteilt werden, ist auf einem anderen " +#~ "Rechner, oder ist bereits eingerichtet.
  • Einfach: " +#~ "
    Musiksammlung ist nicht mit anderen geteilt und Cantata wird " +#~ "Konfiguration und Steuerung der MPD-Instanz übernehmen." + +#~ msgid "Delete %1?" +#~ msgstr "Lösche %1?" + +#~ msgid "Edit Tags" +#~ msgstr "Bearbeite Tags" + +#~ msgid "(Priority: %1)" +#~ msgstr "(Priorität: %1)" + +#~ msgid "" +#~ "NOTE: 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)." +#~ msgstr "" +#~ "Hinweis: 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)." + +#~ msgid "" +#~ "NOTE: These settings are only valid, and editable, when the " +#~ "device is connected." +#~ msgstr "" +#~ "Hinweis: Diese Einstellungen sind nur gültig, wenn das Gerät " +#~ "verbunden ist." + +#~ msgid "Ignore 'The' in artist names" +#~ msgstr "Ignoriere „The“ im Künstlernamen" + +#~ msgid "" +#~ "NOTE: These settings are only editable when the device is not " +#~ "connected." +#~ msgstr "" +#~ "Hinweis: Diese Einstellungen sind nur gültig, wenn das Gerät " +#~ "nicht verbunden ist." + +#~ msgid "" +#~ "NOTE: If you enter a password here, it will be stored " +#~ "unencrypted in Cantata's config file. To have Cantata prompt for " +#~ "the password before accessing the share, set the password to '-'" +#~ msgstr "" +#~ "Hinweis: Wenn Sie hier ein Kennwort eingeben, wird es " +#~ "unverschlüsselt in Cantatas Konfigurationdatei gespeichert. Wenn " +#~ "Sie möchten, dass Cantata sie zur Passworteingabe auffordert, setzen Sie " +#~ "das Kennwort auf '-'" + +#~ msgid "" +#~ "NOTE: Due to the way sshfs works, a suitable ssh-askpass " +#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to " +#~ "enter the password." +#~ msgstr "" +#~ "Hinweis: 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." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "Hinweis: 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" + +#~ msgid "" +#~ "NOTE Only enter values for the tags you wish to be search on. " +#~ msgstr "" +#~ "Hinweis: Nur Werte für Tags angeben, welche auch gesucht werden." +#~ "" + +#~ msgid "" +#~ "NOTE For genre, end string with an asterisk to match various " +#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +#~ msgstr "" +#~ "Hinweis: Für Genre nach dem letzten Buchstaben ein * findet " +#~ "mehrere Genre. z. B. 'rock*' findet 'Hard Rock' und 'Rock and Roll'." + +#~ msgid "" +#~ "

    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.

    For more information on MPD itself, please " +#~ "refer to the MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings " +#~ "required for Cantata to function correctly.

    " +#~ msgstr "" +#~ "

    Cantata ist ein umfangreiches Clientprogramm für " +#~ "den Music Player Daemon (MPD). Damit Cantata funktioniert, muss eine " +#~ "laufende Installation von MPD vorhanden sein.

    Für weitere " +#~ "Information zu MPD besuchen Sie bitte dessen Webseite unter http://www.musicpd.org


    Diese " +#~ "'Hilfsdialog' wird Sie durch die Konfiguration begleiten. damit Cantata " +#~ "richtig funktioniert.

    " + +#~ msgid "" +#~ "NOTE: When using a local socket the full absolute path to the " +#~ "socket needs to be set. (Port number is not required.)" +#~ msgstr "" +#~ "Hinweis: Wenn Sie einen lokalen Domain-Socket benutzen, müssen " +#~ "Sie den absoluten Pfad dorthin angeben. (Portnummer wird dann nicht " +#~ "benötigt.)" + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "Hinweis: Das Musikverzeichnis zeigt auf eine HTTP-Adresse und " +#~ "Cantata kann aktuell keine Dateien hochladen. Daher sollten die obigen " +#~ "Einstellungen deaktiviert werden." + +#~ msgid "Covers:" +#~ msgstr "Cover:" + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "Hinweis: 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." + +#~ 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 "" +#~ "NOTE: Changing the 'Enforce single-click activation of items' " +#~ "setting will require a re-start of Cantata." +#~ msgstr "" +#~ "Hinweis: Zur Änderung der Einzelklick-Einstellung muss Cantata " +#~ "neu gestartet werden." + +#~ msgid "" +#~ "NOTE: Changing the language setting will require a re-start of " +#~ "Cantata." +#~ msgstr "" +#~ "Hinweis: Änderung Sprache benötigt einen Neustart von Cantata." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "Hinweis: Wenn Sie die Stopp-Schaltfläche gedrückt halten, " +#~ "öffnet sich ein Menü für verschiedene Aktionen." + +#~ msgid "" +#~ "NOTE: The 'Music folder' setting is used to lookup cover-art " +#~ "(either the value specified above, or cover.jpg / cover.png " +#~ "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 "" +#~ "Hinweis: Das Musikverzeichnis wird zur Coversuche benötigt (z. " +#~ "B. cover.jpg). Wenn Sie die Berechtigung zum Schreiben auf " +#~ "diese Verzeichnisse (und Unterverzeichnisse) haben, wird Cantata alle " +#~ "heruntergeladenen Cover in den entsprechenden Albenordner ablegen." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "Hinweis: Wenn sie die Einstellung zum Musikverzeichnis ändern, " +#~ "muss die Musikbibliothek manuell aktualisiert werden. Dies kann über die " +#~ "Schaltfläche 'Aktualisiere Datenbank' ausgeführt werden." + +#~ msgid "" +#~ "NOTE: If no setting is specified for 'Cover filename, then " +#~ "Cantata will use a default of cover " +#~ msgstr "" +#~ "Hinweis: Wenn keine Einstellung zum Covernamen angegeben sind, " +#~ "wird Cantata den voreingestellten Namen cover nehmen." + +#~ msgid "" +#~ "NOTE: 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.

    \n" +#~ "NOTE: If you choose 'Local loopback' for 'Network interface', then " +#~ "MPD must also be on this computer.
    " +#~ msgstr "" +#~ "Hinweis: 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.

    \n" +#~ "Hinweis: Wenn Sie 'Local loopback' für die 'Netzwerkkarte', " +#~ "eingestellt haben muss sich MPD auf dem gleichen Computer befinden." +#~ "
    " + +#~ msgid "" +#~ "Scan all tracks?

    NOTE: All tracks have existing " +#~ "ReplayGain tags." +#~ msgstr "" +#~ "Suche in allen Stücken?

    Hinweis: Alle Stücke besitzen " +#~ "einen ReplayGain-Tag. " + +#~ msgid "Failed to create %1!" +#~ msgstr "Fehler beim Erstellen von %1." + +#~ msgid "Stream already exists!
    %1" +#~ msgstr "Stream existiert bereits.
    %1" + +#~ msgid "A stream named %1 already exists!" +#~ msgstr "Der Stream mit dem Namen %1 existiert bereits." + +#~ msgid "Reload %1 streams?" +#~ msgstr "Erneutes Laden %1 der Streams?" + +#~ msgid "Are you sure you wish to remove bookmark to %1?" +#~ msgstr "Wollen Sie wirklich das Lesezeichen %1 entfernen?" + +#~ msgid "Are you sure you wish to remove all %1 bookmarks?" +#~ msgstr "Wollen Sie wirklich alle %1 Lesezeichen entfernen?" + +#~ msgid "Are you sure you wish to remove %1?" +#~ msgstr "Wollen Sie wirklich %1 entfernen?" + +#~ msgid "A category named %1 already exists!
    Overwrite?" +#~ msgstr "" +#~ "Eine Kategorie mit Namen %1existiert bereits.
    Überschreiben?" + +#~ msgid "" +#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and " +#~ "'Album' of all tracks?" +#~ msgstr "" +#~ "Ersten Buchstaben von 'Title', 'Artist', 'Album artist', and 'Album' in " +#~ "Großbuchstaben von allen Stücken?" + +#~ msgid "Source file does not exist!
    %1" +#~ msgstr "Quelldatei existiert nicht.
    %1" + +#~ msgid "Destination file already exists!
    %1" +#~ msgstr "Zieldateiname existiert bereits.
    %1" + +#~ msgid "Failed to create destination folder!
    %1" +#~ msgstr "Fehler beim Erstellen des Zielordners
    %1" + +#~ msgid "Failed to rename %1 to %2" +#~ msgstr "Fehler beim Umbenennen %1 zu %2" + #~ msgid "&Lyrics" #~ msgstr "&Texte" @@ -7123,9 +7698,6 @@ #~ msgid " seconds" #~ msgstr "Sekunden" -#~ msgid "Devices:" -#~ msgstr "Geräte:" - #~ msgid "Stopping Playback" #~ msgstr "Stoppe Wiedergabe" @@ -7168,9 +7740,6 @@ #~ 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 @@ #~ 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 -Nru cantata-1.4.2.ds1/po/en_GB.po cantata-1.5.2.ds2/po/en_GB.po --- cantata-1.4.2.ds1/po/en_GB.po 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/po/en_GB.po 2015-03-23 20:09:39.000000000 +0000 @@ -6,7 +6,7 @@ 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 \n" "Language-Team: British English \n" @@ -20,10 +20,10 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ #. 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ msgid "Songs To Be Copied" msgstr "" -#: devices/actiondialog.cpp:153 +#: devices/actiondialog.cpp:151 msgid "INVALID" msgstr "" -#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170 +#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168 msgid "(When different)" 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 @@ "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 "" -"

    You have not configured the destination device.
    Continue with the " -"default settings?

    " +"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 "" -"

    You have not configured the source device.
    Continue with the default " -"settings?

    " +"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!
    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.
    (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 "" -"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " -"'Title' to \"TrackArtist - TrackTitle\"" +"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 "" -"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.

    If 'Title' " -"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " -"will be set to \"Wobble\"
    " +"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 @@ #. 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 @@ 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 "" -"

    Which type of refresh do you wish to perform?

    • Partial - Only new " -"songs are scanned (quick)
    • Full - All songs are rescanned " -"(slow)

    " +#: 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 %1?" +#: 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 %1 - %2?" +#: 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 %1?" +#: 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 @@ "anything above 205kb/s 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 @@ "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 @@ #: devices/filenameschemedialog.cpp:121 msgid "" -"

    The following variables will be replaced with their corresponding meaning " -"for each track name.

    " +"The following variables will be replaced with their corresponding meaning " +"for each track name." msgstr "" -#: devices/filenameschemedialog.cpp:123 +#: devices/filenameschemedialog.cpp:127 msgid "" "
  • VariableButtonDescription
    Server
    Protocol: %1.%2.%3
    Uptime:" @@ -2410,7 +2425,7 @@ "tr>
    Tags: %7
    Database
    Artists: %1
    Albums: Updated: %5
    Composer:%1
    Performer:%1
    Artist:%1
    Album:%2
    Year:" @@ -6204,7 +6446,7 @@ msgid "All Genres" msgstr "" -#: widgets/itemview.cpp:628 +#: widgets/itemview.cpp:681 msgid "Go Back" msgstr "" @@ -6212,15 +6454,19 @@ msgid "Menu" msgstr "" -#: widgets/playqueueview.cpp:300 +#: widgets/notelabel.cpp:67 +msgid "NOTE: %1" +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 @@ #: widgets/songdialog.cpp:49 msgid "" -"

    Cannot access song files!

    Please check Cantata's \"Music folder" -"\" setting, and MPD's \"music_directory\" setting.

    " +"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 "" -"

    Cannot access song files!

    Please check that the device is still " -"attached.

    " +"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 @@ 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 "" +#~ "%1 is used to store favorite streams, please choose another name." +#~ msgstr "" +#~ "%1 is used to store favourite streams, please choose another name." + +#~ msgid "" +#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and " +#~ "'Album' of all tracks?" +#~ msgstr "" +#~ "Capitalise the first letter of 'Title', 'Artist', 'Album artist', and " +#~ "'Album' of all tracks?" + #~ msgid "Stop dynamizer on exit" #~ msgstr "Stop dynamiser on exit" diff -Nru cantata-1.4.2.ds1/po/es.po cantata-1.5.2.ds2/po/es.po --- cantata-1.4.2.ds1/po/es.po 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/po/es.po 2015-03-23 20:09:39.000000000 +0000 @@ -6,7 +6,7 @@ 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 \n" "Language-Team: Debian l10n Spanish \n" @@ -21,10 +21,10 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ #. 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 @@ 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 @@ 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 @@ "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 @@ 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 @@ #. 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 @@ msgid "Songs To Be Copied" msgstr "Canciones que copiar" -#: devices/actiondialog.cpp:153 +#: devices/actiondialog.cpp:151 msgid "INVALID" msgstr "NO VÁLIDO" -#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170 +#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168 msgid "(When different)" msgstr "(Cuando hay diferencias)" -#: 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 @@ "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 "" -"

    You have not configured the destination device.
    Continue with the " -"default settings?

    " +"You have not configured the destination device.\n" +"\n" +"Continue with the default settings?" msgstr "" -"

    El dispositivo de destino no está configurado.
    ¿Desea continuar con " -"las opciones predefinidas?

    " -#: 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 "" -"

    You have not configured the source device.
    Continue with the default " -"settings?

    " +"You have not configured the source device.\n" +"\n" +"Continue with the default settings?" msgstr "" -"

    El dispositivo de origen no está configurado.
    ¿Desea continuar con " -"las opciones predefinidas?

    " -#: 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!
    Please check you have sufficient " "permissions." @@ -619,31 +633,31 @@ "No se pudo crear el directorio de destino.
    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.
    (Required for transcoding to MTP " "devices.)" @@ -651,172 +665,164 @@ "Fallo al crear el fichero temporal.
    (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 "" -"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " -"'Title' to \"TrackArtist - TrackTitle\"" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" msgstr "" -"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»" -#: 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 "" -"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.

    If 'Title' " -"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " -"will be set to \"Wobble\"
    " +"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 "" -"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:" -"

    si «Título» es «Wibble - Wobble», entonces «Artista» se define " -"como «Wibble», y «Título» se define como «Wobble»
    " -#: 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 @@ #. 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 @@ 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 "" -"

    Which type of refresh do you wish to perform?

    • Partial - Only new " -"songs are scanned (quick)
    • Full - All songs are rescanned " -"(slow)

    " +#: 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 "" -"

    ¿Qué tipo de actualización desea realizar?

    • Parcial - Solo se " -"analizan canciones nuevas (rápido)
    • Completa - Se analizan " -"todas las canciones (lento)

    " -#: 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 %1?" -msgstr "¿Desea olvidar %1?" - -#: devices/devicespage.cpp:544 -msgid "Are you sure you wish to eject Audio CD %1 - %2?" -msgstr "¿Desea expulsar el CD de audio %1 - %2?" +#: devices/devicespage.cpp:521 +msgid "Are you sure you wish to forget '%1'?" +msgstr "" + +#: 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 %1?" -msgstr "¿Está seguro de que quiere desconectar %1?" +#: 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 @@ msgstr "" "La tasa de bits es la medida de la cantidad de datos utilizados para " "representar un segundo de la pista de audio.
    El codificador AAC " -"utilizado por Cantata permite una tasa de bits variable " +"utilizado por Cantata permite una tasa de bits variable " "(VBR) ; 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 @@ "la tasa de bits en esta barra deslizante es una estimación de la tasa de bits media de la pista " "codificada.
    150kb/s es una buena elección para la reproducción de " -"música con un dispositivo portátil.
    Algo inferior a 120kb/s " -"puede ser insatisfactorio para la música y algo superior a 200kb/s es " +"música con un dispositivo portátil.
    Algo inferior a 120kb/s puede " +"ser insatisfactorio para la música y algo superior a 200kb/s es " "posiblemente demasiado." #: devices/encoders.cpp:101 devices/encoders.cpp:141 @@ -1157,20 +1164,20 @@ msgstr "" "La tasa de bits es la medida de la cantidad de datos utilizados para " "representar un segundo de la pista de audio.
    El codificador MP3 " -"utilizado por Cantata permite una tasa de bits variable (VBR) ; " -"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.
    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.
    160kb/s es una buena elección para la " -"reproducción de música con un dispositivo portátil.
    Algo inferior a " -"120kb/s puede ser insatisfactorio para la música y algo superior a " -"205kb/s es posiblemente demasiado." +"utilizado por Cantata permite una tasa de bits variable (VBR) ; 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.
    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." +"
    160kb/s es una buena elección para la reproducción de música con " +"un dispositivo portátil.
    Algo inferior a 120kb/s puede ser " +"insatisfactorio para la música y algo superior a 205kb/s 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 @@ msgstr "" "La tasa de bits es la medida de la cantidad de datos utilizados para " "representar un segundo de la pista de audio.
    El codificador Opus " -"utilizado por Cantata permite una tasa de bits " -"variable (VBR) ; 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.
    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.
    128kb/s es una buena elección para la reproducción de " -"música con un dispositivo portátil.
    Algo inferior a 100kb/s puede " -"ser insatisfactorio para la música y algo superior a 256kb/s es " -"posiblemente demasiado." +"utilizado por Cantata permite una tasa de bits variable (VBR) ; 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.
    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.
    128kb/s es una buena elección para la " +"reproducción de música con un dispositivo portátil.
    Algo inferior a " +"100kb/s puede ser insatisfactorio para la música y algo superior a " +"256kb/s es posiblemente demasiado." #: devices/encoders.cpp:242 msgid "Apple Lossless" @@ -1295,7 +1301,7 @@ "de datos.
    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 @@ #: devices/filenameschemedialog.cpp:121 msgid "" -"

    The following variables will be replaced with their corresponding meaning " -"for each track name.

    " +"The following variables will be replaced with their corresponding meaning " +"for each track name." msgstr "" -"

    Las siguientes variables se sustituirán por su significado " -"correspondiente para cada nombre de pista.

    " -#: devices/filenameschemedialog.cpp:123 +#: devices/filenameschemedialog.cpp:127 msgid "" "
    VariableButtonDescription
    VariableBotónDescripción
    VariableBotónDescripción
    Server
    Protocol: %1.%2.%3
    Uptime:" @@ -2662,14 +2617,14 @@ "%5
    Handlers: %6
    Tags: %7
    Servidor
    Protocolo: %1.%2.%3
    Tiempo de actividad: %4
    Reproduciendo: %5
    Manipuladores: %6
    Etiquetas: %7
    Servidor
    Protocolo: %1.%2.%3
    Tiempo " +"de actividad: %4
    Reproduciendo: %5
    Manipuladores: %6
    Etiquetas: %7
    Database
    Artists: %1
    Albums: 
    Duration: %4
    Updated: %5
    Base de datos
    Artistas: %1
    Álbumes: %2
    Canciones: %3
    Duración: %4
    Base de datos
    Artistas: %1
    Álbumes: " +"%2
    Canciones: %3
    Duración: %4
    Actualizado: %5
    Composer:%1
    Compositor:%1
    Performer:%1
    Artist:%1
    Album:%2
    Year:" "%3
    Artista:%1
    Álbum:%2
    Año:%3
    Artista:%1
    Álbum:%2
    Año:%3
    VariableButtonDescription
    VariableBoutonDescription
    Server
    Protocol: %1.%2.%3
    Uptime:" +" %4
    Playing: " +"%5
    Handlers: %6
    Tags: %7
    Serveur
    Protocole: %1.%2.%3
    Durée " +"de fonctionnement: %4
    Temps " +"de lecture: %5
    Formats: " +"%6
    Étiquettes: %7
    Database
    Artists: %1
    Albums: %2
    Songs: %3
    Duration: %4
    Updated: %5
    Base de données
    Artistes: %1
    Albums: " +"%2
    Pistes: %3
    Durée totale: %4
    Mise à jour: %5
    Composer:%1
    Compositeur:%1
    Performer:%1
    Interprète:%1
    Artist:%1
    Album:%2
    Year:" +"%3
    Artiste:%1
    Album:%2
    Année:" +"%3
    VariableButtonDescription
    VáltozóGombLeírás
    Server
    Protocol: %1.%2.%3
    Uptime:" @@ -2632,7 +2657,7 @@ "%5
    Kezelők: %6
    Címkék: %7
    Database
    Artists: %1
    Albums: 
    Időtartam: %4
    Frissítve: %5
    Composer:%1
    Zeneszerző:%1
    Performer:%1
    Előadó%1
    Artist:%1
    Album:%2
    Year:" @@ -6658,7 +6907,7 @@ 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 @@ msgid "Menu" msgstr "Menü" -#: widgets/playqueueview.cpp:300 +#: widgets/notelabel.cpp:67 +msgid "NOTE: %1" +msgstr "Megjegyzés: %1" + +#: 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 @@ #: widgets/songdialog.cpp:49 msgid "" -"

    Cannot access song files!

    Please check Cantata's \"Music folder" -"\" setting, and MPD's \"music_directory\" setting.

    " +"Cannot access song files!\n" +"\n" +"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory" +"\" setting." msgstr "" -"

    Nem tudom elérni a dalok fájljait!

    Ellenőrizd a Cantata " -"\"Zenekönyvtárát\" és az MPD \"music_directory\" (zenekönyvtár) beállításait." -"

    " +"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 "" -"

    Cannot access song files!

    Please check that the device is still " -"attached.

    " +"Cannot access song files!\n" +"\n" +"Please check that the device is still attached." msgstr "" -"

    Nem tudom elérni a dalok fájljait!

    Ellenőrizd, hogy az eszköz " -"csatlakozik-e még.

    " +"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 @@ 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 "" +#~ "

    You have not configured the destination device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    A céleszközt nem állítottad be.
    Folytatod az alapbeállításokkal?" + +#~ msgid "" +#~ "

    You have not configured the source device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    Nem állítottad be a forráseszközt.
    Használjuk az " +#~ "alapbeállításokat?

    " + +#~ 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 "" +#~ "

    Which type of refresh do you wish to perform?

    • Partial - Only " +#~ "new songs are scanned (quick)
    • Full - All songs are " +#~ "rescanned (slow)

    " +#~ msgstr "" +#~ "

    Milyen fajta frissítést szeretne végrehajtani?

    • Részleges - Csak " +#~ "új számokat keres (gyors)
    • Teljes - Minden számot újrakeres " +#~ "(lassú)

    " + +#~ 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 %1?" +#~ msgstr "Biztosan el akarod felejteni %1?" + +#~ msgid "Are you sure you wish to eject Audio CD %1 - %2?" +#~ msgstr "Biztosan ki szeretnéd adni a hang CD-t %1 - %2" + +#~ msgid "Are you sure you wish to disconnect %1?" +#~ msgstr "Biztosan le szeretnéd csatlakoztatni %1?" + +#~ msgid "" +#~ "

    The following variables will be replaced with their corresponding " +#~ "meaning for each track name.

    " +#~ msgstr "" +#~ "

    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 "" +#~ "

    Cantata will query your library using all of the rules listed. The " +#~ "list of Include rules will be used to build a set of songs that " +#~ "can be used. The list of Exclude rules will be used to build a set " +#~ "of songs that cannot be used. If there are no Include rules, " +#~ "Cantata will assume that all songs (bar those from Exclude) can be " +#~ "used.
    e.g. to have Cantata look for 'Rock songs by Wibble OR songs " +#~ "by Various Artists', you would need the following:

    • Include " +#~ "AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various " +#~ "Artists
    To have Cantata look for 'Songs by Wibble but not from " +#~ "album Abc', you would need the following:
    • Include " +#~ "AlbumArtist=Wibble
    • Exclude Album=Abc
    After the set of " +#~ "usable songs has been created, Cantata will randomly select songs to keep " +#~ "the play queue filled with 10 entries.

    " +#~ msgstr "" +#~ "

    A Cantata a felsorolt szabályok szerint végignézi a könyvtáradat. A " +#~ "Hozzávesz szabályokat a szóba jöhető dalokból összeállítás " +#~ "készítésére használja. A Kizár szabályokat fel nem használható " +#~ "dalok összegyűjtésére használja. Hozzávesz szabályok hiányát, a " +#~ "Cantata úgy értelmezi, hogy az összes dal (a Kizár kivételével) " +#~ "felhasználható.
    pl. hogy a Cantata 'Wibble VAGY Válogatott előadók " +#~ "rock dalokat gyűjtse', a következők kellenek:

    • Hozzávesz " +#~ "AlbumElőadó=Wibble Műfaj=Rock
    • Hozzávesz AlbumElőadó=Vegyes " +#~ "előadók
    . Hogy a Cantata keresse a 'Wibble dalokat, de nem az " +#~ "ABC albumból', a következők kellenek:
    • Hozzávesz " +#~ "AlbumElőadó=Wibble
    • Kizár Album=Abc
    . 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.

    " + +#~ 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 "

    Delete all from the following?

      %1

    " +#~ msgstr "

    Innentől kezdve mindent töröl?

      %1

    " + +#~ 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 "" +#~ "%1 is used to store favorite streams, please choose another name." +#~ msgstr "" +#~ "A(z) %1 használatban van a kedvenc adatfolyamok tárolására, kérem " +#~ "válasszon másik nevet." + +#~ msgid "A playlist named %1 already exists!
    Add to that playlist?" +#~ msgstr "" +#~ "A(z) %1 lejátszási lista már létezik!
    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 "" +#~ "

    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.

    The following ReplayGain settings may be used:" +#~ "

    • None - No ReplayGain is applied.
    • Track - " +#~ "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's " +#~ "ReplayGain tags.
    • Auto - Volume will be adjusted using the " +#~ "track's ReplayGain tags if random play is activated, otherwise the " +#~ "album's tags will be used.

    " +#~ msgstr "" +#~ "

    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.

    A következő " +#~ "Lejátszási szint beállítások használhatók:

    • Semmi - Nincs " +#~ "beállítva szint.
    • Szám - A hangerőt a számok ReplayGain " +#~ "címkéi alapján állítja be.
    • Album - A hangerőt az albumok " +#~ "ReplayGain címkéi alapján állítja be.
    • Automatikus - 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.

    " + +#~ 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 %1 already exists!
    Overwrite?" +#~ msgstr "A(z) %1 lejátszási lista létezik!
    Felülírjam?" + +#~ msgid "" +#~ "Which type of collection do you wish to connect to?
    • Standard " +#~ "- music collection may be shared, is on another machine, or is already " +#~ "setup
    • Basic - music collection is not shared with others, and " +#~ "Cantata will configure and control the MPD instance
    " +#~ msgstr "" +#~ "Milyen gyűjteménytípushoz akarsz csatlakozni?
    • Standard - " +#~ "zenegyűjtemény már megosztva másik gépen, vagy már be van állítva
    • Basic - zenegyűjtemény nincs megosztva más gépekkel, és a Cantata " +#~ "állítja be és vezérli az MPD példányt.
    " + +#~ msgid "Delete %1?" +#~ msgstr "Törlöd %1?" + +#~ 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 "(Priority: %1)" +#~ msgstr "(Prioritás: %1)" + +#~ msgid "Unsubscribe from %1?" +#~ msgstr "Leiratkozik innen %1?" + +#~ msgid "Refresh episode listing from %1?" +#~ msgstr "Frissíti a részek listáját innentől: %1?" + +#~ 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 "" +#~ "NOTE: 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)." +#~ msgstr "" +#~ "Megjegyzés: 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)." + +#~ msgid "" +#~ "NOTE: Connected to a Mopidy server (manual update required)." +#~ msgstr "" +#~ "Megjegyzés: Mopidy szerverhez kapcsolódva (kézi frissítés " +#~ "szükséges)." + +#~ msgid "" +#~ "NOTE: These settings are only valid, and editable, when the " +#~ "device is connected." +#~ msgstr "" +#~ "Megjegyzés: Ezek a beállítások csak akkor érvényesek és " +#~ "szerkeszthetők, ha az eszköz csatlakozik." + +#~ msgid "Ignore 'The' in artist names" +#~ msgstr "A 'The' elvetése az előadók nevében" + +#~ msgid "" +#~ "NOTE: These settings are only editable when the device is not " +#~ "connected." +#~ msgstr "" +#~ "Megjegyzés: Ezek a beállítások csak akkor szerkeszthetők, ha az " +#~ "eszköz nincs csatlakoztatva." + +#~ msgid "" +#~ "NOTE: If you enter a password here, it will be stored " +#~ "unencrypted in Cantata's config file. To have Cantata prompt for " +#~ "the password before accessing the share, set the password to '-'" +#~ msgstr "" +#~ "Megjegyzés: az itt megadott jelszó nyíltan 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." + +#~ msgid "" +#~ "NOTE: Due to the way sshfs works, a suitable ssh-askpass " +#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to " +#~ "enter the password." +#~ msgstr "" +#~ "Megjegyzés: az sshfs futási módja miatt, megfelelő ssh " +#~ "jelszóbekérő alkalmazás (ksshaskpass, ssh-askpass-gnome, stb.) kell " +#~ "jelszó beviteléhez." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "Megjegyzés: 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." + +#~ msgid "" +#~ "NOTE Only enter values for the tags you wish to be search on. " +#~ msgstr "" +#~ "Megjegyzés: csak azokhoz a címkékhez írj értéket, amelyekre " +#~ "keresni akarsz." + +#~ msgid "" +#~ "NOTE For genre, end string with an asterisk to match various " +#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +#~ msgstr "" +#~ "Megjegyzés: 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. " + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "Megjegyzés: 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. " + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "Megjegyzés: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')" + +#~ msgid "" +#~ "

    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.

    For more information on MPD itself, please " +#~ "refer to the MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings " +#~ "required for Cantata to function correctly.

    " +#~ msgstr "" +#~ "

    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.

    Az MPD-vel kapcsolatos további " +#~ "információkért fordulj az MPD honlapjához span style=\" text-decoration: underline; color:#0000ff;\">http://www." +#~ "musicpd.org

    Ez a varázsló átvezet a Cantata megfelelő " +#~ "működéséhez szükséges alapbeállításokon.<

    " + +#~ msgid "" +#~ "

    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:

    " +#~ msgstr "" +#~ "

    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):

    " + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "Megjegyzés: 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ó." + +#~ msgid "" +#~ "NOTE: When using a local socket the full absolute path to the " +#~ "socket needs to be set. (Port number is not required.)" +#~ msgstr "" +#~ "Megjegyzés: helyi csatlakozó használatakor a csatlakozó teljes, " +#~ "abszolút elérési útvonalát kell beállítani. (Portszám nem kell.)" + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "Megjegyzés: 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." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "Megjegyzés: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'." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "Megjegyzés: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." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "Megjegyzés: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." + +#~ msgid "" +#~ "NOTE: 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." +#~ "" +#~ msgstr "" +#~ "Megjegyzés: 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." + +#~ msgid "Covers:" +#~ msgstr "Borítók:" + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "Megjegyzés: 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." + +#~ 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 "" +#~ "

    This will change Cantata's interface as detailed:\n" +#~ "

    • Playback, and control, buttons will be 33% wider
    • Views " +#~ "will be 'flickable'
    • To drag items, you will need to 'touch' the " +#~ "top-left corner
    • Scrollbars will only be a few pixels wide
    • Actions (e.g. 'Add To Play Queue') will always be visible (not " +#~ "just when item is under mouse)
    • Spin buttons with have + and - " +#~ "buttons at the side of the text field

    " +#~ msgstr "" +#~ "

    Ez az alábbiak szerint változtatja meg a Cantata felületét:\n" +#~ "

    • a lejátszó és vezérlő gombok 33%-kal szélesebbek lesznek
    • a nézet 'kattintható' lesz
    • elemek húzásához 'érinteni' " +#~ "kell a bal felső sarkát
    • a görgetősávok csak néhány pontnyi " +#~ "szélesek lesznek
    • a műveletek (p. 'Hozzáadás a lejátszási sorhoz') " +#~ "mindig láthatók (nem csak az egérmutató által érintett)
    • a forgató " +#~ "gomboknak a szövegmező oldalánál + és - gombjai lesznek

    " + +#~ 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 "" +#~ "NOTE: Changing the 'Enforce single-click activation of items' " +#~ "setting will require a re-start of Cantata." +#~ msgstr "" +#~ "Megjegyzés: az 'Elemek egy-kattintásos aktiválása' " +#~ "engedélyezésekor a Cantata újraindítása szükséges." + +#~ msgid "" +#~ "NOTE: Changing the language setting will require a re-start of " +#~ "Cantata." +#~ msgstr "" +#~ "Megjegyzés:a nyelvi beállítások változtatása esetén a Cantata " +#~ "újraindítása szükséges." + +#~ msgid "" +#~ "NOTE: Changing the 'touch friendly' setting will require a re-" +#~ "start of Cantata." +#~ msgstr "" +#~ "Megjegyzés: a kinézet 'érintésbarát' beállításaihoz Cantata-t " +#~ "újra kell indítani." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "Megjegyzés: 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." + +#~ msgid "" +#~ "NOTE: The 'Music folder' setting is used to lookup cover-art " +#~ "(either the value specified above, or cover.jpg / cover.png " +#~ "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 "" +#~ "Megjegyzés: 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 borító.jpg / " +#~ "borító.png 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." + +#~ msgid "" +#~ "NOTE: '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 "" +#~ "Megjegyzés: 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." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "Megjegyzés: 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." + +#~ msgid "" +#~ "NOTE: If no setting is specified for 'Cover filename, then " +#~ "Cantata will use a default of cover " +#~ msgstr "" +#~ "Megjegyzés: Ha a 'Borító fájlneve' nincs meghatározva, akkor a " +#~ "Cantata a borító alapbeállítást használja" + +#~ msgid "" +#~ "NOTE: 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.

    \n" +#~ "NOTE: If you choose 'Local loopback' for 'Network interface', then " +#~ "MPD must also be on this computer.
    " +#~ msgstr "" +#~ "Megjegyzés: 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.

    \n" +#~ "Megjegyzés: ha a hálózati interfésznek a 'helyi visszacsatolást' " +#~ "választod, akkor az MPD-nek is ezen a gépen kell lennie.
    " + +#~ msgid "" +#~ "NOTE: These settings apply to Digitally Imported, JazzRadio." +#~ "com, RockRadio.com, and Sky.fm" +#~ msgstr "" +#~ "Megjegyzés: a beállítások ezekre érvényesek: Digitally " +#~ "Imported, JazzRadio.com, RockRadio.com és Sky.fm." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "Megjegyzés: 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." + +#~ msgid "" +#~ "NOTE: Built-in categories are shown in italic, and these cannot " +#~ "be removed." +#~ msgstr "" +#~ "Megjegyzés: a dőlt betűsek beépített beállítások, és nem lehet " +#~ "eltávolítani őket." + +#~ msgid "" +#~ "NOTE Multiple genres should be separated via a semicolon (e.g. " +#~ "'Rock;Hard Rock')" +#~ msgstr "" +#~ "Megjegzés: a többes műfaji megjelöléseket pontosvesszővel kell " +#~ "elválasztani (p. 'Rock;Hard Rock')" + +#~ msgid "" +#~ "Scan all tracks?

    NOTE: All tracks have existing " +#~ "ReplayGain tags." +#~ msgstr "" +#~ "Az összes számot átnézzem?

    Megjegyzés: minden szám " +#~ "rendelkezik lejátszási szint címkével." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "Megjegyzés: 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." + +#~ msgid "Failed to install %1" +#~ msgstr "Nem sikerült telepíteni %1" + +#~ msgid "Failed to download %1" +#~ msgstr "Nem sikerült letölteni %1" + +#~ 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 %1!" +#~ msgstr "Létrehozás sikertelen %1!" + +#~ msgid "Stream already exists!
    %1" +#~ msgstr "Létező stream!
    %1" + +#~ msgid "A stream named %1 already exists!" +#~ msgstr "A nevezett stream %1 már létezik!" + +#~ msgid "Reload %1 streams?" +#~ msgstr "%1 stream-ek újratöltése?" + +#~ msgid "Are you sure you wish to remove bookmark to %1?" +#~ msgstr "Biztosan eltávolítanád a könyvjelzőjét ennek: %1?" + +#~ msgid "Are you sure you wish to remove all %1 bookmarks?" +#~ msgstr "Biztosan eltávolítanád az összes %1 könyvjelzőt?" + +#~ msgid "Are you sure you wish to remove %1?" +#~ msgstr "Biztosan eltávolítanád ezt %1?" + +#~ msgid "A category named %1 already exists!
    Overwrite?" +#~ msgstr "Már van %1 nevű lejátszási lista!
    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 all tracks?" +#~ msgstr "" +#~ "A 'Cím', 'Előadó', 'Album előadó' és 'Album' első betűjének nagyra " +#~ "váltása az összes számnál?" + +#~ msgid "Source file does not exist!
    %1" +#~ msgstr "Forrásfájl nem létezik!
    %1" + +#~ msgid "Destination file already exists!
    %1" +#~ msgstr "A célfájl már létezik!
    " + +#~ msgid "Failed to create destination folder!
    %1" +#~ msgstr "Nem sikerült létrehozni a könyvtárat!
    %1" + +#~ msgid "Failed to rename %1 to %2" +#~ msgstr "Nem sikerült %1 átnevezése %2-re" + +#~ msgid "" +#~ "

    Cannot access song files!

    Please check Cantata's \"Music " +#~ "folder\" setting, and MPD's \"music_directory\" setting.

    " +#~ msgstr "" +#~ "

    Nem tudom elérni a dalok fájljait!

    Ellenőrizd a Cantata " +#~ "\"Zenekönyvtárát\" és az MPD \"music_directory\" (zenekönyvtár) " +#~ "beállításait.

    " + +#~ msgid "" +#~ "

    Cannot access song files!

    Please check that the device is " +#~ "still attached.

    " +#~ msgstr "" +#~ "

    Nem tudom elérni a dalok fájljait!

    Ellenőrizd, hogy az eszköz " +#~ "csatlakozik-e még.

    " + #~ msgid "TextLabel" #~ msgstr "Szövegcímke" @@ -7329,9 +8366,6 @@ #~ msgid " seconds" #~ msgstr " másodperc" -#~ msgid "Devices:" -#~ msgstr "Eszközök:" - #~ msgid "Current URL:" #~ msgstr "Jelenlegi URL:" diff -Nru cantata-1.4.2.ds1/po/ko.po cantata-1.5.2.ds2/po/ko.po --- cantata-1.4.2.ds1/po/ko.po 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/po/ko.po 2015-03-23 20:09:39.000000000 +0000 @@ -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 \n" -"Language-Team: LANGUAGE \n" +"Language-Team: Minho Park \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,10 +23,10 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ #. 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 @@ 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 @@ 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 @@ "디스크에서 다시 읽거나, 아니면 디스크 복사본을 지우고 내려받을까요?" #: 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 @@ 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 @@ #. 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 @@ msgid "Songs To Be Copied" msgstr "복사할 곡" -#: devices/actiondialog.cpp:153 +#: devices/actiondialog.cpp:151 msgid "INVALID" msgstr "무효" -#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170 +#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168 msgid "(When different)" 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" @@ -481,328 +500,342 @@ "다. 따라서, 칸타타를 중지하고 수동으로 데이터베이스를 읽은 다음에 다시 실행하" "시기 바랍니다." -#: 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 "" -"

    You have not configured the destination device.
    Continue with the " -"default settings?

    " -msgstr "

    대상 장치가 설정되지 않았습니다.
    기본 설정으로 계속할까요?

    " +"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 "" -"

    You have not configured the source device.
    Continue with the default " -"settings?

    " -msgstr "

    원본 장치가 설정되지 않았습니다.
    기본 설정으로 계속할까요?

    " +"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!
    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.
    (Required for transcoding to MTP " "devices.)" msgstr "임시 파일을 만들 수 없음.
    (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 "" -"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " -"'Title' to \"TrackArtist - TrackTitle\"" +"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" -msgstr "\"여러 연주자\" 해결을 되돌림" +#: devices/albumdetailsdialog.cpp:253 +msgid "Revert \"Various Artists\" workaround?" +msgstr "\"여러 연주자\" 해결을 되돌릴까요?" -#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502 +#: 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.

    If 'Title' " -"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " -"will be set to \"Wobble\"
    " +"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 "" -"'음반연주자'가 \"곡 연주자 - 곡 제목\" 형태의 '연주자'와 '제목'이 같다면, " -"'연주자'는 '제목'으로부터 나오고 '제목' 자체는 제목으로 설정됩니다. 예로

    '제목'이 \"유재하 - 내 마음에 비친 내 모습\"이고 '연주자'가 \"유재하" -"\"로 설정되면, '제목'은 \"내 마음에 비친 내 모습\"이 됩니다.
    " +"'음반연주자'가 '연주자'와 같고 '제목'이 \"곡 연주자 - 곡 제목\" 형태이면, '연" +"주자'는 '제목'으로부터 나오고 '제목'은 제목자체로부터 설정됩니다. 예로 \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 @@ #. 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 @@ 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 "" -"

    Which type of refresh do you wish to perform?

    • Partial - Only new " -"songs are scanned (quick)
    • Full - All songs are rescanned " -"(slow)

    " -msgstr "" -"

    어떻게 새로 읽을까요?

    • 부분 - 새 음악만 읽기 (빠름)
    • " -"전체 - 모든 음악 다시 읽기 (느림)

    " +#: 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 "" "선택된 곡을 지울까요?\n" +"\n" "되돌릴 수 없습니다." -#: devices/devicespage.cpp:525 -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 %1 - %2?" -msgstr "오디오 CD %1 - %2을 뺄까요?" +#: devices/devicespage.cpp:521 +msgid "Are you sure you wish to forget '%1'?" +msgstr "'%1'을 무시할까요?" + +#: 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 %1?" -msgstr "%1을 끊을까요?" +#: 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 @@ "생기에서 음악 듣기에 좋은 선택입니다.
    120kb/s 이하는 음악이 불만족" "스러울 수 있습니다.205kb/s 이상은 너무 높을 수 있습니다." -#: 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 @@ "%8B%A4>애플 무손실 (ALAC)은 디지털 음악의 무손실 압축을 위한 오디오 코덱" "입니다.
    애플 제품이나 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 @@ #: devices/filenameschemedialog.cpp:121 msgid "" -"

    The following variables will be replaced with their corresponding meaning " -"for each track name.

    " -msgstr "

    아래 변수는 각 곡명의 해당되는 의미에 따라 바뀝니다.

    " +"The following variables will be replaced with their corresponding meaning " +"for each track name." +msgstr "아래 변수는 각 곡명에 해당하는 뜻에 따라 바뀝니다." -#: devices/filenameschemedialog.cpp:123 +#: devices/filenameschemedialog.cpp:127 msgid "" "
    VariableButtonDescription
    변수단추설명
    Server
    Protocol: %1.%2.%3
    Uptime:" @@ -2585,7 +2613,7 @@ "tr>
    처리: %6
    태그: %7
    Database
    Artists: %1
    Albums: 지속시간: %4
    " "업데이트: %5
    Composer:%1
    작곡가:%1
    Performer:%1
    공연가:%1
    Artist:%1
    Album:%2
    Year:" @@ -6534,7 +6787,7 @@ msgid "All Genres" msgstr "모든 장르" -#: widgets/itemview.cpp:628 +#: widgets/itemview.cpp:681 msgid "Go Back" msgstr "돌아가기" @@ -6542,15 +6795,19 @@ msgid "Menu" msgstr "메뉴" -#: widgets/playqueueview.cpp:300 +#: widgets/notelabel.cpp:67 +msgid "NOTE: %1" +msgstr "참고: %1" + +#: 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 @@ #: widgets/songdialog.cpp:49 msgid "" -"

    Cannot access song files!

    Please check Cantata's \"Music folder" -"\" setting, and MPD's \"music_directory\" setting.

    " +"Cannot access song files!\n" +"\n" +"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory" +"\" setting." msgstr "" -"

    음악 파일에 접근할 수 없음!

    칸타타의 \"Music folder\"와 MPD의 " -"\"music_directory\" 설정을 확인해야 합니다.

    " +"곡 파일에 접근할 수 없음!\n" +"\n" +"칸타타의 \"음악 폴더\"와, MPD의 \"music_directory\" 설정을 확인 바랍니다." #: widgets/songdialog.cpp:52 msgid "" -"

    Cannot access song files!

    Please check that the device is still " -"attached.

    " +"Cannot access song files!\n" +"\n" +"Please check that the device is still attached." msgstr "" -"

    음악 파일에 접근할 수 없음!

    장치가 아직 연결되어 있는지 확인해야 " -"합니다.

    " +"곡 파일에 접근할 수 없음!\n" +"\n" +"장치가 아직 연결되어 있는지 확인 바랍니다." -#: widgets/tableview.cpp:88 +#: widgets/tableview.cpp:92 msgid "Stretch Columns To Fit Window" msgstr "칸을 늘려 윈도에 맞추기" @@ -6714,6 +6976,729 @@ 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 "" +#~ "

    You have not configured the destination device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    대상 장치가 설정되지 않았습니다.
    기본 설정으로 계속할까요?

    " + +#~ msgid "" +#~ "

    You have not configured the source device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    원본 장치가 설정되지 않았습니다.
    기본 설정으로 계속할까요?

    " + +#~ msgid "" +#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and " +#~ "'Album'" +#~ msgstr "'제목', '연주자', '음반연주자', '음반'의 첫 글자를 대문자로 만듬" + +#~ msgid "" +#~ "

    Which type of refresh do you wish to perform?

    • Partial - Only " +#~ "new songs are scanned (quick)
    • Full - All songs are " +#~ "rescanned (slow)

    " +#~ msgstr "" +#~ "

    어떻게 새로 읽을까요?

    • 부분 - 새 음악만 읽기 (빠름)
    • 전체 - 모든 음악 다시 읽기 (느림)

    " + +#~ 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 %1?" +#~ msgstr "%1을 무시할까요?" + +#~ msgid "Are you sure you wish to eject Audio CD %1 - %2?" +#~ msgstr "오디오 CD %1 - %2을 뺄까요?" + +#~ msgid "Are you sure you wish to disconnect %1?" +#~ msgstr "%1을 끊을까요?" + +#~ msgid "" +#~ "

    The following variables will be replaced with their corresponding " +#~ "meaning for each track name.

    " +#~ msgstr "

    아래 변수는 각 곡명의 해당되는 의미에 따라 바뀝니다.

    " + +#~ 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 "" +#~ "

    Cantata will query your library using all of the rules listed. The " +#~ "list of Include rules will be used to build a set of songs that " +#~ "can be used. The list of Exclude rules will be used to build a set " +#~ "of songs that cannot be used. If there are no Include rules, " +#~ "Cantata will assume that all songs (bar those from Exclude) can be " +#~ "used.
    e.g. to have Cantata look for 'Rock songs by Wibble OR songs " +#~ "by Various Artists', you would need the following:

    • Include " +#~ "AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various " +#~ "Artists
    To have Cantata look for 'Songs by Wibble but not from " +#~ "album Abc', you would need the following:
    • Include " +#~ "AlbumArtist=Wibble
    • Exclude Album=Abc
    After the set of " +#~ "usable songs has been created, Cantata will randomly select songs to keep " +#~ "the play queue filled with 10 entries.

    " +#~ msgstr "" +#~ "

    칸타타는 등록된 모든 규정을 이용하여 라이브러리를 조회합니다. 포함된 규정 항목은 사용될 곡들을 선별하는 데에 사용됩니다. 제외된 규" +#~ "정 항목은 사용되지 않을 곡들을 선별하는 데에 사용됩니다. 포함된 규" +#~ "정이 없으면, 전곡(제외된 규정을 제외하고)을 사용할 수 있다고 가정합" +#~ "니다.
    예로 '유재하의 Ballad 및 여러 연주자의 곡'을 선택하려면 다음과 " +#~ "같이 하면 됩니다:

    • 포함 음반연주자=유재하 장르=Ballad
    • 포함 " +#~ "음반연주자=여러 연주자
    '유재하의 모든 곡 중에 미련 음반을 제" +#~ "외'하려면:
    • 포함 음반연주자=유재하
    • 제외 음반=미련
    " +#~ "사용할 곡들이 만들어지면 칸타타는 무작위로 곡들을 선택하여 연주순서에 10" +#~ "개 항목을 유지합니다.

    " + +#~ msgid "" +#~ "A set of rules named '%1' already exists!\n" +#~ "Overwrite?" +#~ msgstr "" +#~ "규정 이름인 '%1'는 이미 있음!\n" +#~ "덮어쓸까요?" + +#~ msgid "

    Delete all from the following?

      %1

    " +#~ msgstr "

    아래 전부를 지웁니까?

      %1

    " + +#~ 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 "" +#~ "%1 is used to store favorite streams, please choose another name." +#~ msgstr "" +#~ "%1이 선호하는 스트림을 저장하기 위해 사용되므로, 다른 이름을 선택합" +#~ "니다." + +#~ msgid "A playlist named %1 already exists!
    Add to that playlist?" +#~ msgstr "연주목록 이름 %1이 이미 있습니다!
    연주목록에 추가할까요?" + +#~ msgid "Can only edit tags of songs within MPD's music collection." +#~ msgstr "MPD 음원에 있는 곡의 태그만 수정할 수 있습니다." + +#~ 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.

    The following ReplayGain settings may be used:" +#~ "

    • None - No ReplayGain is applied.
    • Track - " +#~ "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's " +#~ "ReplayGain tags.
    • Auto - Volume will be adjusted using the " +#~ "track's ReplayGain tags if random play is activated, otherwise the " +#~ "album's tags will be used.

    " +#~ msgstr "" +#~ "

    리플레이게인은 MP3나 Ogg Vorbis 같은 오디오 포맷의 소리 크기를 맞추기 " +#~ "위하여 2001년에 제안된 표준입니다. 곡이나 음반 단위로 작동하며 이제는 점" +#~ "점 더 많은 연주기가 지원합니다.

    아래 설정이 사용될 수 있습니다:" +#~ "

    • 안 함 - 리플레이게인을 적용 안 함.
    • - 곡" +#~ "의 리플레이게인 태그를 이용하여 음량을 조정함.
    • 음반 - 음반" +#~ "의 리플레이게인 태그를 이용하여 음량을 조정함.
    • 자동 - 무작" +#~ "위연주는 곡의 리플레이게인 태그를, 그 밖은 음반의 태그를 이용하여 음량을 " +#~ "조정함.

    " + +#~ msgid "" +#~ "Are you sure you wish to remove the selected playlists?\n" +#~ "This cannot be undone." +#~ msgstr "" +#~ "선택된 연주목록을 지울까요?\n" +#~ "돌이킬 수 없습니다." + +#~ msgid "A playlist named %1 already exists!
    Overwrite?" +#~ msgstr "연주목록 이름 %1은 이미 있습니다!
    덮어쓸까요?" + +#~ msgid "" +#~ "Which type of collection do you wish to connect to?
    • Standard " +#~ "- music collection may be shared, is on another machine, or is already " +#~ "setup
    • Basic - music collection is not shared with others, and " +#~ "Cantata will configure and control the MPD instance
    " +#~ msgstr "" +#~ "어떤 형식의 음원에 연결할까요?
    • 표준 - 다른 컴퓨터에 연결되거" +#~ "나 이미 설정되어, 음원을 공유할 수 있음
    • 기본 - 음원이 공유되지 않" +#~ "고 MPD만 설정하고 관리함
    " + +#~ msgid "Delete %1?" +#~ msgstr "%1을 지울까요?" + +#~ 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 "(Priority: %1)" +#~ msgstr "(우선순위: %1)" + +#~ msgid "Unsubscribe from %1?" +#~ msgstr "%1을 구독 취소할까요?" + +#~ msgid "Refresh episode listing from %1?" +#~ msgstr "%1의 팟캐스트 항목을 새로 읽을까요?" + +#~ 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 "" +#~ "NOTE: 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)." +#~ msgstr "" +#~ "참고: 칸타타는 위키피디아의 이미지나 링크가 포함된 전체 페이지" +#~ "가 아니라, 이를 단순화해서 보여줍니다. 이 단순화는 항상 100% 정확하지는 않" +#~ "아서, 기본 본문을 보여주게 됩니다. 전체 본문에서는 오류가 있을 수 있습니" +#~ "다. 또한 '캐시' 설정을 이용하여 저장된 기본 본문을 지워야 합니다." + +#~ msgid "" +#~ "NOTE: Connected to a Mopidy server (manual update required)." +#~ msgstr "참고: Mopidy 서버에 연결됨 (수동 업데이트 필요)." + +#~ msgid "" +#~ "NOTE: These settings are only valid, and editable, when the " +#~ "device is connected." +#~ msgstr "" +#~ "참고: 이 설정은 장치가 연결되었을 때에만 유효하고 수정할 수 있습" +#~ "니다." + +#~ msgid "Ignore 'The' in artist names" +#~ msgstr "연주자 이름에 'The' 무시" + +#~ msgid "" +#~ "NOTE: These settings are only editable when the device is not " +#~ "connected." +#~ msgstr "" +#~ "참고: 이 설정은 장치가 연결되지 않았을 때에만 수정할 수 있습니" +#~ "다." + +#~ msgid "" +#~ "NOTE: If you enter a password here, it will be stored " +#~ "unencrypted in Cantata's config file. To have Cantata prompt for " +#~ "the password before accessing the share, set the password to '-'" +#~ msgstr "" +#~ "참고: 여기에 비밀번호를 입력하면, 설정 파일에 비 암호화되" +#~ "어 저장됩니다. 공유에 접근하기 전에 비밀번호를 입력하려면, 비밀번호를 " +#~ "'-'로 설정합니다." + +#~ msgid "" +#~ "NOTE: Due to the way sshfs works, a suitable ssh-askpass " +#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to " +#~ "enter the password." +#~ msgstr "" +#~ "참고: sshfs의 작동 원리에 따라, 적당한 ssh-askpass 응용프로그램" +#~ "(ksshaskpass, ssh-askpass-gnome, 등.)이 비밀번호 입력을 위해 필요합니다." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "참고: 이 대화상자는 원격장치를 삼바(Samba)등으로 추가하거나 로" +#~ "컬 마운트된 폴더에 연결할 때만 사용됩니다. 일반적인 미디어 연주기나 USB 장" +#~ "치는 연결되면 자동으로 표시됩니다." + +#~ msgid "" +#~ "NOTE Only enter values for the tags you wish to be search on. " +#~ msgstr "참고 찾고자 하는 태그값만 입력합니다. " + +#~ msgid "" +#~ "NOTE For genre, end string with an asterisk to match various " +#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +#~ msgstr "" +#~ "참고 장르에서 별표(*)로 끝나는 문자열은 다양한 장르를 포함합니" +#~ "다. 예) 'rock*'은 'Hard Rock'과 'Rock and Roll'을 포함. " + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "참고: 음악폴더에 음반표지, 가사 또는 배경을 저장하고, 이 폴더에 " +#~ "쓰기 권한이 없다면, 개인 캐시 폴더에 파일들을 다시 저장하기 시작합니다." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "참고: 두 단계 이상이면 배경이나 음반 이미지를 음악 폴더에 저장합" +#~ "니다. (즉, '연주자/음반/곡')" + +#~ msgid "" +#~ "

    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.

    For more information on MPD itself, please " +#~ "refer to the MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings " +#~ "required for Cantata to function correctly.

    " +#~ msgstr "" +#~ "

    칸타타는 기능이 다양하고 사용하기가 편리한 Music " +#~ "Player Daemon (MPD) 클라이언트 입니다. MPD는 음악 연주에 사용되는 백그라운" +#~ "드 어플입니다.

    MPD에 대한 더 많은 정보는, 다음 웹사이트를 참조 바랍" +#~ "니다. http://www.musicpd.org

    이 '마" +#~ "법사'는 칸타타가 제대로 동작하기 위한 사용자의 기본 설정을 돕습니다.

    " + +#~ msgid "" +#~ "

    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:

    " +#~ msgstr "" +#~ "

    칸타타는 기능이 다양하고 사용하기가 편리한 Music " +#~ "Player Daemon (MPD) 클라이언트 입니다. MPD는 음악 연주에 사용되는 백그라운" +#~ "드 어플입니다. MPD는 시스템이나 사용자 기반에서 시작할 수 있습니다. 칸타타" +#~ "가 처음에 어떻게 MPD에 연결되고 시작할 지를 선택합니다:

    " + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "참고: '음악 폴더' 설정은 음반표지나 가사 등을 찾기 위해 사용됩니" +#~ "다. 만약 MPD가 원격 호스트에 있다면 HTTP URL로 설정할 수 있습니다." + +#~ msgid "" +#~ "NOTE: When using a local socket the full absolute path to the " +#~ "socket needs to be set. (Port number is not required.)" +#~ msgstr "" +#~ "참고: 로컬소켓을 사용할 때는 절대경로로 설정되어야 합니다 (포트" +#~ "번호는 필요 없음)." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "참고: 칸타타에서 쓰기 권한이 없는 음악 폴더에 음반 표지를 저장하" +#~ "면, 개인 캐시 폴더에 대신 저장하게 됩니다. 하지만 스트림은 쓰기 권한이 없" +#~ "다면, 음악 폴더에 저장된 스트림을 보고 연주할 수만 있으며 추가하거나 수정" +#~ "할 수는 없습니다. 스트림을 음악 폴더에 저장하지 않으면, 로컬 설정 폴더에 " +#~ "저장되며 해당 사용자만 접근할 수 있습니다." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "참고: 두 단계 이상이면 배경이나 음반 이미지를 음악 폴더에 저장합" +#~ "니다. 즉, '연주자/음반/곡'" + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "참고: '음악 폴더'가 HTTP 주소로 지정되어, 외부 HTTP 서버에 파일" +#~ "을 올릴 수 없습니다. 따라서 위의 설정은 사용하지 않아야 합니다." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "참고: 기본적으로 연주순서는 다른 보기의 옆에 보입니다. 위를 선택" +#~ "한 경우에는, 다른 보기처럼 옆줄에 합쳐집니다." + +#~ msgid "" +#~ "NOTE: 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." +#~ "" +#~ msgstr "" +#~ "참고: 기본적으로 '정보'(지금 곡 정보) 보기는 주 메뉴의 아이콘을 " +#~ "누르면 사용할 수 있습니다. 위를 선택한 경우에는, 다른 보기처럼 옆줄에 합쳐" +#~ "집니다." + +#~ msgid "Covers:" +#~ msgstr "표지:" + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "참고: 연주자이미지를 찾을 때, 지금 곡이 있는 폴더나 상위 폴더의 " +#~ "artist.jpg, artist.png, '연주자'.jpg 또는 '연주자'.png\n" +#~ "를 찾습니다.만약 이미지를 찾지 못하면 내려받기를 시도합니다." + +#~ 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 "" +#~ "

    This will change Cantata's interface as detailed:\n" +#~ "

    • Playback, and control, buttons will be 33% wider
    • Views " +#~ "will be 'flickable'
    • To drag items, you will need to 'touch' the " +#~ "top-left corner
    • Scrollbars will only be a few pixels wide
    • Actions (e.g. 'Add To Play Queue') will always be visible (not " +#~ "just when item is under mouse)
    • Spin buttons with have + and - " +#~ "buttons at the side of the text field

    " +#~ msgstr "" +#~ "

    칸타타의 인터페이스를 아래와 같이 바꿉니다:\n" +#~ "

    • 연주와 컨트롤버튼은 33% 더 넓어집니다
    • 보기는 '깜빡'거립니" +#~ "다
    • 드래그하려면, 상단-좌측 모서리를 '터치'해야 합니다
    • 스크" +#~ "롤바는 조금 넓어집니다
    • 동작(예. '연주순서 추가')는 항상 보입니다 " +#~ "(마우스아래에 항목이 있지 않아도)
    • 회전 단추가 문자영역 옆에 +와 -" +#~ "를 가집니다

    " + +#~ msgid "Show stop button in toolbar" +#~ msgstr "툴바에 정지 단추 보기" + +#~ msgid "Show cover of current track in toolbar" +#~ msgstr "툴바에 지금 곡 표지 보기" + +#~ msgid "" +#~ "NOTE: Changing the 'Enforce single-click activation of items' " +#~ "setting will require a re-start of Cantata." +#~ msgstr "" +#~ "참고: '한 번 클릭 사용' 설정을 바꾸면 다시 시작해야 합니다." + +#~ msgid "" +#~ "NOTE: Changing the language setting will require a re-start of " +#~ "Cantata." +#~ msgstr "참고: 언어 설정을 바꾸면 다시 시작해야 합니다." + +#~ msgid "" +#~ "NOTE: Changing the 'touch friendly' setting will require a re-" +#~ "start of Cantata." +#~ msgstr "" +#~ "참고: '터치 친화적' 설정을 바꾸면 다시 시작해야 합니다." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "참고: 정지 단추를 누르고 있으면, 바로 정지할지 지금 곡 다음에 정" +#~ "지할지를 선택하는 메뉴가 보입니다." + +#~ msgid "" +#~ "NOTE: The 'Music folder' setting is used to lookup cover-art " +#~ "(either the value specified above, or cover.jpg / cover.png " +#~ "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 "" +#~ "참고: '음악 폴더' 설정은 표지그림을 찾기 위해 사용됩니다 (위에" +#~ "서 설정된 값 또는 설정되지 않았다면 cover.jpg/cover.png). 이 " +#~ "폴더에 쓰기 권한이 있다면 내려받은 표지를 각각의 음반 폴더에 저장합니다." + +#~ msgid "" +#~ "NOTE: '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 "" +#~ "참고: 'HTTP 스트림 URL'은 MPD가 HTTP 스트림으로 출력하도록 설정" +#~ "되어있고, 칸타타로 그 스트림을 연주할 때에만 의미가 있습니다." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "참고: '음악폴더' 설정을 바꾸면, 음악데이터베이스를 직접 업데이트" +#~ "해야 합니다. 이는 '연주자'나 '음반' 보기의 '데이터베이스 새로 읽기' 단추" +#~ "를 누르면 됩니다." + +#~ msgid "" +#~ "NOTE: If no setting is specified for 'Cover filename, then " +#~ "Cantata will use a default of cover " +#~ msgstr "" +#~ "참고: '표지 파일이름'에 설정이 되어 있지 않으면 기본 " +#~ "cover를 사용합니다 " + +#~ msgid "" +#~ "NOTE: 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.

    \n" +#~ "NOTE: If you choose 'Local loopback' for 'Network interface', then " +#~ "MPD must also be on this computer.
    " +#~ msgstr "" +#~ "참고: MPD는 주로 음악 폴더에 저장된 음악만 연주합니다. 칸타타는 " +#~ "파일을 MPD로 서비스하는 최소한의 HTTP 서버 역할을 합니다. 다만, 칸타타가 " +#~ "실행되는 한에서만 작동합니다.

    \n" +#~ "참고: 만약 '네트워크 연결'에 '로컬 루프백'을 선택한다면, MPD가 이 " +#~ "컴퓨터에 반드시 있어야 합니다.
    " + +#~ msgid "" +#~ "NOTE: These settings apply to Digitally Imported, JazzRadio." +#~ "com, RockRadio.com, and Sky.fm" +#~ msgstr "" +#~ "참고: 이 설정은 Digitally Imported, JazzRadio.com, RockRadio." +#~ "com, Sky.fm에만 적용됩니다." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "참고: 계정을 입력하면, 스트림 항목 아래에 로그인 여부를 나타내" +#~ "는 'DI' 상황이 표시됩니다." + +#~ msgid "" +#~ "NOTE: Built-in categories are shown in italic, and these cannot " +#~ "be removed." +#~ msgstr "" +#~ "참고: 기본 설치된 카테고리는 기울어져 보이는데, 이는 삭제할 수 " +#~ "없습니다." + +#~ msgid "" +#~ "NOTE Multiple genres should be separated via a semicolon (e.g. " +#~ "'Rock;Hard Rock')" +#~ msgstr "" +#~ "참조 다중 장르는 세미콜론으로 나뉘어야 합니다 (예. 'Rock;Hard " +#~ "Rock')" + +#~ msgid "" +#~ "Scan all tracks?

    NOTE: All tracks have existing " +#~ "ReplayGain tags." +#~ msgstr "" +#~ "곡을 검색할까요?

    참고: 전곡은 기존 리플레이게인을 가지" +#~ "고 있습니다." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "참고: (%1 같은)'(MPD를 통해서)'를 선택해서 스크로블링을 하려면, " +#~ "먼저 이를 명시하고 실행해야 합니다. 칸타타에서 곡을 '좋아요' 할 수만 있으" +#~ "며, 스크로블링을 가능하거나 불가능하게 할 수는 없습니다." + +#~ msgid "Failed to install %1" +#~ msgstr "%1 설치 실패함" + +#~ msgid "Failed to download %1" +#~ msgstr "%1 내려받기 실패함" + +#~ msgid "ListenLive" +#~ msgstr "ListenLive" + +#~ msgid "Install the following?" +#~ msgstr "아래를 설치합니까?" + +#~ msgid "Update the following?" +#~ msgstr "아래를 내려받습니까?" + +#~ msgid "Failed to create %1!" +#~ msgstr "%1을 만들 수 없음!" + +#~ msgid "Stream already exists!
    %1" +#~ msgstr "이미 있는 스트림!
    %1" + +#~ msgid "A stream named %1 already exists!" +#~ msgstr "스트림 %1은 이미 있습니다!" + +#~ msgid "Reload %1 streams?" +#~ msgstr "%1 스트림을 다시 읽을까요?" + +#~ msgid "Are you sure you wish to remove bookmark to %1?" +#~ msgstr "%1의 책갈피를 지울까요?" + +#~ msgid "Are you sure you wish to remove all %1 bookmarks?" +#~ msgstr "%1의 모든 책갈피를 지울까요?" + +#~ msgid "Are you sure you wish to remove %1?" +#~ msgstr "%1을 지울까요?" + +#~ msgid "A category named %1 already exists!
    Overwrite?" +#~ msgstr "카테고리 %1은 이미 있습니다!
    덮어쓸까요?" + +#~ msgid "Failed top open package file" +#~ msgstr "패키지 파일을 열 수 없음" + +#~ msgid "" +#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and " +#~ "'Album' of all tracks?" +#~ msgstr "" +#~ "곡의 '제목', '연주자', '음반연주자', '음반'의 첫 글자를 대문자로 " +#~ "할까요?" + +#~ msgid "Source file does not exist!
    %1" +#~ msgstr "원본 파일이 없습니다!
    %1" + +#~ msgid "Destination file already exists!
    %1" +#~ msgstr "대상 파일이 이미 있음!
    %1" + +#~ msgid "Failed to create destination folder!
    %1" +#~ msgstr "대상 폴더를 만들 수 없음!
    %1" + +#~ msgid "Failed to rename %1 to %2" +#~ msgstr "%1을 %2로 이름을 바꿀 수 없음" + +#~ msgid "" +#~ "

    Cannot access song files!

    Please check Cantata's \"Music " +#~ "folder\" setting, and MPD's \"music_directory\" setting.

    " +#~ msgstr "" +#~ "

    음악 파일에 접근할 수 없음!

    칸타타의 \"Music folder\"와 MPD의 " +#~ "\"music_directory\" 설정을 확인해야 합니다.

    " + +#~ msgid "" +#~ "

    Cannot access song files!

    Please check that the device is " +#~ "still attached.

    " +#~ msgstr "" +#~ "

    음악 파일에 접근할 수 없음!

    장치가 아직 연결되어 있는지 확인해" +#~ "야 합니다.

    " + #~ msgid "TextLabel" #~ msgstr "문자표" @@ -7197,9 +8182,6 @@ #~ msgid " seconds" #~ msgstr " 초" -#~ msgid "Devices:" -#~ msgstr "장치:" - #~ msgid "Current URL:" #~ msgstr "현재 URL:" @@ -7305,9 +8287,6 @@ #~ msgid "Disc %1" #~ msgstr "디스크 %1" -#~ msgid "Are you sure you wish to forget '%1'?" -#~ msgstr "'%1'을 무시할까요?" - #~ msgid "Biography" #~ msgstr "경력" @@ -7399,9 +8378,6 @@ #~ 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 -Nru cantata-1.4.2.ds1/po/pl.po cantata-1.5.2.ds2/po/pl.po --- cantata-1.4.2.ds1/po/pl.po 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/po/pl.po 2015-03-23 20:09:39.000000000 +0000 @@ -7,8 +7,8 @@ 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 \n" "Language-Team: Polish \n" "Language: pl\n" @@ -23,10 +23,10 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ #. 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 @@ 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 @@ 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 @@ "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 @@ 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 @@ #. 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 @@ msgid "Songs To Be Copied" msgstr "Utwory do skopiowania" -#: devices/actiondialog.cpp:153 +#: devices/actiondialog.cpp:151 msgid "INVALID" msgstr "NIEWŁAŚCIWY" -#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170 +#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168 msgid "(When different)" msgstr "(Gdy różne)" -#: 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 @@ "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 "" -"

    You have not configured the destination device.
    Continue with the " -"default settings?

    " +"You have not configured the destination device.\n" +"\n" +"Continue with the default settings?" msgstr "" -"

    Urządzenie docelowe nie zostało skonfigurowane.
    Czy kontynuować z " -"domyślnymi ustawieniami?

    " +"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 "" -"

    You have not configured the source device.
    Continue with the default " -"settings?

    " +"You have not configured the source device.\n" +"\n" +"Continue with the default settings?" msgstr "" -"

    Urządzenie źródłowe nie zostało skonfigurowane.
    Czy kontynuować z " -"domyślnymi ustawieniami?

    " +"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!
    Please check you have sufficient " "permissions." @@ -622,31 +650,31 @@ "Tworzenie katalogu docelowego nie powiodło się!
    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.
    (Required for transcoding to MTP " "devices.)" @@ -654,172 +682,174 @@ "Stworzenie pliku tymczasowego nie powiodło się.
    (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 "" -"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " -"'Title' to \"TrackArtist - TrackTitle\"" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" msgstr "" -"Spowoduje to ustawienie tagów 'ArtystaAlbumu' oraz 'Artysta' na wartość " -"\"Various Artists\", zaś tagu 'Tytuł' na \"ArtystaUtworu - TytułUtworu\"" - -#: devices/albumdetailsdialog.cpp:253 tags/tageditor.cpp:500 -msgid "Revert \"Various Artists\" workaround" -msgstr "Cofnij obejście dla 'Various Artists'" +"To ustawi tagi 'Artysta albumu' oraz 'Artysta' na \"Various Artists\" oraz " +"tag 'Tytuł' na \"Artysta utworu - Tytuł utworu\"" -#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502 -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.

    If 'Title' " -"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " -"will be set to \"Wobble\"
    " -msgstr "" -"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:

    Jeśli 'Tytuł' to " -"\"Wibble - Wobble\", wtedy 'Artysta' zostanie ustawiony na \"Wibble\" " -"natomiast 'Title' będzie miał wartość \"Wobble\"
    " +#: 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 +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 "" +"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 @@ #. 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 @@ 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 "" -"

    Which type of refresh do you wish to perform?

    • Partial - Only new " -"songs are scanned (quick)
    • Full - All songs are rescanned " -"(slow)

    " -msgstr "" -"

    Jaki rodzaj odświeżenia ma zostać wykonany?

    • Częściowy - tylko nowe " -"utwory zostaną przeskanowane (szybki)
    • Pełny - Wszystkie " -"utwory zostaną przeskanowane (wolny)

    " +#: 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:446 +msgid "Full - All songs are rescanned (slow)" +msgstr "Pełne - wszystkie utwory są skanowane (wolne)" -#: devices/devicespage.cpp:451 +#: 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 %1?" -msgstr "Czy na pewno zapomnieć %1?" - -#: devices/devicespage.cpp:544 -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:521 +msgid "Are you sure you wish to forget '%1'?" +msgstr "Czy na pewno zapomnieć '%1'?" -#: devices/devicespage.cpp:545 +#: 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:541 msgid "Eject" msgstr "Wysuń" -#: devices/devicespage.cpp:546 -msgid "Are you sure you wish to disconnect %1?" -msgstr "Czy na pewno rozłączyć się z %1?" +#: 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 @@ ">Wartości poniżej 120kb/s mogą nie być satysfakcjonujące dla muzyki, " "a wszystko powyżej 205kb/s 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 @@ "
    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 @@ #: devices/filenameschemedialog.cpp:121 msgid "" -"

    The following variables will be replaced with their corresponding meaning " -"for each track name.

    " +"The following variables will be replaced with their corresponding meaning " +"for each track name." msgstr "" -"

    Następujące zmienne zostaną zastąpione ich wartościami dla każdego pliku." -"

    " +"Następujące zmienne zostaną zastąpione ich znaczeniami dla każdego utworu." -#: devices/filenameschemedialog.cpp:123 +#: devices/filenameschemedialog.cpp:127 msgid "" "
    VariableButtonDescription
    ZmiennaPrzyciskOpis
    Server
    Protocol: %1.%2.%3
    Uptime:" @@ -2664,12 +2689,11 @@ msgstr "" "
    Serwer
    Protokół: %1.%2.%3
    Czas " -"pracy:" -" %4
    Odtwarzanie: " -"%5
    Obsługa URL: %6
    Tagi: %7
    %4
    Odtwarzanie: %5
    Obsługa URL: %6
    Tagi: %7
    Database
    Artists: %1
    Albums: Artyści: %1
    Albumy: %2
    Utwory: %3
    Czas trwania: %4
    Aktualizacja: %5
    %5
    Composer:%1
    Kompozytor:%1
    Performer:%1
    Wykonawca:%1
    Artist:%1
    Album:%2
    Year:" @@ -6722,7 +6975,7 @@ msgid "All Genres" msgstr "Wszystkie gatunki" -#: widgets/itemview.cpp:628 +#: widgets/itemview.cpp:681 msgid "Go Back" msgstr "Idź wstecz" @@ -6730,15 +6983,19 @@ msgid "Menu" msgstr "Menu" -#: widgets/playqueueview.cpp:300 +#: widgets/notelabel.cpp:67 +msgid "NOTE: %1" +msgstr "UWAGA: %1" + +#: 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 @@ #: widgets/songdialog.cpp:49 msgid "" -"

    Cannot access song files!

    Please check Cantata's \"Music folder" -"\" setting, and MPD's \"music_directory\" setting.

    " +"Cannot access song files!\n" +"\n" +"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory" +"\" setting." msgstr "" -"

    Brak dostępu do plików utworów!

    Proszę sprawdzić ustawienia " -"Cantaty \"Katalog z muzyką\" oraz ustawienie MPD \"music_directory\".

    " +"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 "" -"

    Cannot access song files!

    Please check that the device is still " -"attached.

    " +"Cannot access song files!\n" +"\n" +"Please check that the device is still attached." msgstr "" -"

    Brak dostępu do plików utworów!

    Proszę sprawdzić, czy urządzenie " -"jest nadal podłączone.

    " +"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 @@ 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 "" +#~ "

    You have not configured the destination device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    Urządzenie docelowe nie zostało skonfigurowane.
    Czy kontynuować z " +#~ "domyślnymi ustawieniami?

    " + +#~ msgid "" +#~ "

    You have not configured the source device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    Urządzenie źródłowe nie zostało skonfigurowane.
    Czy kontynuować z " +#~ "domyślnymi ustawieniami?

    " + +#~ 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 "" +#~ "

    Which type of refresh do you wish to perform?

    • Partial - Only " +#~ "new songs are scanned (quick)
    • Full - All songs are " +#~ "rescanned (slow)

    " +#~ msgstr "" +#~ "

    Jaki rodzaj odświeżenia ma zostać wykonany?

    • Częściowy - tylko " +#~ "nowe utwory zostaną przeskanowane (szybki)
    • Pełny - " +#~ "Wszystkie utwory zostaną przeskanowane (wolny)

    " + +#~ 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 %1?" +#~ msgstr "Czy na pewno zapomnieć %1?" + +#~ msgid "Are you sure you wish to eject Audio CD %1 - %2?" +#~ msgstr "Czy na pewno wysunąć płytę audio %1 - %2?" + +#~ msgid "Are you sure you wish to disconnect %1?" +#~ msgstr "Czy na pewno rozłączyć się z %1?" + +#~ msgid "" +#~ "

    The following variables will be replaced with their corresponding " +#~ "meaning for each track name.

    " +#~ msgstr "" +#~ "

    Następujące zmienne zostaną zastąpione ich wartościami dla każdego " +#~ "pliku.

    " + +#~ 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 "" +#~ "

    Cantata will query your library using all of the rules listed. The " +#~ "list of Include rules will be used to build a set of songs that " +#~ "can be used. The list of Exclude rules will be used to build a set " +#~ "of songs that cannot be used. If there are no Include rules, " +#~ "Cantata will assume that all songs (bar those from Exclude) can be " +#~ "used.
    e.g. to have Cantata look for 'Rock songs by Wibble OR songs " +#~ "by Various Artists', you would need the following:

    • Include " +#~ "AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various " +#~ "Artists
    To have Cantata look for 'Songs by Wibble but not from " +#~ "album Abc', you would need the following:
    • Include " +#~ "AlbumArtist=Wibble
    • Exclude Album=Abc
    After the set of " +#~ "usable songs has been created, Cantata will randomly select songs to keep " +#~ "the play queue filled with 10 entries.

    " +#~ msgstr "" +#~ "

    Cantata przeszuka bibliotekę używając wszystkich przypisanych reguł. " +#~ "Lista reguł Zawiera zostanie użyta do zbudowania zbioru utworów, " +#~ "które mogą zostać użyte. Lista reguł Nie zawiera zostanie użyta do " +#~ "zbudowania zbioru utworów, które nie będą użyte. Jeśli nie ma reguł typu " +#~ "Zawiera to Cantata zakłada, że wszystkie utwory (oprócz pasujących " +#~ "do reguł Nie zawiera) mogą zostać użyte.
    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: " +#~ "

    • Zawiera ArtystaAlbumu=Wibble Gatunek=Rock
    • Zawiera " +#~ "ArtystaAlbumu=Various Artists
    aby Cantata szukała 'Utworów w " +#~ "wykonaniu Wibble ale nie z albumu Abc', wymagane będą następujące reguły:" +#~ "
    • Zawiera ArtystaAlbumu=Wibble
    • Nie zawiera Album=Abc
    • 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.

      " + +#~ msgid "" +#~ "A set of rules named '%1' already exists!\n" +#~ "Overwrite?" +#~ msgstr "" +#~ "Zestaw reguł o nazwie '%1' już istnieje!\n" +#~ "Nadpisać?" + +#~ msgid "

      Delete all from the following?

        %1

      " +#~ msgstr "

      Czy usunąć wszystkie z wymienionych?

        %1

      " + +#~ 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 "" +#~ "%1 is used to store favorite streams, please choose another name." +#~ msgstr "" +#~ "%1 jest używane do przechowywania ulubionych strumieni, należy " +#~ "wybrać inną nazwę." + +#~ msgid "A playlist named %1 already exists!
      Add to that playlist?" +#~ msgstr "" +#~ "Playlista o nazwie %1 już istnieje!
      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 "" +#~ "

      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.

      The following ReplayGain settings may be used:" +#~ "

      • None - No ReplayGain is applied.
      • Track - " +#~ "Volume will be adjusted using the track's ReplayGain tags.
      • Album - Volume will be adjusted using the albums's " +#~ "ReplayGain tags.
      • Auto - Volume will be adjusted using the " +#~ "track's ReplayGain tags if random play is activated, otherwise the " +#~ "album's tags will be used.

      " +#~ msgstr "" +#~ "

      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.

      Następujące " +#~ "ustawienia ReplayGain mogą zostać użyte:

      • Brak - ReplayGain " +#~ "nie jest stosowany.
      • Utwór - Głośność jest dostosowywana na " +#~ "podstawie tagu ReplayGain utworu.
      • Album - Głośność jest " +#~ "dostosowywana na podstawie tagu ReplayGain albumu.
      • Automatycznie - Głośność jest dostosowywana na podstawie " +#~ "tagu ReplayGain utworu gdy kolejność odtwarzania jest losowa. W " +#~ "przeciwnym wypadku użyty jest tag albumu.

      " + +#~ 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 %1 already exists!
      Overwrite?" +#~ msgstr "Playlista o nazwie %1 już istnieje!
      Nadpisać?" + +#~ msgid "" +#~ "Which type of collection do you wish to connect to?
      • Standard " +#~ "- music collection may be shared, is on another machine, or is already " +#~ "setup
      • Basic - music collection is not shared with others, and " +#~ "Cantata will configure and control the MPD instance
      " +#~ msgstr "" +#~ "Do jakiego rodzaju kolekcji program ma się połączyć?
      • Standardowa - kolekcja muzyczna może być współdzielona, jest na " +#~ "innej maszynie lub jest już skonfigurowana
      • Podstawowa - kolekcja " +#~ "muzyki nie jest współdzielona z innymi i Cantata skonfiguruje i będzie " +#~ "kontrolować instancję MPD
      " + +#~ msgid "Delete %1?" +#~ msgstr "Usunąć %1?" + +#~ 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 "(Priority: %1)" +#~ msgstr "(Priorytet: %1)" + +#~ msgid "Unsubscribe from %1?" +#~ msgstr "Usunąć subskrypcję %1?" + +#~ msgid "Refresh episode listing from %1?" +#~ msgstr "Odświeżyć listę podcastów z %1?" + +#~ 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 "" +#~ "NOTE: 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)." +#~ msgstr "" +#~ "UWAGA: 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')." + +#~ msgid "" +#~ "NOTE: Connected to a Mopidy server (manual update required)." +#~ msgstr "" +#~ "UWAGA: Połączono z serwerem Mopidy (wymagane ręczne " +#~ "odświeżenie)." + +#~ msgid "" +#~ "NOTE: These settings are only valid, and editable, when the " +#~ "device is connected." +#~ msgstr "" +#~ "UWAGA: Te ustawienia są poprawne i edytowalne gdy urządzenie " +#~ "jest podłączone." + +#~ msgid "Ignore 'The' in artist names" +#~ msgstr "Ignoruj 'The' w nazwach artystów" + +#~ msgid "" +#~ "NOTE: These settings are only editable when the device is not " +#~ "connected." +#~ msgstr "" +#~ "UWAGA: Te ustawienia są edytowalne gdy urządzenie nie jest " +#~ "podłączone." + +#~ msgid "" +#~ "NOTE: If you enter a password here, it will be stored " +#~ "unencrypted in Cantata's config file. To have Cantata prompt for " +#~ "the password before accessing the share, set the password to '-'" +#~ msgstr "" +#~ "UWAGA: Jeśli hasło zostanie wpisane w to pole, to będzie ono " +#~ "przechowywane w postaci niezaszyfrowanej 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 '-'" + +#~ msgid "" +#~ "NOTE: Due to the way sshfs works, a suitable ssh-askpass " +#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to " +#~ "enter the password." +#~ msgstr "" +#~ "UWAGA: Z powodu sposobu działania sshfs, odpowiednia aplikacja " +#~ "ssh-askpass (ksshaskpass, ssh-askpass-gnome, itp.) jest wymagana do " +#~ "podawania hasła." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "UWAGA: 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." + +#~ msgid "" +#~ "NOTE Only enter values for the tags you wish to be search on. " +#~ msgstr "" +#~ "UWAGA Należy wpisać tylko wartości dla tych tagów, które mają " +#~ "zostać przeszukane. " + +#~ msgid "" +#~ "NOTE For genre, end string with an asterisk to match various " +#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +#~ msgstr "" +#~ "UWAGA Dla gatunków, należy użyć gwiazdki * aby wybierać wiele " +#~ "gatunków np. 'rock*' wyszuka 'Hard Rock' oraz 'Rock and Roll'. " + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "UWAGA: 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." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "UWAGA: 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')" + +#~ msgid "" +#~ "

      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.

      For more information on MPD itself, please " +#~ "refer to the MPD website http://www.musicpd.org

      This 'wizard' will guide you through the basic settings " +#~ "required for Cantata to function correctly.

      " +#~ msgstr "" +#~ "

      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.

      W celu " +#~ "uzyskania informacji na temat MPD prosimy o odwiedzenie strony http://www.musicpd.org

      Ten 'kreator " +#~ "konfiguracji' pomoże przy podstawowych ustawieniach potrzebnych do " +#~ "poprawnego działania programu Cantata.

      " + +#~ msgid "" +#~ "

      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:

      " +#~ msgstr "" +#~ "

      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:

      " + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "UWAGA: 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." + +# Polskie zasady pisowni wymagają, aby kropkę stawiać za nawiasem +#~ msgid "" +#~ "NOTE: When using a local socket the full absolute path to the " +#~ "socket needs to be set. (Port number is not required.)" +#~ msgstr "" +#~ "UWAGA: Przy używaniu gniazda lokalnego konieczne jest " +#~ "ustawienie pełnej absolutnej ścieżki do gniazda. (Numer portu nie jest " +#~ "wymagany)." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "UWAGA: 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." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "UWAGA: 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'." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "UWAGA: '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." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "UWAGA: 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." + +#~ msgid "" +#~ "NOTE: 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." +#~ "" +#~ msgstr "" +#~ "UWAGA: 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." + +#~ msgid "Covers:" +#~ msgstr "Okładki:" + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "UWAGA: 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." + +#~ 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 "" +#~ "

      This will change Cantata's interface as detailed:\n" +#~ "

      • Playback, and control, buttons will be 33% wider
      • Views " +#~ "will be 'flickable'
      • To drag items, you will need to 'touch' the " +#~ "top-left corner
      • Scrollbars will only be a few pixels wide
      • Actions (e.g. 'Add To Play Queue') will always be visible (not " +#~ "just when item is under mouse)
      • Spin buttons with have + and - " +#~ "buttons at the side of the text field

      " +#~ msgstr "" +#~ "

      To ustawienie wpłynie na interfejst w następujący sposób:\n" +#~ "

      • Przyciski odtwarzania i kontroli będą 33% szersze
      • Widoki " +#~ "będą przesuwane przez przeciągnięcie
      • Aby przeciągnąć elementy " +#~ "trzeba kliknąć/dotknąć lewy górny róg
      • Paski przewijania będą " +#~ "szerokie tylko na kilka pikseli
      • Akcje (np. \"Dodaj do kolejki " +#~ "odtwarzania) będą zawsze widoczne (nie tylko po najechaniu na nie " +#~ "kursorem)
      • Wejścia numeryczne będą miały przyciski + i − obok pola " +#~ "tekstowego

      " + +#~ 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 "" +#~ "NOTE: Changing the 'Enforce single-click activation of items' " +#~ "setting will require a re-start of Cantata." +#~ msgstr "" +#~ "UWAGA: Zmiana opcji 'Wymuś aktywację elementów przy pojedynczym " +#~ "kliknięciu' wymaga restartu Cantaty." + +#~ msgid "" +#~ "NOTE: Changing the language setting will require a re-start of " +#~ "Cantata." +#~ msgstr "" +#~ "UWAGA: Zmiana ustawienia jeżyka wymaga restartu Cantaty." + +#~ msgid "" +#~ "NOTE: Changing the 'touch friendly' setting will require a re-" +#~ "start of Cantata." +#~ msgstr "" +#~ "Uwaga: Zmiana ustawienia \"interfejs dotykowy\" wymaga restartu " +#~ "Cantaty." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "UWAGA: 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." + +#~ msgid "" +#~ "NOTE: The 'Music folder' setting is used to lookup cover-art " +#~ "(either the value specified above, or cover.jpg / cover.png " +#~ "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 "" +#~ "UWAGA: Ustawienie 'Katalog z muzyką' służy do poszukiwania " +#~ "okładek (albo wartość podana powyżej, albo cover.jpg / cover.png 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." + +#~ msgid "" +#~ "NOTE: '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 "" +#~ "UWAGA: 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." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "NOTE: 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\"." + +#~ msgid "" +#~ "NOTE: If no setting is specified for 'Cover filename, then " +#~ "Cantata will use a default of cover " +#~ msgstr "" +#~ "NOTE: Jeśli nie ustawiono nazwy pliku dla okładki, Cantata " +#~ "użyje domyślnej nazwy cover " + +#~ msgid "" +#~ "NOTE: 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.

      \n" +#~ "NOTE: If you choose 'Local loopback' for 'Network interface', then " +#~ "MPD must also be on this computer.
      " +#~ msgstr "" +#~ "UWAGA: 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.

      \n" +#~ "UWAGA: Przy wyborze 'Lokalny loopback' w polu 'Interfejs " +#~ "sieciowy', to MPD musi też być na tym komputerze.
      " + +#~ msgid "" +#~ "NOTE: These settings apply to Digitally Imported, JazzRadio." +#~ "com, RockRadio.com, and Sky.fm" +#~ msgstr "" +#~ "UWAGA: Te ustawienia odnoszą się do Digitally Imported, " +#~ "JazzRadio.com, RockRadio.com, oraz Sky.fm." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "UWAGA: Po wpisaniu szczegółów konta wyświetlony zostanie status " +#~ "'DI' pod listą strumieni. Jest to wskaźnik tego, czy jest się " +#~ "zalogowanym, czy nie." + +#~ msgid "" +#~ "NOTE: Built-in categories are shown in italic, and these cannot " +#~ "be removed." +#~ msgstr "" +#~ "UWAGA: Wbudowane kategorie wyświetlone są kursywą i nie mogą " +#~ "zostać usunięte." + +#~ msgid "" +#~ "NOTE Multiple genres should be separated via a semicolon (e.g. " +#~ "'Rock;Hard Rock')" +#~ msgstr "" +#~ "UWAGA Gatunki należy oddzielać od siebie średnikiem (np. 'Rock;" +#~ "Hard Rock')" + +#~ msgid "" +#~ "Scan all tracks?

      NOTE: All tracks have existing " +#~ "ReplayGain tags." +#~ msgstr "" +#~ "Skanować wszystkie utwory?

      UWAGA: Wszystkie utwory " +#~ "posiadają istniejące tagi ReplayGain." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "UWAGA: 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." + +#~ msgid "Failed to install %1" +#~ msgstr "Instalowanie nie powiodło się %1" + +#~ msgid "Failed to download %1" +#~ msgstr "Pobieranie nie powiodło się %1" + +#~ 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 %1!" +#~ msgstr "Nie powiodło się utworzenie %1!" + +#~ msgid "Stream already exists!
      %1" +#~ msgstr "Strumień już istnieje!
      %1" + +#~ msgid "A stream named %1 already exists!" +#~ msgstr "Strumień o nazwie %1 już istnieje!" + +#~ msgid "Reload %1 streams?" +#~ msgstr "Przeładować %1 strumieni(e)?" + +#~ msgid "Are you sure you wish to remove bookmark to %1?" +#~ msgstr "Czy na pewno usunąć zakładkę %1?" + +#~ msgid "Are you sure you wish to remove all %1 bookmarks?" +#~ msgstr "Czy na pewno usunąć wszystkie %1 zakładek?" + +#~ msgid "Are you sure you wish to remove %1?" +#~ msgstr "Czy na pewno usunąć %1?" + +#~ msgid "A category named %1 already exists!
      Overwrite?" +#~ msgstr "Kategoria o nazwie %1 już istnieje!
      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 all tracks?" +#~ msgstr "" +#~ "Czy ustawić pierwszą dużą literę tagów 'Title', 'Artist', 'Album artist', " +#~ "oraz 'Album' we wszystkich utworach?" + +#~ msgid "Source file does not exist!
      %1" +#~ msgstr "Plik źródłowy nie istnieje!
      %1" + +#~ msgid "Destination file already exists!
      %1" +#~ msgstr "Docelowy plik już istnieje!
      %1" + +#~ msgid "Failed to create destination folder!
      %1" +#~ msgstr "Tworzenie katalogu docelowego nie powiodło się!
      %1" + +#~ msgid "Failed to rename %1 to %2" +#~ msgstr "Nie powiodła się zmiana nazwy z %1 na %2" + +#~ msgid "" +#~ "

      Cannot access song files!

      Please check Cantata's \"Music " +#~ "folder\" setting, and MPD's \"music_directory\" setting.

      " +#~ msgstr "" +#~ "

      Brak dostępu do plików utworów!

      Proszę sprawdzić ustawienia " +#~ "Cantaty \"Katalog z muzyką\" oraz ustawienie MPD \"music_directory\".

      " + +#~ msgid "" +#~ "

      Cannot access song files!

      Please check that the device is " +#~ "still attached.

      " +#~ msgstr "" +#~ "

      Brak dostępu do plików utworów!

      Proszę sprawdzić, czy " +#~ "urządzenie jest nadal podłączone.

      " + #~ msgid "TextLabel" #~ msgstr "TextLabel" @@ -7388,9 +8440,6 @@ #~ msgid " seconds" #~ msgstr " sekund" -#~ msgid "Devices:" -#~ msgstr "Urządzenia:" - #~ msgid "Current URL:" #~ msgstr "Obecny URL:" @@ -7501,9 +8550,6 @@ #~ 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 @@ #~ 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 -Nru cantata-1.4.2.ds1/po/ru.po cantata-1.5.2.ds2/po/ru.po --- cantata-1.4.2.ds1/po/ru.po 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/po/ru.po 2015-03-23 20:09:39.000000000 +0000 @@ -6,7 +6,7 @@ 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 \n" "Language-Team: Russian \n" @@ -22,10 +22,10 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ #. 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ msgid "Songs To Be Copied" msgstr "Песни, которые нужно скопировать" -#: devices/actiondialog.cpp:153 +#: devices/actiondialog.cpp:151 msgid "INVALID" msgstr "НЕДОПУСТИМО" -#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170 +#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168 msgid "(When different)" 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" @@ -475,339 +494,324 @@ "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 "" -"

      You have not configured the destination device.
      Continue with the " -"default settings?

      " +"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 "" -"

      You have not configured the source device.
      Continue with the default " -"settings?

      " +"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 "Рассчитать 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!
      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.
      (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 "" -"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " -"'Title' to \"TrackArtist - TrackTitle\"" +"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " +"'Title' to \"TrackArtist - TrackTitle\"" msgstr "" -"Эта настройка установит значения «Исполнитель альбома» и «Исполнитель» на " -"«Несколько исполнителей» и значение «Название» на \"TrackArtist - TrackTitle" -"\"" -#: 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 "" -"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.

      If 'Title' " -"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " -"will be set to \"Wobble\"
      " +"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 "" -"Там, где значение «Исполнитель альбома» равно значению «Исполнитель», и " -"название имеет формат \"TrackArtist - TrackTitle\", значение «Исполнитель» " -"будет получаться из «Названия», а само значение «Название» будет равно " -"названию композиции, т.е.

      Скажем, если «Название» имеет формат " -"\"Wibble - Wobble\", тогда «Исполнитель» будет иметь значение «Wibble», а " -"«Название» — «Wobble»
      " -#: 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 @@ #. 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 @@ 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 "" -"

      Which type of refresh do you wish to perform?

      • Partial - Only new " -"songs are scanned (quick)
      • Full - All songs are rescanned " -"(slow)

      " +#: devices/devicespage.cpp:444 +msgid "Which type of refresh do you wish to perform?" msgstr "" -"

      Какой тип обновления необходимо выполнить?

      • Частичное — сканируются " -"только новые песни(быстрое)
      • Полное — все песни сканируются " -"повторно(медленное)

      " -#: 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 %1?" -msgstr "Точно исключить %1?" - -#: devices/devicespage.cpp:544 -msgid "Are you sure you wish to eject Audio CD %1 - %2?" -msgstr "Точно извлечь аудио- CD %1 - %2?" +#: devices/devicespage.cpp:521 +msgid "Are you sure you wish to forget '%1'?" +msgstr "" + +#: 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 %1?" -msgstr "Точно отключить %1?" +#: 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 @@ "с
      могут приводить к неудовлетворительному качеству. Значения больше " "205 кбит/с обычно излишни." -#: 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 @@ "только для музыкальных плееров компании 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 @@ #: devices/filenameschemedialog.cpp:121 msgid "" -"

      The following variables will be replaced with their corresponding meaning " -"for each track name.

      " +"The following variables will be replaced with their corresponding meaning " +"for each track name." msgstr "" -"

      Следующие переменные будут заменены соответствующими названиями для " -"каждого трека.

      " -#: devices/filenameschemedialog.cpp:123 +#: devices/filenameschemedialog.cpp:127 msgid "" "
    VariableButtonDescription
    ПеременнаяКнопкаОписание
    Server
    Protocol: %1.%2.%3
    Uptime:" @@ -2643,7 +2598,7 @@ "td>
    Обработчики: %6
    Тэги: %7
    Database
    Artists: %1
    Albums: 
    Продолжительность: %4
    Обновление: %5
    Composer:%1
    Автор музыки:%1
    Performer:%1
    Artist:%1
    Album:%2
    Year:" @@ -6641,7 +6716,7 @@ msgid "All Genres" msgstr "Все жанры" -#: widgets/itemview.cpp:628 +#: widgets/itemview.cpp:681 msgid "Go Back" msgstr "Назад" @@ -6649,15 +6724,19 @@ msgid "Menu" msgstr "Меню" -#: widgets/playqueueview.cpp:300 +#: widgets/notelabel.cpp:67 +msgid "NOTE: %1" +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 @@ #: widgets/songdialog.cpp:49 msgid "" -"

    Cannot access song files!

    Please check Cantata's \"Music folder" -"\" setting, and MPD's \"music_directory\" setting.

    " +"Cannot access song files!\n" +"\n" +"Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory" +"\" setting." msgstr "" -"

    Нет доступа к файлам!

    Проверьте настройки «папки с музыкой» " -"программы Cantata и настройки «каталога с музыкой» сервера MPD.

    " #: widgets/songdialog.cpp:52 msgid "" -"

    Cannot access song files!

    Please check that the device is still " -"attached.

    " +"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 "Растянуть столбцы по размеру окна" @@ -6821,6 +6899,669 @@ 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 "" +#~ "

    You have not configured the destination device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    Целевое устройство не настроено.
    Продолжить с настройками по " +#~ "умолчанию?

    " + +#~ msgid "" +#~ "

    You have not configured the source device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "" +#~ "

    Устройство-источник не настроено.
    Продолжить с настройками по " +#~ "умолчанию?

    " + +#~ msgid "" +#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and " +#~ "'Album'" +#~ msgstr "" +#~ "Первая буква в значениях «Название», «Исполнитель», «Исполнитель альбома» " +#~ "и «Альбом» будет заглавной." + +#~ msgid "" +#~ "

    Which type of refresh do you wish to perform?

    • Partial - Only " +#~ "new songs are scanned (quick)
    • Full - All songs are " +#~ "rescanned (slow)

    " +#~ msgstr "" +#~ "

    Какой тип обновления необходимо выполнить?

    • Частичное — " +#~ "сканируются только новые песни(быстрое)
    • Полное — все песни " +#~ "сканируются повторно(медленное)

    " + +#~ 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 %1?" +#~ msgstr "Точно исключить %1?" + +#~ msgid "Are you sure you wish to eject Audio CD %1 - %2?" +#~ msgstr "Точно извлечь аудио- CD %1 - %2?" + +#~ msgid "Are you sure you wish to disconnect %1?" +#~ msgstr "Точно отключить %1?" + +#~ msgid "" +#~ "

    The following variables will be replaced with their corresponding " +#~ "meaning for each track name.

    " +#~ msgstr "" +#~ "

    Следующие переменные будут заменены соответствующими названиями для " +#~ "каждого трека.

    " + +#~ 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 "" +#~ "

    Cantata will query your library using all of the rules listed. The " +#~ "list of Include rules will be used to build a set of songs that " +#~ "can be used. The list of Exclude rules will be used to build a set " +#~ "of songs that cannot be used. If there are no Include rules, " +#~ "Cantata will assume that all songs (bar those from Exclude) can be " +#~ "used.
    e.g. to have Cantata look for 'Rock songs by Wibble OR songs " +#~ "by Various Artists', you would need the following:

    • Include " +#~ "AlbumArtist=Wibble Genre=Rock
    • Include AlbumArtist=Various " +#~ "Artists
    To have Cantata look for 'Songs by Wibble but not from " +#~ "album Abc', you would need the following:
    • Include " +#~ "AlbumArtist=Wibble
    • Exclude Album=Abc
    After the set of " +#~ "usable songs has been created, Cantata will randomly select songs to keep " +#~ "the play queue filled with 10 entries.

    " +#~ msgstr "" +#~ "

    Cantata будет опрашивать вашу библиотеку, используя все перечисленные " +#~ "правила.Список правил Включить будет применяться для создания " +#~ "списка песен, которыеможно использовать. Список правил Исключить " +#~ "будет применяться для создания списка песен, которые нельзя использовать. " +#~ "Если правил Включить не существует, Cantata будет использовать все " +#~ "песни (включая песни из правил Исключить).
    То есть, если вам " +#~ "нужно найти песни в стиле «Rock» исполнителя Петров ИЛИ нескольких " +#~ "исполнителей, то правило будет таким:

    • Включить AlbumArtist=Петров " +#~ "Genre=Rock
    • Включить AlbumArtist=Несколько исполнителей
    " +#~ "Чтобы заставить Cantata искать песни исполнителя Иванов, не входящие в " +#~ "альбом АБВ, вам понадобится следующее правило:
    • Включить " +#~ "AlbumArtist=Иванов
    • Исключить Album=АБВ
    После того, как " +#~ "набор используемых песен будет создан, Cantata сделает случайную подборку " +#~ "песен, чтобы в очереди на воспроизведение было заполнено 10 позиций.

    " + +#~ msgid "" +#~ "A set of rules named '%1' already exists!\n" +#~ "Overwrite?" +#~ msgstr "" +#~ "Набор правил с именем «%1» уже существует.\n" +#~ "Перезаписать?" + +#~ msgid "

    Delete all from the following?

      %1

    " +#~ msgstr "

    Удалить всё из следующего?

      %1

    " + +#~ 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 "" +#~ "%1 is used to store favorite streams, please choose another name." +#~ msgstr "" +#~ "%1 используется для хранения любимых потоков, выберите другое имя." + +#~ msgid "A playlist named %1 already exists!
    Add to that playlist?" +#~ msgstr "Плейлист с именем %1 уже существует
    Добавить к нему?" + +#~ msgid "Can only edit tags of songs within MPD's music collection." +#~ msgstr "Можно редактировать теги песен только в музыкальной коллекции MPD." + +#~ 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.

    The following ReplayGain settings may be used:" +#~ "

    • None - No ReplayGain is applied.
    • Track - " +#~ "Volume will be adjusted using the track's ReplayGain tags.
    • Album - Volume will be adjusted using the albums's " +#~ "ReplayGain tags.
    • Auto - Volume will be adjusted using the " +#~ "track's ReplayGain tags if random play is activated, otherwise the " +#~ "album's tags will be used.

    " +#~ msgstr "" +#~ "

    Replay Gain — это стандарт, предложенный в 2001 году для выравнивания " +#~ "уровня громкости компьютерных аудио-форматов, таких, как MP3 и Ogg " +#~ "Vorbis. Он функционирует на базе принципа трек/альбом, и на сегодня " +#~ "поддерживается большим числом плееров.

    Для ReplayGain можно " +#~ "использовать следующие настройки:

    • Нет — ReplayGain не " +#~ "используется
    • Трек — громкость будет настроена с " +#~ "использованием тегов ReplayGain данного трека
    • Альбом — " +#~ "громкость будет настроена с использованием тегов ReplayGain данного " +#~ "альбома
    • Авто — в случае случайного режима воспроизведения " +#~ "громкость будет настроена с использованием тегов ReplayGain данного " +#~ "трека, иначе — используются теги альбома.

    " + +#~ msgid "" +#~ "Are you sure you wish to remove the selected playlists?\n" +#~ "This cannot be undone." +#~ msgstr "" +#~ "Точно удалить выбранный плейлист?\n" +#~ "Эту операцию нельзя будет отменить." + +#~ msgid "A playlist named %1 already exists!
    Overwrite?" +#~ msgstr "Плейлист с именем %1 уже существует.
    Перезаписать?" + +#~ msgid "" +#~ "Which type of collection do you wish to connect to?
    • Standard " +#~ "- music collection may be shared, is on another machine, or is already " +#~ "setup
    • Basic - music collection is not shared with others, and " +#~ "Cantata will configure and control the MPD instance
    " +#~ msgstr "" +#~ "К какому типу коллекции вы хотите подключиться?
    • Стандартный — " +#~ "коллекцию можно сделать общим ресурсом, она находится на другой машине " +#~ "или уже настроена
    • Базовый — коллекция не является общим ресурсом, " +#~ "и Cantata настроит и будет управлятьэкземпляром MPD.
    " + +#~ msgid "Delete %1?" +#~ msgstr "Удалить %1?" + +#~ 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 "(Priority: %1)" +#~ msgstr "(Приоритет: %1)" + +#~ msgid "Unsubscribe from %1?" +#~ msgstr "Отменить подписку для %1?" + +#~ msgid "Refresh episode listing from %1?" +#~ msgstr "Обновить список эпизодов для %1?" + +#~ 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 "" +#~ "NOTE: 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)." +#~ msgstr "" +#~ "ВНИМАНИЕ: Cantata не показывает страницы wikipedia полностью (с " +#~ "изображениями, ссылками и т.п), показывается только усечённая версия. Эта " +#~ "версия не всегда получается аккуратно на все 100%, поэтому, по умолчанию, " +#~ "Cantata показывает только базовое введение для каждой статьи. Если " +#~ "выбрать показ страницы полностью, то возможны ошибки обработки. Также " +#~ "будет необходимо удалить любую текущую кешированную статью (на страничке " +#~ "«Кеш»)." + +#~ msgid "" +#~ "NOTE: These settings are only valid, and editable, when the " +#~ "device is connected." +#~ msgstr "" +#~ "ВНИМАНИЕ: данные настройки действуют и могут редактироваться " +#~ "только при подключённом устройстве." + +#~ msgid "Ignore 'The' in artist names" +#~ msgstr "Игнорировать 'The' в именах исполнителей" + +#~ msgid "" +#~ "NOTE: These settings are only editable when the device is not " +#~ "connected." +#~ msgstr "" +#~ "ВНИМАНИЕ: Эти настройки можно изменять только при отключённом " +#~ "устройстве." + +#~ msgid "" +#~ "NOTE: If you enter a password here, it will be stored " +#~ "unencrypted in Cantata's config file. To have Cantata prompt for " +#~ "the password before accessing the share, set the password to '-'" +#~ msgstr "" +#~ "ВНИМАНИЕ: введённый здесь пароль будет " +#~ "хранитьсянезашифрованным в файле настроек Cantata. Для того, чтобы " +#~ "Cantata запрашивала пароль перед доступом к общему ресурсу, укажите " +#~ "пароль '-'" + +#~ msgid "" +#~ "NOTE: Due to the way sshfs works, a suitable ssh-askpass " +#~ "application (ksshaskpass, ssh-askpass-gnome, etc.) will be required to " +#~ "enter the password." +#~ msgstr "" +#~ "ВНИМАНИЕ: исходя из принципа работы sshfs, для ввода пароля вам " +#~ "потребуется подходящее приложение на базе ssh-askpass (ksshaskpass, ssh-" +#~ "askpass-gnome, и т.п.)." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "ВНИМАНИЕ: с помощью этого диалога можно добавить только " +#~ "удалённые устройства (например, через Samba) или получить доступ к " +#~ "локально смонтированным папкам. Для обычных медиа-плееров, подключённых " +#~ "по USB, Cantata автоматически покажет устройство сразу после его " +#~ "подключения." + +#~ msgid "" +#~ "NOTE Only enter values for the tags you wish to be search on. " +#~ msgstr "" +#~ "ВНИМАНИЕ вводить значения только для тегов, по которым должен " +#~ "производиться поиск." + +#~ msgid "" +#~ "NOTE For genre, end string with an asterisk to match various " +#~ "genres. e.g 'rock*' matches 'Hard Rock' and 'Rock and Roll'. " +#~ msgstr "" +#~ "ВНИМАНИЕ Чтобы указать несколько жанров заканчивайте строку " +#~ "астериском (знак «*»). Например, 'rock*' будет соответствовать и 'Hard " +#~ "Rock' и 'Rock and Roll'. " + +#~ msgid "" +#~ "

    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.

    For more information on MPD itself, please " +#~ "refer to the MPD website http://www.musicpd.org

    This 'wizard' will guide you through the basic settings " +#~ "required for Cantata to function correctly.

    " +#~ msgstr "" +#~ "

    Cantata — это многофункциональный и дружественный к " +#~ "пользователю клиент Music Player Daemon (MPD). MPD — это фоновое " +#~ "приложение, которое можно использовать для проигрывания музыки.

    За " +#~ "подробной информацией по MPD обращайтесь на его официальный сайт: http://www.musicpd.org.

    Этот помощник " +#~ "проведёт вас по базовым настройкам программы Cantata, необходимым для её " +#~ "правильной работы.

    " + +#~ msgid "" +#~ "

    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:

    " +#~ msgstr "" +#~ "

    Cantata — это многофункциональный и дружественный к " +#~ "пользователю клиент Music Player Daemon (MPD). MPD — это фоновое " +#~ "приложение, которое можно использовать для проигрывания музыки. MPD можно " +#~ "запускать как общесистемно, так и отдельно для каждого пользователя. " +#~ "Выберите, как Cantata должна подключаться к MPD при запуске:

    " + +#~ msgid "" +#~ "NOTE: When using a local socket the full absolute path to the " +#~ "socket needs to be set. (Port number is not required.)" +#~ msgstr "" +#~ "ВНИМАНИЕ: при использовании локального сокета необходимо " +#~ "указать полный абсолютный путь к нему. (Номер порта не требуется)." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "ВНИМАНИЕ: если Cantata настроена на сохранение обложек или " +#~ "текстов песен в папке с музыкой, а у вас нет доступа на запись в эту " +#~ "папку, то в этом случае Cantata будет сохранять файлы в вашей " +#~ "персональной папке для кеша. Тем не менее, если речь идёт о потоках, то " +#~ "при отсутствии доступа на запись, вы сможете только просматривать и " +#~ "проигрывать потоки, сохранённые в папке с музыкой, но не добавлять их и " +#~ "не редактировать. Если вы не указывали сохранять потоки в папку с " +#~ "музыкой, тогда они будут сохраняться вв вашей локальной папке с " +#~ "настройками, и будут доступны только вам." + +#~ msgid "Covers:" +#~ msgstr "Обложки:" + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "ПРИМЕЧАНИЕ:.. При поиске фотографий исполнителей, Cantata будет " +#~ "искать или artist.jpg, artist.png, 'Artist'.jpg, или 'Artist'.png, \n" +#~ " в папке текущего трека или в пределах своей родительской папки. Если " +#~ "изображение не найдено, Cantata попытается загрузить его." + +#~ 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 "" +#~ "NOTE: Changing the 'Enforce single-click activation of items' " +#~ "setting will require a re-start of Cantata." +#~ msgstr "" +#~ "ВНИМАНИЕ: настройка «Принудительно включить выделение элементов " +#~ "по одному щелчку» потребует перезапуска программы Cantata." + +#~ msgid "" +#~ "NOTE: Changing the language setting will require a re-start of " +#~ "Cantata." +#~ msgstr "" +#~ "Примечание: При изменении языка потребуется перезапустить " +#~ "Cantata." + +#~ msgid "" +#~ "NOTE: Changing the 'touch friendly' setting will require a re-" +#~ "start of Cantata." +#~ msgstr "" +#~ "Примечание: Изменение параметра «дружественный интерфейс» " +#~ "требует перезапуска Cantata." + +#~ msgid "" +#~ "NOTE: 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." +#~ msgstr "" +#~ "ВНИМАНИЕ: если нажать и удерживать кнопку «стоп», то будет " +#~ "показано меню, где можно выбрать, остановить ли воспроизведение сейчас " +#~ "или после окончания текущей композиции." + +#~ msgid "" +#~ "NOTE: The 'Music folder' setting is used to lookup cover-art " +#~ "(either the value specified above, or cover.jpg / cover.png " +#~ "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 "" +#~ "ВНИМАНИЕ: Настройка «папка с музыкой» используется для поиска " +#~ "обложек (введите значение, указанное выше или cover.jpg / cover." +#~ "png при пустом значении). Если у вас также есть рекурсивные права " +#~ "на запись в эту папку, то Cantata будет сохранять все загружаемые обложки " +#~ "в соответствующую папку альбома." + +#~ msgid "" +#~ "NOTE: '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 "" +#~ "ВНИМАНИЕ: параметр «адрес потока HTTP» можно использовать, " +#~ "только если вывод MPD настроен на HTTP-поток, и вам нужно, чтобы Cantata " +#~ "умела его проигрывать." + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "ВНИМАНИЕ: если настройка «папка с музыкой» была изменена, то " +#~ "вам необходимо вручную обновить базу данных. Это можно сделать, нажав " +#~ "кнопку «Обновить базу данных» в режиме «Исполнитель» или «Альбом»." + +#~ msgid "" +#~ "NOTE: If no setting is specified for 'Cover filename, then " +#~ "Cantata will use a default of cover " +#~ msgstr "" +#~ "ВНИМАНИЕ: если значение для имени файла обложки не указано, " +#~ "то Cantata будет использовать имя по умолчанию: cover " + +#~ msgid "" +#~ "NOTE: 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.

    \n" +#~ "NOTE: If you choose 'Local loopback' for 'Network interface', then " +#~ "MPD must also be on this computer.
    " +#~ msgstr "" +#~ "ВНИМАНИЕ: как правило, MPD проигрывает только песни, " +#~ "расположенные в папках MPD. Для возможности проигрывания других файлов " +#~ "Cantata может использовать свой мини-HTTP-сервер, но сервер работает " +#~ "только когда запущена Cantata.

    \n" +#~ "ВНИМАНИЕ: если в качестве сетевого интерфейса выбрана «локальная " +#~ "петля», тогда MPD также должен присутствовать на данной машине.
    " + +#~ msgid "" +#~ "NOTE: These settings apply to Digitally Imported, JazzRadio." +#~ "com, RockRadio.com, and Sky.fm" +#~ msgstr "" +#~ "ВНИМАНИЕ: Эти настройки применимы для Digitally Imported, " +#~ "JazzRadio.com, RockRadio.com и Sky.fm" + +#~ msgid "" +#~ "NOTE: 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 "" +#~ "ВНИМАНИЕ: При выборе настроек учётной записи, под списком " +#~ "потоков будет показан значок-индикатор авторизации ('DI'), изменяющийся в " +#~ "зависимости от того, был ли выполнен вход или нет." + +#~ msgid "" +#~ "NOTE: Built-in categories are shown in italic, and these cannot " +#~ "be removed." +#~ msgstr "" +#~ "ВНИМАНИЕ: встроенные категории показываются курсивом, и их " +#~ "удалить нельзя." + +#~ msgid "" +#~ "NOTE Multiple genres should be separated via a semicolon (e.g. " +#~ "'Rock;Hard Rock')" +#~ msgstr "" +#~ "К сведению несколько жанров должны быть разделены через точку с " +#~ "запятой (например 'Rock;Hard Rock')" + +#~ msgid "" +#~ "Scan all tracks?

    NOTE: All tracks have existing " +#~ "ReplayGain tags." +#~ msgstr "" +#~ "Сканировать все треки?

    ВНИМАНИЕ: у всех треков уже есть " +#~ "теги ReplayGain." + +#~ msgid "ListenLive" +#~ msgstr "ListenLive" + +#~ msgid "Install the following?" +#~ msgstr "Установить следующие?" + +#~ msgid "Update the following?" +#~ msgstr "Обновить следующие?" + +#~ msgid "Failed to create %1!" +#~ msgstr "Сбой создания %1" + +#~ msgid "Stream already exists!
    %1" +#~ msgstr "Поток уже существует:
    %1" + +#~ msgid "A stream named %1 already exists!" +#~ msgstr "Поток с именем %1 уже существует." + +#~ msgid "Reload %1 streams?" +#~ msgstr "Обновить %1 потоков?" + +#~ msgid "Are you sure you wish to remove bookmark to %1?" +#~ msgstr "Точно удалить закладку для %1?" + +#~ msgid "Are you sure you wish to remove all %1 bookmarks?" +#~ msgstr "Точно удалить все %1 закладок?" + +#~ msgid "Are you sure you wish to remove %1?" +#~ msgstr "Точно удалить %1?" + +#~ msgid "A category named %1 already exists!
    Overwrite?" +#~ msgstr "Категория %1 уже существует.
    Перезаписать?" + +#~ msgid "" +#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and " +#~ "'Album' of all tracks?" +#~ msgstr "" +#~ "Менять первую букву в значениях «Название», «Исполнитель», «Исполнитель " +#~ "альбома» и «Альбом» на заглавную?" + +#~ msgid "Source file does not exist!
    %1" +#~ msgstr "Исходный файл не существует.
    %1" + +#~ msgid "Destination file already exists!
    %1" +#~ msgstr "Конечный файл уже существует
    %1" + +#~ msgid "Failed to create destination folder!
    %1" +#~ msgstr "Сбой создания папки назначения.
    %1" + +#~ msgid "Failed to rename %1 to %2" +#~ msgstr "Сбой переименования %1 в %2" + +#~ msgid "" +#~ "

    Cannot access song files!

    Please check Cantata's \"Music " +#~ "folder\" setting, and MPD's \"music_directory\" setting.

    " +#~ msgstr "" +#~ "

    Нет доступа к файлам!

    Проверьте настройки «папки с музыкой» " +#~ "программы Cantata и настройки «каталога с музыкой» сервера MPD.

    " + +#~ msgid "" +#~ "

    Cannot access song files!

    Please check that the device is " +#~ "still attached.

    " +#~ msgstr "" +#~ "

    Нет доступа к файлам!

    Убедитесь, что устройство всё ещё " +#~ "подключено.

    " + #~ msgid "TextLabel" #~ msgstr "TextLabel" @@ -7247,9 +7988,6 @@ #~ msgid " seconds" #~ msgstr " секунд" -#~ msgid "Devices:" -#~ msgstr "Устройства:" - #~ msgid "Current URL:" #~ msgstr "Текущий URL:" diff -Nru cantata-1.4.2.ds1/po/zh_CN.po cantata-1.5.2.ds2/po/zh_CN.po --- cantata-1.4.2.ds1/po/zh_CN.po 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/po/zh_CN.po 2015-03-23 20:09:39.000000000 +0000 @@ -3,7 +3,7 @@ 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 \n" "Language-Team: AI Corleone \n" @@ -19,10 +19,10 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ #. 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ #. 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 @@ msgid "Songs To Be Copied" msgstr "" -#: devices/actiondialog.cpp:153 +#: devices/actiondialog.cpp:151 msgid "INVALID" msgstr "无效" -#: devices/actiondialog.cpp:167 devices/actiondialog.cpp:170 +#: devices/actiondialog.cpp:165 devices/actiondialog.cpp:168 msgid "(When different)" 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" @@ -463,324 +482,323 @@ "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 "" -"

    You have not configured the destination device.
    Continue with the " -"default settings?

    " -msgstr "

    没有设置目标设备。
    使用默认设置然后继续?

    " +"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 "" -"

    You have not configured the source device.
    Continue with the default " -"settings?

    " -msgstr "

    没有设置来源设备。
    使用默认设置然后继续?

    " +"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!
    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.
    (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 "" -"This will set 'Album artist' and 'Artist' to \"Various Artists\", and set " -"'Title' to \"TrackArtist - TrackTitle\"" +"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" -msgstr "恢复 \"多个艺术家\" 环境" +#: devices/albumdetailsdialog.cpp:253 +msgid "Revert \"Various Artists\" workaround?" +msgstr "" -#: devices/albumdetailsdialog.cpp:255 tags/tageditor.cpp:502 +#: 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.

    If 'Title' " -"is \"Wibble - Wobble\", then 'Artist' will be set to \"Wibble\" and 'Title' " -"will be set to \"Wobble\"
    " +"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 @@ #. 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 @@ 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 "" -"

    Which type of refresh do you wish to perform?

    • Partial - Only new " -"songs are scanned (quick)
    • Full - All songs are rescanned " -"(slow)

    " +#: 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 %1?" -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 %1 - %2?" +#: 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 %1?" +#: 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 @@ "anything above 205kb/s 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 @@ "%8B%A4>苹果无损格式 苹果无损格式 (ALAC) 是一种无损压缩的数字音乐格式.
    " "推荐在苹果播放器或者其他不支持 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 @@ #: devices/filenameschemedialog.cpp:121 msgid "" -"

    The following variables will be replaced with their corresponding meaning " -"for each track name.

    " +"The following variables will be replaced with their corresponding meaning " +"for each track name." msgstr "" -#: devices/filenameschemedialog.cpp:123 +#: devices/filenameschemedialog.cpp:127 msgid "" "
    VariableButtonDescription
    Server
    Protocol: %1.%2.%3
    Uptime:" @@ -2448,7 +2441,7 @@ "tr>
    Tags: %7
    Database
    Artists: %1
    Albums: Updated: %5
    Composer:%1
    Performer:%1
    Artist:%1
    Album:%2
    Year:" @@ -6241,7 +6456,7 @@ msgid "All Genres" msgstr "所有流派" -#: widgets/itemview.cpp:628 +#: widgets/itemview.cpp:681 msgid "Go Back" msgstr "" @@ -6249,15 +6464,19 @@ msgid "Menu" msgstr "" -#: widgets/playqueueview.cpp:300 +#: widgets/notelabel.cpp:67 +msgid "NOTE: %1" +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 @@ #: widgets/songdialog.cpp:49 msgid "" -"

    Cannot access song files!

    Please check Cantata's \"Music folder" -"\" setting, and MPD's \"music_directory\" setting.

    " +"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 "" -"

    Cannot access song files!

    Please check that the device is still " -"attached.

    " +"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 @@ 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 "" +#~ "

    You have not configured the destination device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "

    没有设置目标设备。
    使用默认设置然后继续?

    " + +#~ msgid "" +#~ "

    You have not configured the source device.
    Continue with the " +#~ "default settings?

    " +#~ msgstr "

    没有设置来源设备。
    使用默认设置然后继续?

    " + +#~ msgid "" +#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and " +#~ "'Album'" +#~ msgstr "'标题', '艺术家', '专辑艺术家', '专辑' 的首字母大写。" + +#~ msgid "" +#~ "

    Which type of refresh do you wish to perform?

    • Partial - Only " +#~ "new songs are scanned (quick)
    • Full - All songs are " +#~ "rescanned (slow)

    " +#~ msgstr "" +#~ "

    你希望选择刷新哪一类?

    • 部分 - 仅扫描新增歌曲(较快)
    • 全部 - 扫描所有的歌曲(较慢)

    " + +#~ 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 "

    Delete all from the following?

      %1

    " +#~ msgstr "

    删除下面所有的项目吗?

      %1

    " + +#~ 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 %1 already exists!
    Add to that playlist?" +#~ msgstr "已经有名为 %1的播放列表!
    添加到它吗?" + +#~ msgid "" +#~ "Are you sure you wish to remove the selected playlists?\n" +#~ "This cannot be undone." +#~ msgstr "" +#~ "确定删除选择的列表?\n" +#~ "操作将无法恢复。" + +#~ msgid "A playlist named %1 already exists!
    Overwrite?" +#~ msgstr "已经有名为 %1的播放列表!

    覆盖吗?" + +#~ msgid "Edit Tags" +#~ msgstr "编辑标签" + +#~ msgid "(Priority: %1)" +#~ msgstr "(属性: %1)" + +#~ msgid "" +#~ "NOTE Only enter values for the tags you wish to be search on. " +#~ msgstr "注意 输入你所需要搜索的标签。 " + +#~ msgid "" +#~ "NOTE: When using a local socket the full absolute path to the " +#~ "socket needs to be set. (Port number is not required.)" +#~ msgstr "" +#~ "注意: 使用本地 Socket 时请输入完整路径。 (端口号可以省略)." + +#~ 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 "" +#~ "NOTE: Changing the 'Enforce single-click activation of items' " +#~ "setting will require a re-start of Cantata." +#~ msgstr "" +#~ "注意: 启用\"强制使用单击激活项目\"后必须重新启动 Cantata。" + +#~ msgid "" +#~ "NOTE: The 'Music folder' setting is used to lookup cover-art " +#~ "(either the value specified above, or cover.jpg / cover.png " +#~ "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 "" +#~ "注意: '音乐文件夹' 将被用来查找专辑封面 (如果未指定值,默认使用 " +#~ "cover.jpg/cover.png). 如果有文件夹及子文件的写入权限," +#~ "Cantata 将自动下载专辑封面到专辑文件夹" + +#~ msgid "Failed to create %1!" +#~ msgstr "%1 创建失败!" + +#~ msgid "Stream already exists!
    %1" +#~ msgstr "流媒体已经存在!
    %1" + +#~ msgid "A stream named %1 already exists!" +#~ msgstr "已经有名为 %1 的流媒体!" + +#~ msgid "Are you sure you wish to remove %1?" +#~ msgstr "确定要移除 %1 ?" + +#~ msgid "" +#~ "Capitalize the first letter of 'Title', 'Artist', 'Album artist', and " +#~ "'Album' of all tracks?" +#~ msgstr "" +#~ "所有音轨的'标题', '艺术家', '专辑艺术家', '专辑' 的首字母大写?" + +#~ msgid "Destination file already exists!
    %1" +#~ msgstr "目标文件已存在!
    %1" + +#~ msgid "Failed to create destination folder!
    %1" +#~ msgstr "文件夹
    %1 创建失败!" + +#~ msgid "Failed to rename %1 to %2" +#~ msgstr "无法把 %1 重命名为 %2" + #~ msgid "TextLabel" #~ msgstr "文本标签" @@ -6663,9 +7074,6 @@ #~ msgid "Disc %1" #~ msgstr "碟片 %1" -#~ msgid "Are you sure you wish to forget '%1'?" -#~ msgstr "确定要清除历史 '%1'?" - #~ msgid "Stop Immediately" #~ msgstr "立即停止" @@ -6726,9 +7134,6 @@ #~ 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 -Nru cantata-1.4.2.ds1/README cantata-1.5.2.ds2/README --- cantata-1.4.2.ds1/README 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/README 2015-03-23 20:09:43.000000000 +0000 @@ -26,7 +26,7 @@ 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 @@ 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 @@ (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 @@ 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 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 @@ 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= @@ -445,6 +452,15 @@ continue to play the 'silence' (NOTE: This will use more bandwidth). Default is true. +cacheScaledCovers= + 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= + 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 @@ alwaysUseLsInfo=true menu=3 stopHttpStreamOnPause=true +cacheScaledCovers=true +seekStep=5 8. CUE Files @@ -586,7 +604,7 @@ - + ... If you want to manually download a provider, use the listed URL to download the @@ -715,7 +733,7 @@ '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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 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 :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 -Nru cantata-1.4.2.ds1/replaygain/CMakeLists.txt cantata-1.5.2.ds2/replaygain/CMakeLists.txt --- cantata-1.4.2.ds1/replaygain/CMakeLists.txt 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/replaygain/CMakeLists.txt 2015-03-23 20:09:35.000000000 +0000 @@ -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 (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 (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 -Nru cantata-1.4.2.ds1/replaygain/ffmpeginput.cpp cantata-1.5.2.ds2/replaygain/ffmpeginput.cpp --- cantata-1.4.2.ds1/replaygain/ffmpeginput.cpp 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/replaygain/ffmpeginput.cpp 2015-03-23 20:09:35.000000000 +0000 @@ -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 @@ : 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 @@ 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 @@ } #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 @@ *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 @@ #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 @@ 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 @@ } 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 @@ } 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 @@ } 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 @@ } 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 @@ av_free_packet(&handle->packet); return numberRead; } +#endif bool FfmpegInput::isFloatCodec() const { diff -Nru cantata-1.4.2.ds1/replaygain/mpg123input.cpp cantata-1.5.2.ds2/replaygain/mpg123input.cpp --- cantata-1.4.2.ds1/replaygain/mpg123input.cpp 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/replaygain/mpg123input.cpp 2015-03-23 20:09:35.000000000 +0000 @@ -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 @@ bool Mpg123Input::setChannelMap(int *st) const { - Q_UNUSED(st); + Q_UNUSED(st) return false; } diff -Nru cantata-1.4.2.ds1/replaygain/replaygain.cpp cantata-1.5.2.ds2/replaygain/replaygain.cpp --- cantata-1.4.2.ds1/replaygain/replaygain.cpp 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/replaygain/replaygain.cpp 2015-03-23 20:09:35.000000000 +0000 @@ -110,7 +110,7 @@ for (int i=0; iok()) { 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 -Nru cantata-1.4.2.ds1/replaygain/rgdialog.cpp cantata-1.5.2.ds2/replaygain/rgdialog.cpp --- cantata-1.4.2.ds1/replaygain/rgdialog.cpp 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/replaygain/rgdialog.cpp 2015-03-23 20:09:35.000000000 +0000 @@ -136,7 +136,7 @@ qRegisterMetaType("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 @@ { bool all=origTags.isEmpty() || (origTags.count()==origSongs.count() - ? MessageBox::Yes==MessageBox::questionYesNo(this, i18n("Scan all tracks?

    NOTE: All tracks have existing ReplyGain tags."), QString(), + ? MessageBox::Yes==MessageBox::questionYesNo(this, i18n("Scan all tracks?

    All tracks have existing ReplayGain tags."), 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 -Nru cantata-1.4.2.ds1/replaygain/trackscanner.h cantata-1.5.2.ds2/replaygain/trackscanner.h --- cantata-1.4.2.ds1/replaygain/trackscanner.h 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/replaygain/trackscanner.h 2015-03-23 20:09:35.000000000 +0000 @@ -59,6 +59,7 @@ 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 -Nru cantata-1.4.2.ds1/scrobbling/scrobbler.cpp cantata-1.5.2.ds2/scrobbling/scrobbler.cpp --- cantata-1.4.2.ds1/scrobbling/scrobbler.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/scrobbling/scrobbler.cpp 2015-03-23 20:09:34.000000000 +0000 @@ -305,7 +305,8 @@ 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 @@ QMap 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 @@ { 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 -Nru cantata-1.4.2.ds1/scrobbling/scrobblingsettings.cpp cantata-1.5.2.ds2/scrobbling/scrobblingsettings.cpp --- cantata-1.4.2.ds1/scrobbling/scrobblingsettings.cpp 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/scrobbling/scrobblingsettings.cpp 2015-03-23 20:09:34.000000000 +0000 @@ -75,10 +75,14 @@ if (firstMpdClient.isEmpty()) { REMOVE(noteLabel) } else { - noteLabel->setText(i18n("NOTE: 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.", 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 -Nru cantata-1.4.2.ds1/scrobbling/scrobblingsettings.ui cantata-1.5.2.ds2/scrobbling/scrobblingsettings.ui --- cantata-1.4.2.ds1/scrobbling/scrobblingsettings.ui 2014-09-28 16:30:07.000000000 +0000 +++ cantata-1.5.2.ds2/scrobbling/scrobblingsettings.ui 2015-03-23 20:09:34.000000000 +0000 @@ -83,46 +83,39 @@ - + Status: - - loginButton - - - - - - - 0 - 0 - - - - - - - - - - - - 0 - 0 - - - - Login - - - - + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + Login + + - + QFrame::StyledPanel @@ -132,58 +125,32 @@ - + Scrobble tracks - + Show 'Love' button - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 4 - - - - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - Qt::NoTextInteraction - - + - + Qt::Vertical 20 - 6 + 0 @@ -202,6 +169,11 @@
    support/buddylabel.h
    + NoteLabel + QLabel +
    widgets/notelabel.h
    +
    + MessageWidget QFrame
    support/messagewidget.h
    diff -Nru cantata-1.4.2.ds1/streams/digitallyimportedsettings.ui cantata-1.5.2.ds2/streams/digitallyimportedsettings.ui --- cantata-1.4.2.ds1/streams/digitallyimportedsettings.ui 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/streams/digitallyimportedsettings.ui 2015-03-23 20:09:48.000000000 +0000 @@ -93,49 +93,42 @@ Status: - - loginButton -
    - - - - - - 0 - 0 - - - - - - - - - - - - 0 - 0 - - - - Login - - - - + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + Login + + - + Session expiry: - + @@ -145,7 +138,7 @@ - + QFrame::StyledPanel @@ -159,28 +152,16 @@ - + - <i><b>NOTE:</b> These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, and Sky.fm</i> - - - true - - - Qt::NoTextInteraction + These settings apply to Digitally Imported, JazzRadio.com, RockRadio.com, and Sky.fm - + - <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> - - - true - - - Qt::NoTextInteraction + 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. @@ -211,6 +192,11 @@
    support/buddylabel.h
    + NoteLabel + QLabel +
    widgets/notelabel.h
    +
    + MessageWidget QFrame
    support/messagewidget.h
    diff -Nru cantata-1.4.2.ds1/streams/streamdialog.cpp cantata-1.5.2.ds2/streams/streamdialog.cpp --- cantata-1.4.2.ds1/streams/streamdialog.cpp 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/streams/streamdialog.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -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 @@ } 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 @@ bool s=save(); nameEntry->setVisible(s); nameLabel->setVisible(s); - QApplication::processEvents(); - adjustSize(); + Utils::resizeWindow(this, true, false); } void StreamDialog::changed() diff -Nru cantata-1.4.2.ds1/streams/streamproviderlistdialog.cpp cantata-1.5.2.ds2/streams/streamproviderlistdialog.cpp --- cantata-1.4.2.ds1/streams/streamproviderlistdialog.cpp 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/streams/streamproviderlistdialog.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -254,7 +254,7 @@ temp.write(j->readAll()); temp.close(); if (!p->install(temp.fileName(), item->text(0), false)) { - MessageBox::error(this, i18n("Failed to install %1", 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 @@ doNext(); } } else { - MessageBox::error(this, i18n("Failed to download %1", item->text(0))); + MessageBox::error(this, i18n("Failed to download '%1'", item->text(0))); setState(false); } } @@ -321,21 +321,13 @@ updateView(); } -static QString nameString(QTreeWidgetItem *i) -{ - if (Cat_ListenLive==i->data(0, Role_Category).toInt()) { - return i->text(0)+QLatin1String(" (")+i18n("ListenLive")+QLatin1String(")"); - } - 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 @@ for (int c=0; cchildCount(); ++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 @@ } 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="

    "; - if (!install.isEmpty()) { - message+=i18n("Install the following?")+"

      "; - foreach (const QString &n, install) { - message+="
    • "+n+"
    • "; - } - message+="
    "; - if (!update.isEmpty()) { - message+="

    "; - } - } - if (!update.isEmpty()) { - message+=i18n("Update the following?")+"

      "; - foreach (const QString &n, update) { - message+="
    • "+n+"
    • "; - } - message+="
    "; + 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 -Nru cantata-1.4.2.ds1/streams/streamspage.cpp cantata-1.5.2.ds2/streams/streamspage.cpp --- cantata-1.4.2.ds1/streams/streamspage.cpp 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/streams/streamspage.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -69,14 +69,14 @@ 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 @@ 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 @@ 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 @@ } if (!StreamsModel::self()->exportFavourites(fileName)) { - MessageBox::error(this, i18n("Failed to create %1!", fileName)); + MessageBox::error(this, i18n("Failed to create '%1'!", fileName)); } } @@ -265,9 +263,9 @@ QString existingNameForUrl=StreamsModel::self()->favouritesNameForUrl(url); if (!existingNameForUrl.isEmpty()) { - MessageBox::error(this, i18n("Stream already exists!
    %1", existingNameForUrl)); + MessageBox::error(this, i18n("Stream '%1' already exists!", existingNameForUrl)); } else if (StreamsModel::self()->nameExistsInFavourites(name)) { - MessageBox::error(this, i18n("A stream named %1 already exists!", name)); + MessageBox::error(this, i18n("A stream named '%1' already exists!", name)); } else { StreamsModel::self()->addToFavourites(url, name); } @@ -355,7 +353,7 @@ return; } - if (cat->children.isEmpty() || cat->cacheName.isEmpty() || MessageBox::Yes==MessageBox::questionYesNo(this, i18n("Reload %1 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 @@ const StreamsModel::Item *item=static_cast(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 %1?", 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(item)->isBookmarks) { - if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove all %1 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 @@ return; } } else { - if (MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove %1?", + 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 @@ QString existingNameForUrl=newUrl!=url ? StreamsModel::self()->favouritesNameForUrl(newUrl) : QString(); if (!existingNameForUrl.isEmpty()) { - MessageBox::error(this, i18n("Stream already exists!
    %1", 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 %1 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 @@ } } StdActions::self()->replacePlayQueueAction->setEnabled(haveSelection && onlyStreamsSelected); - StdActions::self()->addWithPriorityAction->setEnabled(haveSelection && onlyStreamsSelected); menuButton->controlState(); } diff -Nru cantata-1.4.2.ds1/streams/streamspage.h cantata-1.5.2.ds2/streams/streamspage.h --- cantata-1.4.2.ds1/streams/streamspage.h 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/streams/streamspage.h 2015-03-23 20:09:48.000000000 +0000 @@ -42,7 +42,7 @@ 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 -Nru cantata-1.4.2.ds1/streams/streamssettings.cpp cantata-1.5.2.ds2/streams/streamssettings.cpp --- cantata-1.4.2.ds1/streams/streamssettings.cpp 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/streams/streamssettings.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -39,6 +39,7 @@ #else #include #endif +#include enum Roles { KeyRole = Qt::UserRole, @@ -147,7 +148,7 @@ name=name.replace("\\", "_"); #endif - if (get(name) && MessageBox::No==MessageBox::warningYesNo(this, i18n("A category named %1 already exists!
    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 @@ } 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 @@ 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 @@ } QListWidgetItem *item=categories->item(row); - if (!item->data(BuiltInRole).toBool() && MessageBox::No==MessageBox::warningYesNo(this, i18n("Are you sure you wish to remove %1?", 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 @@ DigitallyImportedSettings(this).show(); } +void StreamsSettings::raiseWindow() +{ + #ifdef Q_OS_MAC + Utils::raiseWindow(topLevelWidget()); + #endif +} + QListWidgetItem * StreamsSettings::get(const QString &name) { for (int i=0; icount(); ++i) { diff -Nru cantata-1.4.2.ds1/streams/streamssettings.h cantata-1.5.2.ds2/streams/streamssettings.h --- cantata-1.4.2.ds1/streams/streamssettings.h 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/streams/streamssettings.h 2015-03-23 20:09:48.000000000 +0000 @@ -46,6 +46,7 @@ void installFromWeb(); void remove(); void configure(); + void raiseWindow(); private: bool install(const QString &fileName, const QString &name, bool showErrors=true); diff -Nru cantata-1.4.2.ds1/streams/streamssettings.ui cantata-1.5.2.ds2/streams/streamssettings.ui --- cantata-1.4.2.ds1/streams/streamssettings.ui 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/streams/streamssettings.ui 2015-03-23 20:09:48.000000000 +0000 @@ -75,20 +75,21 @@
    - + - <i><b>NOTE:</b> Built-in categories are shown in italic, and these cannot be removed.</i> - - - true - - - Qt::NoTextInteraction + Built-in categories are shown in italic, and these cannot be removed. + + + PlainNoteLabel + QLabel +
    widgets/notelabel.h
    +
    +
    diff -Nru cantata-1.4.2.ds1/support/actioncollection.cpp cantata-1.5.2.ds2/support/actioncollection.cpp --- cantata-1.4.2.ds1/support/actioncollection.cpp 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/support/actioncollection.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -116,7 +116,7 @@ Action *ActionCollection::addAction(const QString &name, Action *action) { QAction *act = addAction(name, static_cast(action)); - Q_UNUSED(act); + Q_UNUSED(act) Q_ASSERT(act == action); return action; } diff -Nru cantata-1.4.2.ds1/support/action.cpp cantata-1.5.2.ds2/support/action.cpp --- cantata-1.4.2.ds1/support/action.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/action.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -99,7 +99,7 @@ } act->setToolTip(QString::fromLatin1("%1 %2") .arg(tt) - .arg(sc.toString())); + .arg(sc.toString(QKeySequence::NativeText))); } } diff -Nru cantata-1.4.2.ds1/support/CMakeLists.txt cantata-1.5.2.ds2/support/CMakeLists.txt --- cantata-1.4.2.ds1/support/CMakeLists.txt 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/CMakeLists.txt 2015-03-23 20:09:48.000000000 +0000 @@ -14,18 +14,32 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/support/combobox.cpp cantata-1.5.2.ds2/support/combobox.cpp --- cantata-1.4.2.ds1/support/combobox.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/combobox.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -23,14 +23,6 @@ #include "combobox.h" #include "lineedit.h" -#include "utils.h" -#include -#include -#include -#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 @@ #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 @@ 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()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(c)->setMaximumHeight(0); - } - } - #endif - } -} - -void ComboBox::hidePopup() -{ - if (GtkStyle::isActive() && count()>(maxPopupItemCount-2) && toggleState) { - QComboBox::setEditable(false); - } - QComboBox::hidePopup(); -} -#endif diff -Nru cantata-1.4.2.ds1/support/combobox.h cantata-1.5.2.ds2/support/combobox.h --- cantata-1.4.2.ds1/support/combobox.h 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/support/combobox.h 2015-03-23 20:09:48.000000000 +0000 @@ -45,18 +45,11 @@ 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 -Nru cantata-1.4.2.ds1/support/configdialog.cpp cantata-1.5.2.ds2/support/configdialog.cpp --- cantata-1.4.2.ds1/support/configdialog.cpp 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/support/configdialog.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -0,0 +1,451 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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::const_iterator it=pages.begin(); + QMap::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::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(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(w) || qobject_cast(w) ||*/ qobject_cast(w) || + qobject_cast(w) || qobject_cast(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(c)) { + QWidget *cw=static_cast(c); + if (isFocusable(cw)) { + return cw; + } + } + } + // Now try grandchildren... + foreach (QObject *c, children) { + if (qobject_cast(c)) { + QWidget *f=firstFocusableWidget(static_cast(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 -Nru cantata-1.4.2.ds1/support/configdialog.h cantata-1.5.2.ds2/support/configdialog.h --- cantata-1.4.2.ds1/support/configdialog.h 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/support/configdialog.h 2015-03-23 20:09:48.000000000 +0000 @@ -0,0 +1,116 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 + +#ifdef __APPLE__ +#include +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 pages; + bool shown; + QPropertyAnimation *resizeAnim; + #else + PageWidget *pageWidget; + QMap pages; + #endif +}; + +#endif diff -Nru cantata-1.4.2.ds1/support/configuration.cpp cantata-1.5.2.ds2/support/configuration.cpp --- cantata-1.4.2.ds1/support/configuration.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/configuration.cpp 2015-03-23 20:09:47.000000000 +0000 @@ -52,6 +52,24 @@ return vmax ? 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 -Nru cantata-1.4.2.ds1/support/configuration.h cantata-1.5.2.ds2/support/configuration.h --- cantata-1.4.2.ds1/support/configuration.h 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/support/configuration.h 2015-03-23 20:09:48.000000000 +0000 @@ -36,6 +36,7 @@ #else #include #endif +#include "utils.h" class Configuration #ifndef ENABLE_KDE_SUPPORT @@ -97,6 +98,10 @@ 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 -Nru cantata-1.4.2.ds1/support/dialog.cpp cantata-1.5.2.ds2/support/dialog.cpp --- cantata-1.4.2.ds1/support/dialog.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/dialog.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -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 @@ , buttonTypes(0) , mw(0) , buttonBox(0) - , managedAccels(false) #endif + , shown(false) { if (!name.isEmpty()) { setObjectName(name); @@ -50,25 +53,65 @@ 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 +#include + +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<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 @@ -77,6 +120,32 @@ #include #include +#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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/support/dialog.h cantata-1.5.2.ds2/support/dialog.h --- cantata-1.4.2.ds1/support/dialog.h 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/dialog.h 2015-03-23 20:09:47.000000000 +0000 @@ -29,16 +29,19 @@ #ifdef ENABLE_KDE_SUPPORT #include #include -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 @@ #include #include #include "localize.h" +#ifdef Q_OS_MAC +#include +#endif struct GuiItem { GuiItem(const QString &t=QString(), const QString &i=QString()) @@ -106,6 +112,19 @@ 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 @@ 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 @@ 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 @@ QDialogButtonBox *buttonBox; QMap userButtons; QSize cfgSize; - bool managedAccels; + bool shown; }; Q_DECLARE_OPERATORS_FOR_FLAGS(Dialog::ButtonCodes) diff -Nru cantata-1.4.2.ds1/support/fancytabwidget.cpp cantata-1.5.2.ds2/support/fancytabwidget.cpp --- cantata-1.4.2.ds1/support/fancytabwidget.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/fancytabwidget.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -39,6 +39,9 @@ #include "gtkstyle.h" #include "action.h" #include "utils.h" +#ifdef Q_OS_MAC +#include "osxstyle.h" +#endif #include #include #include @@ -84,7 +87,12 @@ 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 @@ 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 @@ bool FancyTabProxyStyle::eventFilter(QObject* o, QEvent* e) { + #ifndef Q_OS_MAC QTabBar *bar = qobject_cast(o); if (bar && (e->type() == QEvent::MouseMove || e->type() == QEvent::Leave)) { QMouseEvent *event = static_cast(e); @@ -252,6 +275,7 @@ bar->update(); } } + #endif return false; } @@ -259,25 +283,31 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/support/fancytabwidget.h cantata-1.5.2.ds2/support/fancytabwidget.h --- cantata-1.4.2.ds1/support/fancytabwidget.h 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/fancytabwidget.h 2015-03-23 20:09:48.000000000 +0000 @@ -93,7 +93,9 @@ void leaveEvent(QEvent *); private: + #ifndef Q_OS_MAC QPropertyAnimation animator; + #endif FancyTabBar *tabbar; float faderValue; }; diff -Nru cantata-1.4.2.ds1/support/flattoolbutton.cpp cantata-1.5.2.ds2/support/flattoolbutton.cpp --- cantata-1.4.2.ds1/support/flattoolbutton.cpp 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/support/flattoolbutton.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -0,0 +1,57 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 +#include +#include + +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 -Nru cantata-1.4.2.ds1/support/flattoolbutton.h cantata-1.5.2.ds2/support/flattoolbutton.h --- cantata-1.4.2.ds1/support/flattoolbutton.h 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/support/flattoolbutton.h 2015-03-23 20:09:48.000000000 +0000 @@ -0,0 +1,40 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 FLATTOOLBUTTON_H +#define FLATTOOLBUTTON_H + +#include + +class FlatToolButton : public QToolButton +{ +public: + #ifdef Q_OS_MAC + explicit FlatToolButton(QWidget *parent = 0); + void paintEvent(QPaintEvent *e); + #else + explicit FlatToolButton(QWidget *parent = 0) : QToolButton(parent) { setAutoRaise(true); } + #endif +}; + +#endif // MENUBUTTON_H diff -Nru cantata-1.4.2.ds1/support/gtkproxystyle.cpp cantata-1.5.2.ds2/support/gtkproxystyle.cpp --- cantata-1.4.2.ds1/support/gtkproxystyle.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/gtkproxystyle.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -52,13 +52,14 @@ 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 &c, bool modView) - : TouchProxyStyle(styleSpin, useOverlayStyleScrollbars(thinSb)) - , modViewFrame(modView) +GtkProxyStyle::GtkProxyStyle(int modView, bool thinSb, bool styleSpin, const QMap &c) + : TouchProxyStyle(modView, styleSpin, useOverlayStyleScrollbars(thinSb)) , css(c) { shortcutHander=new ShortcutHandler(this); @@ -83,25 +84,6 @@ 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 -Nru cantata-1.4.2.ds1/support/gtkproxystyle.h cantata-1.5.2.ds2/support/gtkproxystyle.h --- cantata-1.4.2.ds1/support/gtkproxystyle.h 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/gtkproxystyle.h 2015-03-23 20:09:48.000000000 +0000 @@ -33,10 +33,9 @@ class GtkProxyStyle : public TouchProxyStyle { public: - GtkProxyStyle(bool thinSb, bool styleSpin, const QMap &c, bool modView); + GtkProxyStyle(int modView, bool thinSb, bool styleSpin, const QMap &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 @@ private: ShortcutHandler *shortcutHander; - bool modViewFrame; QMap css; }; diff -Nru cantata-1.4.2.ds1/support/gtkstyle.cpp cantata-1.5.2.ds2/support/gtkstyle.cpp --- cantata-1.4.2.ds1/support/gtkstyle.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/gtkstyle.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -105,27 +105,57 @@ 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 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 @@ #else if (widget && isActive()) { QString theme=GtkStyle::themeName().toLower(); - bool thinSbar=false; bool touchStyleSpin=false; - bool modViewFrame=false; + int modViewFrame=0; QMap css; if (!theme.isEmpty()) { QFile cssFile(Utils::systemDir(QLatin1String("themes"))+theme+QLatin1String(".css")); @@ -272,7 +305,11 @@ 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+6isRightToLeft() ? "edit-clear-locationbar-ltr" : "edit-clear-locationbar-rtl"); + if (icon.isNull()) { + icon=Icon("edit-clear"); + } + break; + default: break; + } + return icon; +} + +#endif diff -Nru cantata-1.4.2.ds1/support/icon.h cantata-1.5.2.ds2/support/icon.h --- cantata-1.4.2.ds1/support/icon.h 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/icon.h 2015-03-23 20:09:48.000000000 +0000 @@ -60,6 +60,12 @@ static QString currentTheme() { return QIcon::themeName(); } #endif static Icon create(const QString &name, const QList &sizes, bool andSvg=false); + + enum Std { + Close, + Clear + }; + static Icon std(Std i); }; #endif diff -Nru cantata-1.4.2.ds1/support/keysequencewidget.cpp cantata-1.5.2.ds2/support/keysequencewidget.cpp --- cantata-1.4.2.ds1/support/keysequencewidget.cpp 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/support/keysequencewidget.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -28,7 +28,7 @@ #include #include #include -#include +#include "messagebox.h" #include // This defines the unicode symbols for special keys (kCommandUnicode and friends) @@ -72,9 +72,9 @@ // 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 @@ 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:") - + "
    • %2

    " - + 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 -Nru cantata-1.4.2.ds1/support/kmessagewidget.cpp cantata-1.5.2.ds2/support/kmessagewidget.cpp --- cantata-1.4.2.ds1/support/kmessagewidget.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/kmessagewidget.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -18,6 +18,8 @@ * 02110-1301 USA */ #include "kmessagewidget.h" +#include "localize.h" +#include "utils.h" #ifdef ENABLE_KDE_SUPPORT #include @@ -31,6 +33,7 @@ #include "icon.h" #include "squeezedtextlabel.h" +#include "flattoolbutton.h" #include #include #include @@ -86,8 +89,17 @@ 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 @@ 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 @@ 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 @@ 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 @@ *fg = scheme.foreground().color(); } #endif -#include 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 @@ #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 @@ 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 @@ #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 @@ " 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 @@ .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 -Nru cantata-1.4.2.ds1/support/lineedit.cpp cantata-1.5.2.ds2/support/lineedit.cpp --- cantata-1.4.2.ds1/support/lineedit.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/lineedit.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -41,7 +41,7 @@ } } -#if !defined ENABLE_KDE_SUPPORT && QT_VERSION < 0x050200 +#if !defined ENABLE_KDE_SUPPORT // && QT_VERSION < 0x050200 /**************************************************************************** ** @@ -62,13 +62,7 @@ : 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 -Nru cantata-1.4.2.ds1/support/lineedit.h cantata-1.5.2.ds2/support/lineedit.h --- cantata-1.4.2.ds1/support/lineedit.h 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/lineedit.h 2015-03-23 20:09:48.000000000 +0000 @@ -45,15 +45,15 @@ 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 -Nru cantata-1.4.2.ds1/support/mac-clear.svg cantata-1.5.2.ds2/support/mac-clear.svg --- cantata-1.4.2.ds1/support/mac-clear.svg 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/support/mac-clear.svg 2015-03-23 20:09:48.000000000 +0000 @@ -0,0 +1,3 @@ + + + diff -Nru cantata-1.4.2.ds1/support/mac-close.svg cantata-1.5.2.ds2/support/mac-close.svg --- cantata-1.4.2.ds1/support/mac-close.svg 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/support/mac-close.svg 2015-03-23 20:09:48.000000000 +0000 @@ -0,0 +1,3 @@ + + + diff -Nru cantata-1.4.2.ds1/support/messagebox.cpp cantata-1.5.2.ds2/support/messagebox.cpp --- cantata-1.4.2.ds1/support/messagebox.cpp 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/support/messagebox.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -33,6 +33,7 @@ #include #ifndef ENABLE_KDE_SUPPORT #include +#include MessageBox::ButtonCode map(QMessageBox::StandardButton c) { @@ -44,22 +45,71 @@ } } +#ifdef Q_OS_MAC +static void splitMessage(const QString &orig, QString &msg, QString &sub) +{ + static QStringList constSeps=QStringList() << QLatin1String("\n\n") << QLatin1String("

    "); + 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 @@ 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 -Nru cantata-1.4.2.ds1/support/messagebox.h cantata-1.5.2.ds2/support/messagebox.h --- cantata-1.4.2.ds1/support/messagebox.h 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/messagebox.h 2015-03-23 20:09:48.000000000 +0000 @@ -43,7 +43,8 @@ enum Type { Error, Question, - Warning + Warning, + Information }; extern ButtonCode questionYesNoCancel(QWidget *parent, const QString &message, const QString &title=QString(), @@ -58,12 +59,17 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/support/osxstyle.cpp cantata-1.5.2.ds2/support/osxstyle.cpp --- cantata-1.4.2.ds1/support/osxstyle.cpp 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/support/osxstyle.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -0,0 +1,219 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 +#include +#include +#include +#include +#include +#include +#include +#include + +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(sender()); + + if (!act) { + return; + } + + QMap::Iterator it=actions.begin(); + QMap::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(sender()); + + if (!w) { + return; + } + if (actions.contains(w)) { + actions[w]->setText(w->windowTitle()); + } +} + +void OSXStyle::focusWindowChanged(QWindow *win) +{ + QMap::Iterator it=actions.begin(); + QMap::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::Iterator it=actions.begin(); + QMap::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 -Nru cantata-1.4.2.ds1/support/osxstyle.h cantata-1.5.2.ds2/support/osxstyle.h --- cantata-1.4.2.ds1/support/osxstyle.h 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/support/osxstyle.h 2015-03-23 20:09:48.000000000 +0000 @@ -0,0 +1,84 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 +#include +#include + +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 actions; + QAction *closeAct; + QAction *minAct; + QAction *zoomAct; + + friend class Dialog; +}; + +#endif // OSXSTYLE_H diff -Nru cantata-1.4.2.ds1/support/pagewidget.cpp cantata-1.5.2.ds2/support/pagewidget.cpp --- cantata-1.4.2.ds1/support/pagewidget.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/pagewidget.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -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(v)->setIndentation(0); +// } +// return v; +//} +//#else + #include "icon.h" #include "gtkstyle.h" +#include "dialog.h" #include #include #include @@ -33,6 +63,7 @@ #include #include #include +#include static int layoutText(QTextLayout *layout, int maxWidth) { @@ -53,15 +84,18 @@ 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 @@ 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 @@ 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 @@ } } + #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 @@ 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 @@ 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 @@ } void setUnderMouse(bool u) { underMouse=u; } + bool standardList() const { return standard; } private: + bool standard; int iconSize; bool underMouse; }; @@ -219,40 +295,42 @@ 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; - - if (-1==size) { - size=QApplication::fontMetrics().height(); - if (size>20) { - size=Icon::stdSize(size*1.25); - } else { - size=22; + QBoxLayout *layout=new QBoxLayout(QBoxLayout::TopToBottom, this); + if (showHeader) { + QBoxLayout *titleLayout=new QBoxLayout(QBoxLayout::LeftToRight, 0); + titleLayout->addWidget(new QLabel(""+header+"", this)); + titleLayout->addItem(new QSpacerItem(16, 16, QSizePolicy::Expanding, QSizePolicy::Minimum)); + + 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(""+header+"", 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 @@ 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 @@ 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 @@ 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(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 @@ 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::setFocus() +{ + list->setFocus(); +} + +//#endif // ENABLE_KDE_SUPPORT diff -Nru cantata-1.4.2.ds1/support/pagewidget.h cantata-1.5.2.ds2/support/pagewidget.h --- cantata-1.4.2.ds1/support/pagewidget.h 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/pagewidget.h 2015-03-23 20:09:48.000000000 +0000 @@ -26,31 +26,30 @@ #include "icon.h" -#ifdef ENABLE_KDE_SUPPORT -#include -typedef KPageWidgetItem PageWidgetItem; +//#ifdef ENABLE_KDE_SUPPORT +//#include +//#include +//typedef KPageWidgetItem PageWidgetItem; + +//class PageWidget : public KPageWidget +//{ +// Q_OBJECT +//public: +// PageWidget(QWidget *p, bool listView=false, bool headers=true); +// virtual ~PageWidget() { } + +// 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; +//}; -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; - } - -Q_SIGNALS: - void currentPageChanged(); -}; - -#else +//#else #include #include @@ -61,7 +60,7 @@ 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 @@ 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 pages; }; -#endif +//#endif #endif diff -Nru cantata-1.4.2.ds1/support/pathrequester.cpp cantata-1.5.2.ds2/support/pathrequester.cpp --- cantata-1.4.2.ds1/support/pathrequester.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/pathrequester.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -35,7 +35,7 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/support/pathrequester.h cantata-1.5.2.ds2/support/pathrequester.h --- cantata-1.4.2.ds1/support/pathrequester.h 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/pathrequester.h 2015-03-23 20:09:47.000000000 +0000 @@ -42,7 +42,9 @@ #else #include "lineedit.h" -#include +#include "flattoolbutton.h" +#include + class PathRequester : public QWidget { Q_OBJECT @@ -50,8 +52,8 @@ 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: LineEdit *edit; - QToolButton *btn; + FlatToolButton *btn; bool dirMode; QString filter; }; diff -Nru cantata-1.4.2.ds1/support/proxystyle.cpp cantata-1.5.2.ds2/support/proxystyle.cpp --- cantata-1.4.2.ds1/support/proxystyle.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/proxystyle.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -23,15 +23,52 @@ #include "proxystyle.h" #include "acceleratormanager.h" +#include "gtkstyle.h" +#include "utils.h" #include +#include +#include +#include +#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(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 -Nru cantata-1.4.2.ds1/support/proxystyle.h cantata-1.5.2.ds2/support/proxystyle.h --- cantata-1.4.2.ds1/support/proxystyle.h 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/proxystyle.h 2015-03-23 20:09:48.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/support/support_mac_icons.qrc cantata-1.5.2.ds2/support/support_mac_icons.qrc --- cantata-1.4.2.ds1/support/support_mac_icons.qrc 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/support/support_mac_icons.qrc 2015-03-23 20:09:48.000000000 +0000 @@ -0,0 +1,6 @@ + + +mac-close.svg +mac-clear.svg + + diff -Nru cantata-1.4.2.ds1/support/themes/ambiance.css cantata-1.5.2.ds2/support/themes/ambiance.css --- cantata-1.4.2.ds1/support/themes/ambiance.css 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/themes/ambiance.css 2015-03-23 20:09:48.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/support/themes/ambiance-dt.css cantata-1.5.2.ds2/support/themes/ambiance-dt.css --- cantata-1.4.2.ds1/support/themes/ambiance-dt.css 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/themes/ambiance-dt.css 2015-03-23 20:09:48.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/support/themes/radiance.css cantata-1.5.2.ds2/support/themes/radiance.css --- cantata-1.4.2.ds1/support/themes/radiance.css 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/themes/radiance.css 2015-03-23 20:09:48.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/support/themes/radiance-dt.css cantata-1.5.2.ds2/support/themes/radiance-dt.css --- cantata-1.4.2.ds1/support/themes/radiance-dt.css 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/themes/radiance-dt.css 2015-03-23 20:09:48.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/support/thread.h cantata-1.5.2.ds2/support/thread.h --- cantata-1.4.2.ds1/support/thread.h 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/support/thread.h 2015-03-23 20:09:48.000000000 +0000 @@ -60,10 +60,12 @@ 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 -Nru cantata-1.4.2.ds1/support/touchproxystyle.cpp cantata-1.5.2.ds2/support/touchproxystyle.cpp --- cantata-1.4.2.ds1/support/touchproxystyle.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/touchproxystyle.cpp 2015-03-23 20:09:47.000000000 +0000 @@ -25,6 +25,9 @@ #include "utils.h" #include "gtkstyle.h" #include "flickcharm.h" +#ifdef Q_OS_MAC +#include "osxstyle.h" +#endif #include #include #include @@ -156,21 +159,21 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/support/touchproxystyle.h cantata-1.5.2.ds2/support/touchproxystyle.h --- cantata-1.4.2.ds1/support/touchproxystyle.h 2014-09-28 16:30:23.000000000 +0000 +++ cantata-1.5.2.ds2/support/touchproxystyle.h 2015-03-23 20:09:48.000000000 +0000 @@ -36,7 +36,7 @@ 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 @@ void polish(QPalette &pal) { ProxyStyle::polish(pal); } void polish(QApplication *app) { ProxyStyle::polish(app); } -private: +protected: bool touchStyleSpin; double spinButtonRatio; SbType sbarType; diff -Nru cantata-1.4.2.ds1/support/utils.cpp cantata-1.5.2.ds2/support/utils.cpp --- cantata-1.4.2.ds1/support/utils.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/utils.cpp 2015-03-23 20:09:48.000000000 +0000 @@ -24,6 +24,7 @@ #include "utils.h" #include "config.h" #include "localize.h" +#include "thread.h" #include #include #include @@ -35,6 +36,8 @@ #include #include #include +#include +#include #if QT_VERSION >= 0x050000 #include #else @@ -95,7 +98,7 @@ return label; } -QString Utils::fixPath(const QString &dir) +QString Utils::fixPath(const QString &dir, bool ensureEndsInSlash) { QString d(dir); @@ -113,36 +116,65 @@ #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 @@ ::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 @@ #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 @@ 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 @@ 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 @@ #endif } -struct Thread : public QThread -{ - using QThread::msleep; -}; - void Utils::msleep(int msecs) { Thread::msleep(msecs); @@ -668,12 +695,16 @@ 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 @@ #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 @@ #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::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 @@ 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 @@ path.arcTo(r.x()+r.width()-diameter, r.y()+r.height()-diameter, diameter, diameter, 270, 90); return path; } + +#ifdef ENABLE_KDE_SUPPORT +#include +#endif +#ifdef Q_OS_WIN +// This is down here, because windows.h includes ALL windows stuff - and we get conflicts with MessageBox :-( +#include +#elif !defined Q_OS_MAC && QT_VERSION < 0x050000 +#include +#include +#endif + +void Utils::raiseWindow(QWidget *w) +{ + if (!w) { + return; + } + + #ifdef Q_OS_WIN + ::SetWindowPos(reinterpret_cast(w->effectiveWinId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); + ::SetWindowPos(reinterpret_cast(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 -Nru cantata-1.4.2.ds1/support/utils.h cantata-1.5.2.ds2/support/utils.h --- cantata-1.4.2.ds1/support/utils.h 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/utils.h 2015-03-23 20:09:47.000000000 +0000 @@ -63,11 +63,19 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/support/windowmanager.cpp cantata-1.5.2.ds2/support/windowmanager.cpp --- cantata-1.4.2.ds1/support/windowmanager.cpp 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/windowmanager.cpp 2015-03-23 20:09:47.000000000 +0000 @@ -108,24 +108,26 @@ } #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::mouseMoveEvent(QObject *object, QEvent *event) { - Q_UNUSED(object); + Q_UNUSED(object) // stop timer if (_dragTimer.isActive()){ @@ -299,8 +301,8 @@ 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 @@ 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 @@ #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::appMouseEvent(QObject *object, QEvent *event) { - Q_UNUSED(object); + Q_UNUSED(object) // store target window (see later) QWidget *window(_parent->_target.data()->window()); diff -Nru cantata-1.4.2.ds1/support/windowmanager.h cantata-1.5.2.ds2/support/windowmanager.h --- cantata-1.4.2.ds1/support/windowmanager.h 2014-09-28 16:30:22.000000000 +0000 +++ cantata-1.5.2.ds2/support/windowmanager.h 2015-03-23 20:09:48.000000000 +0000 @@ -174,9 +174,11 @@ //! 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 -Nru cantata-1.4.2.ds1/tags/CMakeLists.txt cantata-1.5.2.ds2/tags/CMakeLists.txt --- cantata-1.4.2.ds1/tags/CMakeLists.txt 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/CMakeLists.txt 2015-03-23 20:09:36.000000000 +0000 @@ -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 @@ 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 -Nru cantata-1.4.2.ds1/tags/main.cpp cantata-1.5.2.ds2/tags/main.cpp --- cantata-1.4.2.ds1/tags/main.cpp 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/main.cpp 2015-03-23 20:09:36.000000000 +0000 @@ -29,6 +29,15 @@ #include "tags.h" #include "taghelper.h" +#ifdef Q_OS_WIN +#include +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 @@ 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 -Nru cantata-1.4.2.ds1/tags/tageditor.cpp cantata-1.5.2.ds2/tags/tageditor.cpp --- cantata-1.4.2.ds1/tags/tageditor.cpp 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/tageditor.cpp 2015-03-23 20:09:36.000000000 +0000 @@ -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 @@ 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 &songs, const QSet &existingArtists, const QSet &existingAlbumArtists, const QSet &existingComposers, const QSet &existingAlbums, const QSet &existingGenres, const QString &udi) @@ -101,18 +111,23 @@ , 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 @@ composerSupport=MPDConnection::self()->composerTagSupported(); commentSupport=MPDConnection::self()->commentTagSupported(); isMopidy=MPDConnection::self()->isMopdidy(); + ratingsSupport=!isMopidy; #endif foreach (const Song &s, songs) { @@ -135,6 +151,7 @@ continue; } Song song(s); + song.rating=Song::Rating_Null; if (s.guessed) { song.revertGuessedTags(); } @@ -155,8 +172,24 @@ 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 @@ } 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 @@ 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 @@ 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 @@ } 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 @@ 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 @@ 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()lineEdit()->setReadOnly(true); } TagEditor::~TagEditor() @@ -363,11 +418,14 @@ 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 @@ 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 @@ genre->setPlaceholderText(QString()); disc->setVarious(false); year->setVarious(false); + if (ratingVarious) { + ratingVarious->setVisible(false); + } } } @@ -425,17 +489,22 @@ 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; isetValue(i+1); + if (0!=i || !haveMultiple) { + progress->setValue(progress->value()+1); + } if (i && 0==i%10) { QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } @@ -455,7 +524,7 @@ if (updated) { edited=original; } - progress->setVisible(false); + controlInitialActionsState(); if (haveMultiple) { setVariousHint(); } else { @@ -469,7 +538,7 @@ if (MessageBox::No==MessageBox::questionYesNo(this, (isAll ? i18n("Apply \"Various Artists\" workaround to all tracks?") : i18n("Apply \"Various Artists\" workaround?"))+ - QLatin1String("


    ")+ + QLatin1String("

    ")+ i18n("This will set 'Album artist' and 'Artist' to " "\"Various Artists\", and set 'Title' to " "\"TrackArtist - TrackTitle\""), i18n("Apply \"Various Artists\" Workaround"), @@ -511,7 +580,7 @@ if (MessageBox::No==MessageBox::questionYesNo(this, (isAll ? i18n("Revert \"Various Artists\" workaround on all tracks?") : i18n("Revert \"Various Artists\" workaround"))+ - QLatin1String("


    ")+ + QLatin1String("

    ")+ 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 " @@ -594,10 +663,9 @@ { 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 all 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 all 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::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; isetValue(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; isetVisible(true); + progress->setRange(0, edited.count()); + QStringList failed; + for (int i=1; isetValue(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 @@ { 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 @@ } } - 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::setSong(const Song &s) { + blockSignals(true); title->setText(s.title); artist->setText(s.artist); albumArtist->setText(s.albumartist); @@ -777,6 +958,11 @@ 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 @@ titleLabel->setEnabled(!isMultiple); track->setEnabled(!isMultiple); trackLabel->setEnabled(!isMultiple); + if (isMultiple) { title->setText(QString()); track->setValue(0); @@ -825,6 +1012,97 @@ QLatin1String("Mopidy")); } +void TagEditor::rating(const QString &f, quint8 r) +{ + if (!ratingWidget) { + return; + } + for (int i=original.count()>1 ? 1 : 0; isetValue(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; isetValue(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; isetValue(rating); + } + } + setVariousHint(); + } +} + bool TagEditor::applyUpdates() { bool skipFirst=original.count()>1; @@ -872,6 +1150,11 @@ } 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 @@ } editedIndexes.clear(); setSong(original.at(currentSongIndex)); + checkRating(); } else { setSong(original.at(currentSongIndex)); } + setLabelStates(); enableOkButton(); break; case User1: // Next @@ -1007,3 +1292,16 @@ 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 -Nru cantata-1.4.2.ds1/tags/tageditor.h cantata-1.5.2.ds2/tags/tageditor.h --- cantata-1.4.2.ds1/tags/tageditor.h 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/tageditor.h 2015-03-23 20:09:36.000000000 +0000 @@ -49,6 +49,8 @@ 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 @@ Device * getDevice(const QString &udi, QWidget *p); #endif void closeEvent(QCloseEvent *event); + void controlInitialActionsState(); private Q_SLOTS: void readComments(); @@ -72,10 +75,14 @@ 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 @@ bool haveGenres; bool haveDiscs; bool haveYears; + bool haveRatings; bool saving; bool composerSupport; bool commentSupport; + QAction *readRatingsAct; + QAction *writeRatingsAct; }; #endif diff -Nru cantata-1.4.2.ds1/tags/tageditor.ui cantata-1.5.2.ds2/tags/tageditor.ui --- cantata-1.4.2.ds1/tags/tageditor.ui 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/tageditor.ui 2015-03-23 20:09:36.000000000 +0000 @@ -6,221 +6,243 @@ 0 0 - 327 - 252 + 517 + 490 - + 0 - - - - QFormLayout::ExpandingFieldsGrow + + 0 - - - - Track: - - - trackName - - - - - - - - - - Title: - - - title - - - - - - - - - - Artist: - - - artist - - - - - - - - - - Album artist: - - - albumArtist - - - - - - - - - - Composer: - - - composer - - - - - - - - - - Album: - - - album - - - - - - - - - - Track number: - - - track - - - - - + + 0 + + + 0 + + + + + QFormLayout::ExpandingFieldsGrow + + + + + Track: + + + trackName + + + + + + + Qt::NoFocus + + + true + + + + + + + Title: + + + title + + + + + + + + + + Artist: + + + artist + + + + + + + + + + Album artist: + + + albumArtist + + + + + + + + + + Composer: + + + composer + + + + + + + + + + Album: + + + album + + + + + + + + + + Track number: + + + track + + + + + + + + + + Disc number: + + + disc + + + + + + + + + + Genre: + + + genre + + + + + + + + + + Year: + + + year + + + + + + + + + + Rating: + + + ratingWidget + + + + + + + + + + + + <i>(Various)</i> + + + + + + + + + Comment: + + + comment + + + + + + + - - + + - Disc number: - - - disc + Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock') - - - - - + + - Genre: - - - genre + Ratings are stored in an external database, and <b>not</b> in the song's file. - - - - - + + - Year: - - - year + Connected to a Mopidy server (manual update required). - - + + - - - - Comment: - - - comment + + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 2 + - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 4 - - - - - - - - <i><b>NOTE</b> Multiple genres should be separated via a semicolon (e.g. 'Rock;Hard Rock')</i> - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - Qt::NoTextInteraction - - - - - - - Qt::Vertical - - - QSizePolicy::MinimumExpanding - - - - 20 - 0 - - - - - - - - <i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i> - - - - - + @@ -236,11 +258,6 @@
    widgets/completioncombo.h
    - ComboBox - QComboBox -
    support/combobox.h
    -
    - TagSpinBox QSpinBox
    widgets/tagspinbox.h
    @@ -251,9 +268,19 @@
    widgets/statelabel.h
    - UrlLabel + PlainNoteLabel QLabel -
    support/urllabel.h
    +
    widgets/notelabel.h
    +
    + + PlainUrlNoteLabel + QLabel +
    widgets/notelabel.h
    +
    + + RatingWidget + QWidget +
    widgets/ratingwidget.h
    diff -Nru cantata-1.4.2.ds1/tags/taghelper.cpp cantata-1.5.2.ds2/tags/taghelper.cpp --- cantata-1.4.2.ds1/tags/taghelper.cpp 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/taghelper.cpp 2015-03-23 20:09:36.000000000 +0000 @@ -154,6 +154,12 @@ 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 -Nru cantata-1.4.2.ds1/tags/taghelperiface.cpp cantata-1.5.2.ds2/tags/taghelperiface.cpp --- cantata-1.4.2.ds1/tags/taghelperiface.cpp 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/taghelperiface.cpp 2015-03-23 20:09:36.000000000 +0000 @@ -230,6 +230,38 @@ 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 TagHelperIface::readAll(const QString &fileName) { DBUG << fileName; diff -Nru cantata-1.4.2.ds1/tags/taghelperiface.h cantata-1.5.2.ds2/tags/taghelperiface.h --- cantata-1.4.2.ds1/tags/taghelperiface.h 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/taghelperiface.h 2015-03-23 20:09:36.000000000 +0000 @@ -67,6 +67,8 @@ 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 readAll(const QString &fileName); private: diff -Nru cantata-1.4.2.ds1/tags/tags.cpp cantata-1.5.2.ds2/tags/tags.cpp --- cantata-1.4.2.ds1/tags/tags.cpp 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/tags.cpp 2015-03-23 20:09:36.000000000 +0000 @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -79,6 +80,7 @@ #include #include #include +#include #ifdef TAGLIB_EXTRAS_FOUND #include #include @@ -117,7 +119,32 @@ 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 @@ ensureFileTypeResolvers(); #ifdef Q_OS_WIN - return TagLib::FileRef(reinterpret_cast(path.constData()), true, TagLib::AudioProperties::Fast); + return TagLib::FileRef(reinterpret_cast(path.utf16()), true, TagLib::AudioProperties::Fast); #else return TagLib::FileRef(QFile::encodeName(path).constData(), true, TagLib::AudioProperties::Fast); #endif @@ -276,7 +303,7 @@ } // -- 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 @@ } } } + + 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(*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 @@ 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 @@ 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 @@ } } } + + 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 @@ 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 @@ } 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 @@ 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 @@ *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 @@ 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 @@ #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 @@ } } } + 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 @@ 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 @@ 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 @@ } } } + 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 @@ 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 @@ 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 @@ 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 @@ } 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 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 @@ } 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(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 @@ 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 @@ return img; } - readTags(fileref, 0, 0, &img, 0); + readTags(fileref, 0, 0, &img, 0, 0); return img; } @@ -1235,7 +1361,7 @@ return lyrics; } - readTags(fileref, 0, 0, 0, &lyrics); + readTags(fileref, 0, 0, 0, &lyrics, 0); return lyrics; } @@ -1246,9 +1372,9 @@ 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(fileref.file()); if (mpeg) { #ifdef TAGLIB_CAN_SAVE_ID3VER @@ -1309,7 +1435,7 @@ } ReplayGain rg; - readTags(fileref, 0, &rg, 0, 0); + readTags(fileref, 0, &rg, 0, 0, 0); return rg; } @@ -1360,6 +1486,24 @@ 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 readAll(const QString &fileName) { QMap allTags; diff -Nru cantata-1.4.2.ds1/tags/tags.h cantata-1.5.2.ds2/tags/tags.h --- cantata-1.4.2.ds1/tags/tags.h 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/tags.h 2015-03-23 20:09:36.000000000 +0000 @@ -80,6 +80,8 @@ 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 readAll(const QString &fileName) { return TagHelperIface::self()->readAll(fileName); } #else inline void init() { } @@ -94,6 +96,8 @@ 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 readAll(const QString &fileName); #endif extern QString id3Genre(int id); diff -Nru cantata-1.4.2.ds1/tags/trackorganiser.cpp cantata-1.5.2.ds2/tags/trackorganiser.cpp --- cantata-1.4.2.ds1/tags/trackorganiser.cpp 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/trackorganiser.cpp 2015-03-23 20:09:36.000000000 +0000 @@ -83,7 +83,7 @@ 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 @@ } else { REMOVE(mopidyNote); } + connect(ratingsNote, SIGNAL(leftClickedUrl()), SLOT(showRatingsMessage())); Dialog::show(); enableButtonOk(false); updateView(); @@ -276,7 +277,7 @@ if (autoSkip) { skip=true; } else { - switch(MessageBox::questionYesNoCancel(this, i18n("Source file does not exist!
    %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 @@ if (autoSkip) { skip=true; } else { - switch(MessageBox::questionYesNoCancel(this, i18n("Destination file already exists!
    %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 @@ if (autoSkip) { skip=true; } else { - switch(MessageBox::questionYesNoCancel(this, i18n("Failed to create destination folder!
    %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 @@ 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 @@ 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 @@ return dev; } #endif - diff -Nru cantata-1.4.2.ds1/tags/trackorganiser.h cantata-1.5.2.ds2/tags/trackorganiser.h --- cantata-1.4.2.ds1/tags/trackorganiser.h 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/trackorganiser.h 2015-03-23 20:09:36.000000000 +0000 @@ -60,6 +60,7 @@ void controlRemoveAct(); void removeItems(); void showMopidyMessage(); + void showRatingsMessage(); void setFilenameScheme(const QString &text); private: diff -Nru cantata-1.4.2.ds1/tags/trackorganiser.ui cantata-1.5.2.ds2/tags/trackorganiser.ui --- cantata-1.4.2.ds1/tags/trackorganiser.ui 2014-09-28 16:30:09.000000000 +0000 +++ cantata-1.5.2.ds2/tags/trackorganiser.ui 2015-03-23 20:09:36.000000000 +0000 @@ -89,7 +89,7 @@ - Ignore 'The' in artist names + Append 'The' to artist names @@ -125,9 +125,16 @@
    - + - <i><b>NOTE:</b> Connected to a Mopidy server (manual update required).</i> + Connected to a Mopidy server (manual update required). + + + + + + + Ratings will be lost if a file is renamed. @@ -148,9 +155,9 @@
    support/buddylabel.h
    - UrlLabel + UrlNoteLabel QLabel -
    support/urllabel.h
    +
    widgets/notelabel.h
    diff -Nru cantata-1.4.2.ds1/TODO cantata-1.5.2.ds2/TODO --- cantata-1.4.2.ds1/TODO 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/TODO 2015-03-23 20:09:43.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/ubuntu/backend/mpdbackend.cpp cantata-1.5.2.ds2/ubuntu/backend/mpdbackend.cpp --- cantata-1.4.2.ds1/ubuntu/backend/mpdbackend.cpp 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/backend/mpdbackend.cpp 2015-03-23 20:09:39.000000000 +0000 @@ -45,7 +45,6 @@ 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::setCoverFetch(bool s) { Covers::self()->setFetchCovers(s); } - + void MPDBackend::playPause() { switch (MPDStatus::self()->state()) { case MPDState_Playing: diff -Nru cantata-1.4.2.ds1/ubuntu/cantata-ubuntu.desktop cantata-1.5.2.ds2/ubuntu/cantata-ubuntu.desktop --- cantata-1.4.2.ds1/ubuntu/cantata-ubuntu.desktop 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/cantata-ubuntu.desktop 2015-03-23 20:09:39.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/ubuntu/cantata-ubuntu.json cantata-1.5.2.ds2/ubuntu/cantata-ubuntu.json --- cantata-1.4.2.ds1/ubuntu/cantata-ubuntu.json 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/cantata-ubuntu.json 2015-03-23 20:09:39.000000000 +0000 @@ -2,5 +2,5 @@ "policy_groups": [ "networking" ], - "policy_version": 1.1 + "policy_version": 1.2 } diff -Nru cantata-1.4.2.ds1/ubuntu/main.cpp cantata-1.5.2.ds2/ubuntu/main.cpp --- cantata-1.4.2.ds1/ubuntu/main.cpp 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/main.cpp 2015-03-23 20:09:39.000000000 +0000 @@ -61,6 +61,8 @@ //#endif //#include "contextwidget.h" +#include + #include #include #include @@ -176,7 +178,6 @@ int main(int argc, char *argv[]) { - QCoreApplication::setOrganizationName(CANTATA_REV_URL); QThread::currentThread()->setObjectName("GUI"); Utils::initRand(); @@ -188,13 +189,13 @@ 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", 1, 0, "MPDBackend"); QQuickView view; view.setMinimumSize(QSize(360, 540)); diff -Nru cantata-1.4.2.ds1/ubuntu/manifest.json cantata-1.5.2.ds2/ubuntu/manifest.json --- cantata-1.4.2.ds1/ubuntu/manifest.json 2014-09-28 16:30:11.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/manifest.json 2015-03-23 20:09:39.000000000 +0000 @@ -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 ", - "version": "0.1.8" + "version": "0.2.0" } diff -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/AboutPage.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/AboutPage.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/AboutPage.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/AboutPage.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 @@ } Label { font.bold: true; - text: "0.1.8" + text: "0.2.0" } } Row { @@ -181,14 +179,14 @@ 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 @@ } Label { font.bold: true; - text: "0.1.8" + text: "0.2.0" } } Row { @@ -327,7 +325,7 @@ } Label { font.bold: true; - text: "0.1.8" + text: "0.2.0" } } Row { diff -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/backend/SettingsBackend.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/backend/SettingsBackend.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/backend/SettingsBackend.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/backend/SettingsBackend.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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" - } + readonly property alias uiSettings: uiSettings - 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 scrollPlayQueue: uiSettings.scrollPlayQueue + readonly property alias fetchCovers: uiSettings.fetchCovers - U1db.Document { - id: connectionDocument - database: db - docId: 'connections' - create: true - defaults: { - "host": "", - "port": "", - "password": "", - "musicfolder": "" - } + Component.onCompleted: { + backend.setCoverFetch(fetchCovers) } - function getUiContents() { - return uiDocument.contents + onFetchCoversChanged: { + backend.setCoverFetch(fetchCovers) } - function setUiContents(contents) { - uiDocument.contents = contents - } - - 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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/components/ControlButtonsRow.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/components/ControlButtonsRow.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/components/ControlButtonsRow.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/components/ControlButtonsRow.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/components/LabelVisual.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/components/LabelVisual.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/components/LabelVisual.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/components/LabelVisual.qml 2015-03-23 20:09:39.000000000 +0000 @@ -14,8 +14,8 @@ * along with this program. If not, see . */ -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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/components/ListItemDelegate.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/components/ListItemDelegate.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/components/ListItemDelegate.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/components/ListItemDelegate.qml 2015-03-23 20:09:39.000000000 +0000 @@ -15,9 +15,9 @@ * along with this program. If not, see . */ -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 @@ 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 @@ id: iconImage smooth: true opacity: 0.9 - visible: iconShown anchors.fill: parent } } @@ -66,7 +67,7 @@ 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 @@ } } - 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 @@ } } - Image { - id: firstImage + Icon { + id: firstIcon width: units.gu(3) height: units.gu(3) - smooth: true - opacity: 0.9 visible: firstButtonShown anchors { diff -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/components/Notification.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/components/Notification.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/components/Notification.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/components/Notification.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/components/PageWithBottomEdge.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/components/PageWithBottomEdge.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/components/PageWithBottomEdge.qml 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/components/PageWithBottomEdge.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 . + */ + +/* + 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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/components/PlayQueueListItemDelegate.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/components/PlayQueueListItemDelegate.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/components/PlayQueueListItemDelegate.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/components/PlayQueueListItemDelegate.qml 2015-03-23 20:09:39.000000000 +0000 @@ -15,9 +15,9 @@ * along with this program. If not, see . */ -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 @@ id: iconImage smooth: true opacity: 0.9 - visible: iconShown anchors.fill: parent } } @@ -58,7 +57,7 @@ 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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/CurrentlyPlayingContent.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/CurrentlyPlayingContent.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/CurrentlyPlayingContent.qml 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/CurrentlyPlayingContent.qml 2015-03-23 20:09:39.000000000 +0000 @@ -0,0 +1,162 @@ +/************************************************************************* +** Cantata +** +** Copyright (c) 2014 Niklas Wenzel + * Copyright (c) 2014 Craig Drummond +** +** $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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/CurrentlyPlayingPage.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/CurrentlyPlayingPage.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/CurrentlyPlayingPage.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/CurrentlyPlayingPage.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 @@ } } } - - 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 - } - - color: volumeHeader.color + Dialog { + id: actionsDialog - text: i18n.tr("Repeat") - } + title: i18n.tr("Playback Options") - CheckBox { - id: repeatCheckBox - anchors { - right: parent.right - rightMargin: units.gu(1) - verticalCenter: parent.verticalCenter - } + contents: [ + Column { + id: containerLayout + + 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.Header { - id: volumeHeader - text: i18n.tr("Volume") - } + ListItem.Standard { + Label { + anchors { + left: parent.left + leftMargin: units.gu(1) + verticalCenter: parent.verticalCenter + } - 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) + color: volumeHeader.color - 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) - } + ListItem.Header { + id: volumeHeader + text: i18n.tr("Volume") + } - ControlButtonsRow { - id: buttonsRow - } + 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" + } - 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 - } - } - } + 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) + "%" + } + } + } + } - 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) - } + Item { + id: dialogSpacer - 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 + height: units.gu(3) + width: parent.width + } - onValueChanged: { - backend.setMpdVolume(value) - } + Button { + text: i18n.tr("Ready") + color: UbuntuColors.orange - Connections { - target: backend - onMpdVolumeChanged: volumeSlider.value = backend.mpdVolume - } + anchors { + left: parent.left + right: parent.right + leftMargin: units.gu(1) + rightMargin: units.gu(1) + } - function formatValue(v) { - return Math.round(v) + "%" + onClicked: PopupUtils.close(actionsDialog) + } } - } - } - } - - 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" - } - - Label { - id: artistLabel2 - width: parent.width - text: backend.currentSongSubText - wrapMode: Text.NoWrap - elide: Text.ElideRight - horizontalAlignment: Text.AlignHCenter - } - } - ControlButtonsRow { - id: buttonsRow2 - visible: currentSongInfoColumn2.visible - - anchors { - top: currentSongInfoColumn2.bottom - horizontalCenter: parent.horizontalCenter - } - } - 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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/ListViewPage.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/ListViewPage.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/ListViewPage.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/ListViewPage.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 @@ 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: [ + head.actions: [ Action { - id: currentlyPlayingAction - text: i18n.tr("Currently playing") - onTriggered: pageStack.push(currentlyPlayingPage) - }, - 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 + } - firstButtonImageSource: "../../icons/toolbar/media-playback-start-light.svg" - secondButtonImageSource: "../../icons/toolbar/add.svg" + ] - onFirstImageButtonClicked: listViewPage.add(index, true, model.mainText) - onSecondImageButtonClicked: listViewPage.add(index, false, model.mainText) + ListView { + id: listView + Layouts.item: "listView" + + height: parent.height + width: parent.width + + anchors { + top: parent.top + left: parent.left + } + + clip: true - onClicked: model.hasChildren ? listViewPage.onDelegateClicked(index, model.titleText) : ""; - onItemRemoved: listViewPage.remove(index) + property bool hasProgression: false - onProgressionChanged: { - if (progression) { - listView.hasProgression = true + delegate: ListItemDelegate { + id: delegate + text: model.mainText + subText: model.subText + iconSource: model.image + confirmRemoval: true + removable: listViewPage.editable + + 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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/main.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/main.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/main.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/main.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 @@ PageStack { id: pageStack - anchors.fill: parent Component.onCompleted: { push(tabs) @@ -58,13 +56,13 @@ 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 @@ } } - 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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/HostSettingsContent.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/HostSettingsContent.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/HostSettingsContent.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/HostSettingsContent.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 - -Column { - id: connectionDetailsColumn - spacing: units.gu(1) +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: connectionDetailsColumn.height property color textFieldColor: "#c2c2b8" //#f3f3e7 * 0.8 (#f3f3e7: label color) - Component.onCompleted: { - fillWithU1dbData() - tryToConnect() - } + Column { + id: connectionDetailsColumn + spacing: units.gu(1) + + width: Math.round(parent.width / 1.3) + height: parent.parent.height - root.header.height + y: units.gu(2) + anchors.horizontalCenter: parent.horizontalCenter - 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"] + Component.onCompleted: { + tryToConnect() } - } - function saveDataToU1db() { - var contents = {}; - contents["host"] = hostTextField.text - contents["port"] = portTextField.text - contents["password"] = passwordTextField.text - contents["musicfolder"] = musicfolderTextField.text - settingsBackend.setConnectionContents(contents) - } + 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 + } - Label { - id: hostLabel - text: i18n.tr("Host:") - anchors { - left: connectionDetailsColumn.left; - right: connectionDetailsColumn.right; + Label { + id: hostLabel + text: i18n.tr("Host:") + anchors { + left: connectionDetailsColumn.left; + right: connectionDetailsColumn.right; + } + + fontSize: "medium" } - fontSize: "medium" - } + TextField { + id: hostTextField + color: textFieldColor + anchors { + left: connectionDetailsColumn.left; + right: connectionDetailsColumn.right; + } - TextField { - id: hostTextField - color: textFieldColor - anchors { - left: connectionDetailsColumn.left; - right: connectionDetailsColumn.right; + KeyNavigation.priority: KeyNavigation.BeforeItem + KeyNavigation.tab: portTextField } - KeyNavigation.priority: KeyNavigation.BeforeItem - KeyNavigation.tab: portTextField - } + Label { + id: portLabel + text: i18n.tr("Port:") + anchors { + left: connectionDetailsColumn.left; + right: connectionDetailsColumn.right; + } - Label { - id: portLabel - text: i18n.tr("Port:") - anchors { - left: connectionDetailsColumn.left; - right: connectionDetailsColumn.right; + fontSize: "medium" } - fontSize: "medium" - } + TextField { + id: portTextField + color: textFieldColor + anchors { + left: connectionDetailsColumn.left; + right: connectionDetailsColumn.right; + } + validator: IntValidator { bottom: 1; top: 65535 } - TextField { - id: portTextField - color: textFieldColor - anchors { - left: connectionDetailsColumn.left; - right: connectionDetailsColumn.right; - } - validator: IntValidator { bottom: 1; top: 65535 } - - KeyNavigation.priority: KeyNavigation.BeforeItem - KeyNavigation.tab: passwordTextField - KeyNavigation.backtab: hostTextField + KeyNavigation.priority: KeyNavigation.BeforeItem + KeyNavigation.tab: passwordTextField + KeyNavigation.backtab: hostTextField - placeholderText: "6600" - } + placeholderText: "6600" + } - Label { - id: passwordLabel - text: i18n.tr("Password:") + Label { + id: passwordLabel + text: i18n.tr("Password:") - fontSize: "medium" - } + fontSize: "medium" + } - TextField { - id: passwordTextField - color: textFieldColor - anchors { - left: connectionDetailsColumn.left; - right: connectionDetailsColumn.right; - } - - 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; + } - Item { - height: units.gu(0.5) - anchors { - left: connectionDetailsColumn.left; - right: connectionDetailsColumn.right; + KeyNavigation.priority: KeyNavigation.BeforeItem + KeyNavigation.backtab: passwordTextField + placeholderText: "http://HOST/music" // TODO: Update this when hostTextField changes? } - } - Button { - id: connectButton - text: i18n.tr("Connect") - - width: parent.width - anchors { - horizontalCenter: parent.horizontalCenter + Item { + height: units.gu(0.5) + anchors { + left: connectionDetailsColumn.left; + right: connectionDetailsColumn.right; + } } - onClicked: { - tryToConnect() - connectionDetailsColumn.saveDataToU1db() + Button { + id: connectButton + text: i18n.tr("Connect") + color: UbuntuColors.orange + + width: parent.width + anchors { + horizontalCenter: parent.horizontalCenter + } + + 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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/HostSettingsPage.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/HostSettingsPage.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/HostSettingsPage.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/HostSettingsPage.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/PlaybackSettingsContent.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/PlaybackSettingsContent.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/PlaybackSettingsContent.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/PlaybackSettingsContent.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/PlaybackSettingsPage.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/PlaybackSettingsPage.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/PlaybackSettingsPage.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/PlaybackSettingsPage.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 @@ 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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/SettingsCategories.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/SettingsCategories.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/SettingsCategories.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/SettingsCategories.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/SettingsPage.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/SettingsPage.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/SettingsPage.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/SettingsPage.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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)") : "") - - property HostSettingsPage hostSettings: hostSettingsPage - property SettingsCategories tabletCategories - - actions: [ - Action { - id: backAction - text: i18n.tr("Back") - onTriggered: pageStack.pop() - } - ] + 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 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 - color: "#88CCCCCC" + Component.onCompleted: { + updateSource() + } - 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 @@ } ] - } + 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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/UiSettingsContent.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/UiSettingsContent.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/UiSettingsContent.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/UiSettingsContent.qml 2015-03-23 20:09:39.000000000 +0000 @@ -2,6 +2,7 @@ ** Cantata ** ** Copyright (c) 2014 Craig Drummond +** Copyright (c) 2014 Niklas Wenzel ** ** $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 - - Component.onCompleted: { - for (var i = 0; i < children.length; i++) { - if (children[i].checked !== undefined) { //Is CheckBox - children[i].onCheckedChanged.connect(column.saveDataToU1db) - } - } - } - - 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 - } - } - } - Label { - id: playQueueScrollLabel - text: i18n.tr("Scroll play queue to active track:") - fontSize: "medium" - verticalAlignment: Text.AlignVCenter - height: playQueueScroll.height - } - - CheckBox { - id: playQueueScroll + control: CheckBox { + id: fetchCoversCheckBox + checked: true KeyNavigation.priority: KeyNavigation.BeforeItem - KeyNavigation.tab: coverFetch - } + KeyNavigation.backtab: scrollPlayQueueCheckBox - 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 - } + Component.onCompleted: { + fetchCoversCheckBox.checked = settingsBackend.fetchCovers + } - CheckBox { - id: playlistsView - KeyNavigation.priority: KeyNavigation.BeforeItem - KeyNavigation.tab: albumSort - KeyNavigation.backtab: foldersView - enabled: false + onCheckedChanged: { + settingsBackend.uiSettings.fetchCovers = fetchCoversCheckBox.checked + } } } - - 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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/UiSettingsPage.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/UiSettingsPage.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/settings/UiSettingsPage.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/settings/UiSettingsPage.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/ubuntu/qml/cantata/SubListViewPage.qml cantata-1.5.2.ds2/ubuntu/qml/cantata/SubListViewPage.qml --- cantata-1.4.2.ds1/ubuntu/qml/cantata/SubListViewPage.qml 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/qml/cantata/SubListViewPage.qml 2015-03-23 20:09:39.000000000 +0000 @@ -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 @@ 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(i18n.tr("Added \"%1\"")).arg(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(replace ? i18n.tr("Playing all \"%1\"") : i18n.tr("Added all \"%1\"")).arg(title)) } } @@ -66,7 +72,7 @@ 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 @@ } } - actions: [ + head.actions: [ + Action { + iconName: "media-playback-start" + text: i18n.tr("Play all") + onTriggered: addAll(true) + }, Action { - id: currentlyPlayingAction - text: i18n.tr("Currently playing") - onTriggered: pageStack.push(currentlyPlayingPage) + iconName: "add" + text: i18n.tr("Add all") + onTriggered: addAll(false) }, 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) - } - } - - ToolbarButton { - action: Action { - iconSource: Qt.resolvedUrl("../../icons/toolbar/settings.svg") - text: i18n.tr("Settings") - onTriggered: pageStack.push(settingsPage) - } - } - - ToolbarButton { - action: Action { - iconSource: Qt.resolvedUrl("../../icons/toolbar/help.svg") - text: i18n.tr("About") - onTriggered: pageStack.push(aboutPage) - } + bottomEdgePageSource: Qt.resolvedUrl("CurrentlyPlayingPage.qml") + bottomEdgeTitle: i18n.tr("Currently Playing") + + Connections { + target: settingsBackend + + 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 @@ 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 -Nru cantata-1.4.2.ds1/ubuntu/ubuntu.qrc cantata-1.5.2.ds2/ubuntu/ubuntu.qrc --- cantata-1.4.2.ds1/ubuntu/ubuntu.qrc 2014-09-28 16:30:10.000000000 +0000 +++ cantata-1.5.2.ds2/ubuntu/ubuntu.qrc 2015-03-23 20:09:39.000000000 +0000 @@ -36,5 +36,7 @@ qml/cantata/settings/UiSettingsPage.qml qml/cantata/components/Notification.qml qml/cantata/backend/SettingsBackend.qml + qml/cantata/components/PageWithBottomEdge.qml + qml/cantata/CurrentlyPlayingContent.qml diff -Nru cantata-1.4.2.ds1/widgets/actionitemdelegate.cpp cantata-1.5.2.ds2/widgets/actionitemdelegate.cpp --- cantata-1.4.2.ds1/widgets/actionitemdelegate.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/actionitemdelegate.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -118,9 +118,18 @@ foreach (const QPointer &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 @@ return a; } + if (largeIcons && 2==actions.count() && AP_VTop==actionPos) { + adjustActionRect(rtl, actionPos, actionRect, iconSize>>4); + } ActionItemDelegate::adjustActionRect(rtl, actionPos, actionRect, iconSize); } diff -Nru cantata-1.4.2.ds1/widgets/autohidingsplitter.cpp cantata-1.5.2.ds2/widgets/autohidingsplitter.cpp --- cantata-1.4.2.ds1/widgets/autohidingsplitter.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/autohidingsplitter.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -41,13 +41,20 @@ 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::updateAfterSplitterMoved(int pos, int index) { - Q_UNUSED(pos); + Q_UNUSED(pos) if (!autoHideEnabled || index<=0 || index>count()) { return; } diff -Nru cantata-1.4.2.ds1/widgets/coverwidget.cpp cantata-1.5.2.ds2/widgets/coverwidget.cpp --- cantata-1.4.2.ds1/widgets/coverwidget.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/coverwidget.cpp 2015-03-23 20:09:44.000000000 +0000 @@ -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 #include #include @@ -48,7 +52,6 @@ CoverLabel(QWidget *p) : QLabel(p) , pressed(false) - , pix(0) { } @@ -109,79 +112,71 @@ 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 @@ void CoverWidget::setSize(int min) { + #ifdef Q_OS_MAC + min*=0.9; + #endif label->setFixedSize(min, min); } @@ -219,8 +217,7 @@ label->setEnabled(e); } -void CoverWidget::coverImage(const QImage &i) +void CoverWidget::coverImage(const QImage &) { - label->updatePix(i); + label->updatePix(); } - diff -Nru cantata-1.4.2.ds1/widgets/groupedview.cpp cantata-1.5.2.ds2/widgets/groupedview.cpp --- cantata-1.4.2.ds1/widgets/groupedview.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/groupedview.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -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 @@ -151,7 +155,7 @@ { 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 @@ GroupedViewDelegate(GroupedView *p) : ActionItemDelegate(p) , view(p) + , ratingPainter(0) { } virtual ~GroupedViewDelegate() { + delete ratingPainter; } QSize sizeHint(Type type, bool isCollection) const @@ -223,7 +229,7 @@ Type type=getType(index); bool isCollection=index.data(Cantata::Role_IsCollection).toBool(); - Song song=index.data(Cantata::Role_Song).value(); + Song song=index.data(Cantata::Role_SongWithRating).value(); 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 @@ } 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 @@ 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 @@ 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 @@ } 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 @@ 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 @@ 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 @@ if (isCollection) { pix=index.data(Qt::DecorationRole).value().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 @@ 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 @@ 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 @@ , autoExpand(true) , filterActive(false) , isMultiLevel(false) - , currentAlbum(Song::constNullKey) + , currentAlbum(Song::Null_Key) { setContextMenuPolicy(Qt::CustomContextMenu); setAcceptDrops(true); @@ -540,7 +599,7 @@ } qint32 count=model()->rowCount(parent); - quint16 lastKey=Song::constNullKey; + quint16 lastKey=Song::Null_Key; quint32 collection=parent.data(Cantata::Role_CollectionId).toUInt(); QSet keys; @@ -565,7 +624,7 @@ return; } - currentAlbum=Song::constNullKey; + currentAlbum=Song::Null_Key; qint32 count=model()->rowCount(); for (int i=0; iindex(i, 0)); @@ -703,7 +762,7 @@ 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 @@ continue; } if (isMultiLevel && model()->hasChildren(index)) { - lastKey=Song::constNullKey; + lastKey=Song::Null_Key; quint32 childCount=model()->rowCount(index); for (quint32 c=0; cindex(c, 0, index); diff -Nru cantata-1.4.2.ds1/widgets/icons.cpp cantata-1.5.2.ds2/widgets/icons.cpp --- cantata-1.4.2.ds1/widgets/icons.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/icons.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -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 constStdSizes=QList() << 16 << 22 << 32 << 48; +static QList constStdSmallSizes=QList() << 16 << 22 << 32 ; +static QList constStdSizes=QList() << constStdSmallSizes << 48; // << 64; static QList constMonoSvgSizes=QList() << constStdSizes << 64; static const int constDarkLimit=80; @@ -106,8 +110,10 @@ 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 @@ 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 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 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 @@ 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 @@ Icon icon; - foreach (int s, constStdSizes) { + QList sizes=QList() << 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 @@ 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 @@ } radioStreamIcon=Icon::create("radio", constStdSizes); addRadioStreamIcon=Icon::create("addradio", constStdSizes); - variousArtistsIcon=Icon::create("va", QList() << 16 << 22 << 32 << 48 << 64 << 128, true); - artistIcon=Icon::create("artist", QList() << 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 @@ { 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 @@ 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 @@ toolbarMenuIcon=createMenuIcon(col); } #endif + #ifndef Q_OS_MAC } else #endif + #endif { #ifdef USE_SYSTEM_MENU_ICON toolbarMenuIcon=menuIcon; @@ -572,7 +596,7 @@ 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 -Nru cantata-1.4.2.ds1/widgets/itemview.cpp cantata-1.5.2.ds2/widgets/itemview.cpp --- cantata-1.4.2.ds1/widgets/itemview.cpp 2014-09-28 16:30:16.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/itemview.cpp 2015-03-23 20:09:44.000000000 +0000 @@ -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 +#include "support/flattoolbutton.h" #include #include #include @@ -48,20 +49,34 @@ #include #include -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 @@ 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 @@ 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 @@ 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 @@ 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(); + 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().pixmap(detailedViewDecorationSize, detailedViewDecorationSize); } - QPixmap pix = QVariant::Pixmap==image.type() - ? image.value() - : QVariant::Image==image.type() - ? QPixmap::fromImage(image.value().scaled(listDecorationSize, listDecorationSize, - Qt::KeepAspectRatio, Qt::SmoothTransformation)) - : image.value().pixmap(listDecorationSize, listDecorationSize); bool oneLine = childText.isEmpty(); ActionPos actionPos = iconMode ? AP_VTop : AP_HMiddle; bool rtl = QApplication::isRightToLeft(); @@ -241,13 +253,18 @@ 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 @@ 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 @@ painter->restore(); } + virtual bool getCoverInUiThread(const QModelIndex &) const { return false; } + virtual QWidget * itemView() const { return view; } + protected: ListView *view; }; @@ -363,6 +387,7 @@ TreeDelegate(QAbstractItemView *p) : ListDelegate(0, p) , simpleStyle(true) + , treeView(p) { } @@ -372,19 +397,22 @@ 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()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().pixmap(treeDecorationSize, treeDecorationSize); - if (gtk && pix.isNull()) { - QVariant image = index.data(Cantata::Role_Image); - if (!image.isNull()) { - pix = QVariant::Pixmap==image.type() ? image.value() : noIcons ? QPixmap() : image.value().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(); + if (!cSong.isEmpty()) { + QPixmap *cp=Covers::self()->get(cSong, listCoverSize); + if (cp) { + pix=*cp; + } } } + + if (pix.isNull()) { + pix=index.data(Qt::DecorationRole).value().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); + 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); + 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()>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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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::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 @@ // listView->setAlternatingRowColors(false); listView->setWordWrap(true); listView->setDragDropMode(QAbstractItemView::DragOnly); - static_cast(listView->itemDelegate())->setLargeIcons(iconGridSize.width()>(ActionItemDelegate::constLargeActionIconSize*4)); + static_cast(listView->itemDelegate())->setLargeIcons(true); } } else if(QListView::ListMode!=listView->viewMode()) { listView->setGridSize(listGridSize); @@ -1231,6 +1311,18 @@ } } +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 @@ 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 -Nru cantata-1.4.2.ds1/widgets/itemview.h cantata-1.5.2.ds2/widgets/itemview.h --- cantata-1.4.2.ds1/widgets/itemview.h 2014-09-28 16:30:16.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/itemview.h 2015-03-23 20:09:44.000000000 +0000 @@ -100,6 +100,7 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/widgets/itemview.ui cantata-1.5.2.ds2/widgets/itemview.ui --- cantata-1.4.2.ds1/widgets/itemview.ui 2014-09-28 16:30:16.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/itemview.ui 2015-03-23 20:09:44.000000000 +0000 @@ -44,7 +44,7 @@ 0 - + @@ -57,6 +57,11 @@ + FlatToolButton + QToolButton +
    support/flattoolbutton.h
    +
    + PaddedSqueezedTextLabel QLabel
    support/squeezedtextlabel.h
    diff -Nru cantata-1.4.2.ds1/widgets/listview.cpp cantata-1.5.2.ds2/widgets/listview.cpp --- cantata-1.4.2.ds1/widgets/listview.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/listview.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -121,7 +121,9 @@ if (!icon.isNull()) { pal.setColor(QPalette::Base, Qt::transparent); } + #ifndef Q_OS_MAC setPalette(pal); + #endif viewport()->setPalette(pal); bgnd=TreeView::createBgndPixmap(icon); } diff -Nru cantata-1.4.2.ds1/widgets/messageoverlay.cpp cantata-1.5.2.ds2/widgets/messageoverlay.cpp --- cantata-1.4.2.ds1/widgets/messageoverlay.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/messageoverlay.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -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 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/widgets/messageoverlay.h cantata-1.5.2.ds2/widgets/messageoverlay.h --- cantata-1.4.2.ds1/widgets/messageoverlay.h 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/messageoverlay.h 2015-03-23 20:09:44.000000000 +0000 @@ -56,6 +56,7 @@ QString text; ToolButton *cancelButton; QTimer *timer; + bool closeOnLeft; }; #endif diff -Nru cantata-1.4.2.ds1/widgets/notelabel.cpp cantata-1.5.2.ds2/widgets/notelabel.cpp --- cantata-1.4.2.ds1/widgets/notelabel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/notelabel.cpp 2015-03-23 20:09:44.000000000 +0000 @@ -0,0 +1,93 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 +#include + +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 (spacingsetMargin(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("NOTE: %1", text)); +} + +NoteLabel::NoteLabel(QWidget *parent) + : QWidget(parent) +{ + label=static_cast(init(this, false)); +} + +UrlNoteLabel::UrlNoteLabel(QWidget *parent) + : QWidget(parent) +{ + label=static_cast(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 -Nru cantata-1.4.2.ds1/widgets/notelabel.h cantata-1.5.2.ds2/widgets/notelabel.h --- cantata-1.4.2.ds1/widgets/notelabel.h 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/notelabel.h 2015-03-23 20:09:43.000000000 +0000 @@ -0,0 +1,72 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 +#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 -Nru cantata-1.4.2.ds1/widgets/nowplayingwidget.cpp cantata-1.5.2.ds2/widgets/nowplayingwidget.cpp --- cantata-1.4.2.ds1/widgets/nowplayingwidget.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/nowplayingwidget.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -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 -#include +#include #include #include #include #include #include #include +#include -class ProxyStyle : public QProxyStyle +class PosSliderProxyStyle : public QProxyStyle { public: - ProxyStyle() + PosSliderProxyStyle() : QProxyStyle() { setBaseStyle(qApp->style()); @@ -116,7 +122,11 @@ 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 @@ 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 @@ NowPlayingWidget::NowPlayingWidget(QWidget *p) : QWidget(p) + , shown(false) , timer(0) , lastVal(0) , pollCount(0) @@ -255,6 +261,7 @@ 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 @@ 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 @@ 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 @@ 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 @@ } 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 -Nru cantata-1.4.2.ds1/widgets/nowplayingwidget.h cantata-1.5.2.ds2/widgets/nowplayingwidget.h --- cantata-1.4.2.ds1/widgets/nowplayingwidget.h 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/nowplayingwidget.h 2015-03-23 20:09:43.000000000 +0000 @@ -32,6 +32,7 @@ class QLabel; class SqueezedTextLabel; class TimeLabel; +class RatingWidget; struct Song; class PosSlider : public QSlider @@ -41,7 +42,6 @@ PosSlider(QWidget *p); virtual ~PosSlider() { } - void showEvent(QShowEvent *e); void updateStyleSheet(); void mouseMoveEvent(QMouseEvent *e); void wheelEvent(QWheelEvent *ev); @@ -49,9 +49,6 @@ Q_SIGNALS: void positionSet(); - -private: - bool shown; }; class NowPlayingWidget : public QWidget @@ -67,6 +64,7 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/widgets/playqueueview.cpp cantata-1.5.2.ds2/widgets/playqueueview.cpp --- cantata-1.4.2.ds1/widgets/playqueueview.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/playqueueview.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -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 #include #include @@ -49,8 +51,8 @@ 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 @@ } BasicItemDelegate::paint(painter, v4, index); + + if (index.column()==PlayQueueModel::COL_RATING) { + Song song=index.data(Cantata::Role_SongWithRating).value(); + 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 @@ 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 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/widgets/playqueueview.h cantata-1.5.2.ds2/widgets/playqueueview.h --- cantata-1.4.2.ds1/widgets/playqueueview.h 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/playqueueview.h 2015-03-23 20:09:43.000000000 +0000 @@ -41,7 +41,6 @@ class Action; class QItemSelectionModel; class QModelIndex; -class QMenu; class Spinner; class PlayQueueView; class MessageOverlay; @@ -117,6 +116,7 @@ void hideSpinner(); void setImage(const QImage &img); void streamFetchStatus(const QString &msg); + void searchActive(bool a); Q_SIGNALS: void itemsSelected(bool); diff -Nru cantata-1.4.2.ds1/widgets/ratingwidget.cpp cantata-1.5.2.ds2/widgets/ratingwidget.cpp --- cantata-1.4.2.ds1/widgets/ratingwidget.cpp 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/ratingwidget.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -0,0 +1,207 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 +#include +#include +#include +#include +#include + +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; idrawPixmap(pr, pixmaps[half && i==fullStars ? 2 : ipos()); + 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 -Nru cantata-1.4.2.ds1/widgets/ratingwidget.h cantata-1.5.2.ds2/widgets/ratingwidget.h --- cantata-1.4.2.ds1/widgets/ratingwidget.h 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/ratingwidget.h 2015-03-23 20:09:44.000000000 +0000 @@ -0,0 +1,87 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 +#include + +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 -Nru cantata-1.4.2.ds1/widgets/searchwidget.cpp cantata-1.5.2.ds2/widgets/searchwidget.cpp --- cantata-1.4.2.ds1/widgets/searchwidget.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/searchwidget.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -28,6 +28,7 @@ #include #include #include +#include class EscKeyEventHandler : public QObject { @@ -57,20 +58,29 @@ { 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 @@ { 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(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 @@ if (!currentCat.isEmpty()) { for (int i=0; icount(); ++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 @@ return; } for (int i=0; icount(); ++i) { - if (cat->itemData(i).toString()==id) { + if (cat->itemData(i)==id) { cat->setCurrentIndex(i); return; } diff -Nru cantata-1.4.2.ds1/widgets/searchwidget.h cantata-1.5.2.ds2/widgets/searchwidget.h --- cantata-1.4.2.ds1/widgets/searchwidget.h 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/searchwidget.h 2015-03-23 20:09:43.000000000 +0000 @@ -27,7 +27,7 @@ #include "support/lineedit.h" #include "toolbutton.h" #include "support/squeezedtextlabel.h" -#include "support/combobox.h" +#include "selectorlabel.h" #include #include #include @@ -44,7 +44,7 @@ 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 @@ private: SqueezedTextLabel *label; - ComboBox *cat; + SelectorLabel *cat; LineEdit *edit; ToolButton *closeButton; bool widgetIsActive; diff -Nru cantata-1.4.2.ds1/widgets/selectorlabel.cpp cantata-1.5.2.ds2/widgets/selectorlabel.cpp --- cantata-1.4.2.ds1/widgets/selectorlabel.cpp 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/selectorlabel.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -0,0 +1,138 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 +#include +#include + +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("")+s+(arrow ? QLatin1String(" ")+QChar(0x25BE) : QString())+QLatin1String(""); +} + +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(sender()); + if (act) { + setCurrentIndex(menu->actions().indexOf(act)); + } +} + +bool SelectorLabel::event(QEvent *e) +{ + if (!menu) { + return QLabel::event(e); + } + QList actions=menu->actions(); + + switch (e->type()) { + case QEvent::MouseButtonPress: + if (Qt::NoModifier==static_cast(e)->modifiers() && Qt::LeftButton==static_cast(e)->button()) { + menu->exec(mapToGlobal(QPoint(0, 0))); + update(); + } + break; + case QEvent::Wheel: { + int numDegrees = static_cast(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 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 actions=menu->actions(); + + if (index>=actions.count()) { + return QString(); + } + return actions.at(index)->data().toString(); +} diff -Nru cantata-1.4.2.ds1/widgets/selectorlabel.h cantata-1.5.2.ds2/widgets/selectorlabel.h --- cantata-1.4.2.ds1/widgets/selectorlabel.h 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/selectorlabel.h 2015-03-23 20:09:44.000000000 +0000 @@ -0,0 +1,58 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 SELECTOR_LABEL_H +#define SELECTOR_LABEL_H + +#include +#include +#include + +class QMenu; +class SelectorLabel : public QLabel +{ + Q_OBJECT +public: + 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); + 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 -Nru cantata-1.4.2.ds1/widgets/sizewidget.cpp cantata-1.5.2.ds2/widgets/sizewidget.cpp --- cantata-1.4.2.ds1/widgets/sizewidget.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/sizewidget.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -38,5 +38,5 @@ void SizeWidget::paintEvent(QPaintEvent *e) { - Q_UNUSED(e); + Q_UNUSED(e) } diff -Nru cantata-1.4.2.ds1/widgets/songdialog.cpp cantata-1.5.2.ds2/widgets/songdialog.cpp --- cantata-1.4.2.ds1/widgets/songdialog.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/songdialog.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -46,11 +46,11 @@ if (!QFile::exists(base+file)) { DBUG << QString(base+file) << "does not exist"; if (isMpd) { - MessageBox::error(wid, i18n("

    Cannot access song files!

    " - "Please check Cantata's \"Music folder\" setting, and MPD's \"music_directory\" setting.

    ")); + 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("

    Cannot access song files!

    " - "Please check that the device is still attached.

    ")); + MessageBox::error(wid, i18n("Cannot access song files!\n\n" + "Please check that the device is still attached.")); } deleteLater(); return false; diff -Nru cantata-1.4.2.ds1/widgets/tableview.cpp cantata-1.5.2.ds2/widgets/tableview.cpp --- cantata-1.4.2.ds1/widgets/tableview.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/tableview.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -55,6 +55,7 @@ StretchHeaderView *hdr=qobject_cast(header()); QList hideable; + QList initiallyHidden; if (!menu) { hdr->SetStretchEnabled(true); stretchToggled(true); @@ -64,6 +65,9 @@ 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 @@ //Restore state QByteArray state=Settings::self()->headerState(configName); if (state.isEmpty()) { - foreach (int i, hideable) { + foreach (int i, initiallyHidden) { hdr->HideSection(i); } } else { diff -Nru cantata-1.4.2.ds1/widgets/toolbutton.cpp cantata-1.5.2.ds2/widgets/toolbutton.cpp --- cantata-1.4.2.ds1/widgets/toolbutton.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/toolbutton.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -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 @@ 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 @@ 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 @@ 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 @@ } 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 -Nru cantata-1.4.2.ds1/widgets/toolbutton.h cantata-1.5.2.ds2/widgets/toolbutton.h --- cantata-1.4.2.ds1/widgets/toolbutton.h 2014-09-28 16:30:16.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/toolbutton.h 2015-03-23 20:09:44.000000000 +0000 @@ -25,6 +25,8 @@ #define TOOLBUTTON_H #include +#include "support/icon.h" +#include "config.h" class QMenu; class ToolButton : public QToolButton @@ -35,10 +37,16 @@ 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 -Nru cantata-1.4.2.ds1/widgets/treeview.cpp cantata-1.5.2.ds2/widgets/treeview.cpp --- cantata-1.4.2.ds1/widgets/treeview.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/treeview.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -162,23 +162,8 @@ } 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(); - if (img.isNull()) { - pix=var.value(); - } 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()setPixmap(Icons::self()->audioFileIcon.pixmap(pixSize, pixSize)); drag->start(supportedActions); } } @@ -337,7 +322,9 @@ if (!icon.isNull()) { pal.setColor(QPalette::Base, Qt::transparent); } + #ifndef Q_OS_MAC setPalette(pal); + #endif viewport()->setPalette(pal); bgnd=createBgndPixmap(icon); } diff -Nru cantata-1.4.2.ds1/widgets/volumeslider.cpp cantata-1.5.2.ds2/widgets/volumeslider.cpp --- cantata-1.4.2.ds1/widgets/volumeslider.cpp 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/volumeslider.cpp 2015-03-23 20:09:43.000000000 +0000 @@ -43,10 +43,10 @@ #include #endif -class ProxyStyle : public QProxyStyle +class VolumeSliderProxyStyle : public QProxyStyle { public: - ProxyStyle() + VolumeSliderProxyStyle() : QProxyStyle() { setBaseStyle(qApp->style()); @@ -66,7 +66,7 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/widgets/volumeslider.h cantata-1.5.2.ds2/widgets/volumeslider.h --- cantata-1.4.2.ds1/widgets/volumeslider.h 2014-09-28 16:30:15.000000000 +0000 +++ cantata-1.5.2.ds2/widgets/volumeslider.h 2015-03-23 20:09:43.000000000 +0000 @@ -37,6 +37,8 @@ Q_OBJECT public: + static QColor clampColor(const QColor &col); + VolumeSlider(QWidget *p=0); virtual ~VolumeSlider() { } diff -Nru cantata-1.4.2.ds1/windows/cantata.nsi.cmake cantata-1.5.2.ds2/windows/cantata.nsi.cmake --- cantata-1.4.2.ds1/windows/cantata.nsi.cmake 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/windows/cantata.nsi.cmake 2015-03-23 20:09:34.000000000 +0000 @@ -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 @@ # This will be in the installer/uninstaller's title bar Name "@WINDOWS_APP_NAME@" Icon "cantata.ico" -outFile "Cantata-@CANTATA_VERSION_FULL@-Setup.exe" +outFile "@WINDOWS_APP_NAME@-@CANTATA_VERSION_WITH_SPIN@-Setup.exe" !define MUI_ABORTWARNING !define MUI_ICON "cantata.ico" @@ -94,28 +94,29 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ # 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 @@ delete "$SMPROGRAMS\@WINDOWS_APP_NAME@.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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/windows/cantata-qt5.nsi.cmake cantata-1.5.2.ds2/windows/cantata-qt5.nsi.cmake --- cantata-1.4.2.ds1/windows/cantata-qt5.nsi.cmake 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/windows/cantata-qt5.nsi.cmake 2015-03-23 20:09:35.000000000 +0000 @@ -0,0 +1,838 @@ +!define APPNAME "@WINDOWS_APP_NAME@" +!define COMPANYNAME "@WINDOWS_COMPANY_NAME@" +!define DESCRIPTION "MPD Client" +!define VERSIONMAJOR @CPACK_PACKAGE_VERSION_MAJOR@ +!define VERSIONMINOR @CPACK_PACKAGE_VERSION_MINOR@ +!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 + +RequestExecutionLevel admin + +SetCompressor /SOLID lzma +!include "MUI2.nsh" + +InstallDir "$PROGRAMFILES\@WINDOWS_APP_NAME@" +# This will be in the installer/uninstaller's title bar +Name "@WINDOWS_APP_NAME@" +Icon "cantata.ico" +outFile "@WINDOWS_APP_NAME@-@CANTATA_VERSION_WITH_SPIN@-Setup.exe" + +!define MUI_ABORTWARNING +!define MUI_ICON "cantata.ico" + +!insertmacro MUI_PAGE_WELCOME +!insertmacro MUI_PAGE_LICENSE "LICENSE.txt" +!insertmacro MUI_PAGE_DIRECTORY +!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_PAGE_FINISH + +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_INSTFILES +!insertmacro MUI_UNPAGE_FINISH + +!insertmacro MUI_LANGUAGE "English" ;first language is the default language +!insertmacro MUI_LANGUAGE "French" +!insertmacro MUI_LANGUAGE "German" +!insertmacro MUI_LANGUAGE "Spanish" +!insertmacro MUI_LANGUAGE "SpanishInternational" +!insertmacro MUI_LANGUAGE "SimpChinese" +!insertmacro MUI_LANGUAGE "TradChinese" +!insertmacro MUI_LANGUAGE "Japanese" +!insertmacro MUI_LANGUAGE "Korean" +!insertmacro MUI_LANGUAGE "Italian" +!insertmacro MUI_LANGUAGE "Dutch" +!insertmacro MUI_LANGUAGE "Danish" +!insertmacro MUI_LANGUAGE "Swedish" +!insertmacro MUI_LANGUAGE "Norwegian" +!insertmacro MUI_LANGUAGE "NorwegianNynorsk" +!insertmacro MUI_LANGUAGE "Finnish" +!insertmacro MUI_LANGUAGE "Greek" +!insertmacro MUI_LANGUAGE "Russian" +!insertmacro MUI_LANGUAGE "Portuguese" +!insertmacro MUI_LANGUAGE "PortugueseBR" +!insertmacro MUI_LANGUAGE "Polish" +!insertmacro MUI_LANGUAGE "Ukrainian" +!insertmacro MUI_LANGUAGE "Czech" +!insertmacro MUI_LANGUAGE "Slovak" +!insertmacro MUI_LANGUAGE "Croatian" +!insertmacro MUI_LANGUAGE "Bulgarian" +!insertmacro MUI_LANGUAGE "Hungarian" +!insertmacro MUI_LANGUAGE "Thai" +!insertmacro MUI_LANGUAGE "Romanian" +!insertmacro MUI_LANGUAGE "Latvian" +!insertmacro MUI_LANGUAGE "Macedonian" +!insertmacro MUI_LANGUAGE "Estonian" +!insertmacro MUI_LANGUAGE "Turkish" +!insertmacro MUI_LANGUAGE "Lithuanian" +!insertmacro MUI_LANGUAGE "Slovenian" +!insertmacro MUI_LANGUAGE "Serbian" +!insertmacro MUI_LANGUAGE "SerbianLatin" +!insertmacro MUI_LANGUAGE "Arabic" +!insertmacro MUI_LANGUAGE "Farsi" +!insertmacro MUI_LANGUAGE "Hebrew" +!insertmacro MUI_LANGUAGE "Indonesian" +!insertmacro MUI_LANGUAGE "Mongolian" +!insertmacro MUI_LANGUAGE "Luxembourgish" +!insertmacro MUI_LANGUAGE "Albanian" +!insertmacro MUI_LANGUAGE "Breton" +!insertmacro MUI_LANGUAGE "Belarusian" +!insertmacro MUI_LANGUAGE "Icelandic" +!insertmacro MUI_LANGUAGE "Malay" +!insertmacro MUI_LANGUAGE "Bosnian" +!insertmacro MUI_LANGUAGE "Kurdish" +!insertmacro MUI_LANGUAGE "Irish" +!insertmacro MUI_LANGUAGE "Uzbek" +!insertmacro MUI_LANGUAGE "Galician" +!insertmacro MUI_LANGUAGE "Afrikaans" +!insertmacro MUI_LANGUAGE "Catalan" +!insertmacro MUI_LANGUAGE "Esperanto" + +section "install" + # Files for the install directory - to build the installer, these should be in the same directory as the install script (this file) + 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 "Qt License (LGPL V2).txt" + 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\iconengines + file "iconengines\qsvgicon.dll" + setOutPath $INSTDIR\platforms + file "platforms\qwindows.dll" + setOutPath $INSTDIR\icons + file "icons\bbc.svg" + file "icons\cbc.svg" + file "icons\npr.svg" + file "icons\podcasts.png" + file "icons\soundcloud.png" + file "icons\stream.png" + setOutPath $INSTDIR\icons\oxygen + file "icons\oxygen\index.theme" + file "icons\oxygen\Oxygen License (Creative Common Attribution-ShareAlike 3.0).html" + file "icons\oxygen\Oxygen README.txt" + setOutPath $INSTDIR\icons\oxygen\128x128\categories + file "icons\oxygen\128x128\categories\applications-internet.png" + setOutPath $INSTDIR\icons\oxygen\128x128\devices + file "icons\oxygen\128x128\devices\media-optical.png" + setOutPath $INSTDIR\icons\oxygen\16x16\actions + file "icons\oxygen\16x16\actions\application-exit.png" + file "icons\oxygen\16x16\actions\bookmark-new.png" + file "icons\oxygen\16x16\actions\configure.png" + file "icons\oxygen\16x16\actions\dialog-cancel.png" + file "icons\oxygen\16x16\actions\dialog-close.png" + file "icons\oxygen\16x16\actions\dialog-ok.png" + file "icons\oxygen\16x16\actions\document-edit.png" + file "icons\oxygen\16x16\actions\document-export.png" + file "icons\oxygen\16x16\actions\document-import.png" + file "icons\oxygen\16x16\actions\document-new.png" + file "icons\oxygen\16x16\actions\document-open.png" + file "icons\oxygen\16x16\actions\document-save-as.png" + file "icons\oxygen\16x16\actions\document-save.png" + file "icons\oxygen\16x16\actions\edit-clear-list.png" + file "icons\oxygen\16x16\actions\edit-clear-locationbar-ltr.png" + file "icons\oxygen\16x16\actions\edit-clear-locationbar-rtl.png" + file "icons\oxygen\16x16\actions\edit-delete.png" + file "icons\oxygen\16x16\actions\edit-find.png" + file "icons\oxygen\16x16\actions\edit-rename.png" + file "icons\oxygen\16x16\actions\folder-sync.png" + file "icons\oxygen\16x16\actions\go-down.png" + file "icons\oxygen\16x16\actions\go-next.png" + file "icons\oxygen\16x16\actions\go-previous.png" + file "icons\oxygen\16x16\actions\go-up.png" + file "icons\oxygen\16x16\actions\list-add.png" + file "icons\oxygen\16x16\actions\list-remove.png" + file "icons\oxygen\16x16\actions\media-playback-pause.png" + file "icons\oxygen\16x16\actions\media-playback-start.png" + file "icons\oxygen\16x16\actions\media-playback-stop.png" + file "icons\oxygen\16x16\actions\media-skip-backward.png" + file "icons\oxygen\16x16\actions\media-skip-forward.png" + file "icons\oxygen\16x16\actions\process-stop.png" + file "icons\oxygen\16x16\actions\speaker.png" + file "icons\oxygen\16x16\actions\tools-wizard.png" + file "icons\oxygen\16x16\actions\view-fullscreen.png" + file "icons\oxygen\16x16\actions\view-media-artist.png" + file "icons\oxygen\16x16\actions\view-media-playlist.png" + 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 + file "icons\oxygen\16x16\categories\applications-internet.png" + file "icons\oxygen\16x16\categories\preferences-other.png" + file "icons\oxygen\16x16\categories\preferences-system-network.png" + setOutPath $INSTDIR\icons\oxygen\16x16\devices + file "icons\oxygen\16x16\devices\media-optical.png" + file "icons\oxygen\16x16\devices\multimedia-player.png" + setOutPath $INSTDIR\icons\oxygen\16x16\mimetypes + file "icons\oxygen\16x16\mimetypes\audio-x-generic.png" + file "icons\oxygen\16x16\mimetypes\inode-directory.png" + setOutPath $INSTDIR\icons\oxygen\16x16\places + file "icons\oxygen\16x16\places\bookmarks.png" + file "icons\oxygen\16x16\places\document-multiple.png" + file "icons\oxygen\16x16\places\favorites.png" + file "icons\oxygen\16x16\places\network-server.png" + file "icons\oxygen\16x16\places\server-database.png" + setOutPath $INSTDIR\icons\oxygen\16x16\status + file "icons\oxygen\16x16\status\dialog-error.png" + file "icons\oxygen\16x16\status\dialog-information.png" + file "icons\oxygen\16x16\status\dialog-warning.png" + file "icons\oxygen\16x16\status\media-playlist-shuffle.png" + file "icons\oxygen\16x16\status\object-locked.png" + setOutPath $INSTDIR\icons\oxygen\22x22\actions + file "icons\oxygen\22x22\actions\application-exit.png" + file "icons\oxygen\22x22\actions\bookmark-new.png" + file "icons\oxygen\22x22\actions\bookmarks.png" + file "icons\oxygen\22x22\actions\configure.png" + file "icons\oxygen\22x22\actions\dialog-cancel.png" + file "icons\oxygen\22x22\actions\dialog-close.png" + file "icons\oxygen\22x22\actions\dialog-ok.png" + file "icons\oxygen\22x22\actions\document-edit.png" + file "icons\oxygen\22x22\actions\document-export.png" + file "icons\oxygen\22x22\actions\document-import.png" + file "icons\oxygen\22x22\actions\document-new.png" + file "icons\oxygen\22x22\actions\document-open.png" + file "icons\oxygen\22x22\actions\document-save-as.png" + file "icons\oxygen\22x22\actions\document-save.png" + file "icons\oxygen\22x22\actions\edit-clear-list.png" + file "icons\oxygen\22x22\actions\edit-clear-locationbar-ltr.png" + file "icons\oxygen\22x22\actions\edit-clear-locationbar-rtl.png" + file "icons\oxygen\22x22\actions\edit-delete.png" + file "icons\oxygen\22x22\actions\edit-find.png" + file "icons\oxygen\22x22\actions\edit-rename.png" + file "icons\oxygen\22x22\actions\folder-sync.png" + file "icons\oxygen\22x22\actions\go-down.png" + file "icons\oxygen\22x22\actions\go-next.png" + file "icons\oxygen\22x22\actions\go-previous.png" + file "icons\oxygen\22x22\actions\go-up.png" + file "icons\oxygen\22x22\actions\list-add.png" + file "icons\oxygen\22x22\actions\list-remove.png" + file "icons\oxygen\22x22\actions\media-playback-pause.png" + file "icons\oxygen\22x22\actions\media-playback-start.png" + file "icons\oxygen\22x22\actions\media-playback-stop.png" + file "icons\oxygen\22x22\actions\media-skip-backward.png" + file "icons\oxygen\22x22\actions\media-skip-forward.png" + file "icons\oxygen\22x22\actions\process-stop.png" + file "icons\oxygen\22x22\actions\speaker.png" + file "icons\oxygen\22x22\actions\tools-wizard.png" + file "icons\oxygen\22x22\actions\view-fullscreen.png" + file "icons\oxygen\22x22\actions\view-media-artist.png" + file "icons\oxygen\22x22\actions\view-media-playlist.png" + 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 + file "icons\oxygen\22x22\categories\applications-internet.png" + file "icons\oxygen\22x22\categories\preferences-other.png" + file "icons\oxygen\22x22\categories\preferences-system-network.png" + setOutPath $INSTDIR\icons\oxygen\22x22\devices + file "icons\oxygen\22x22\devices\media-optical.png" + file "icons\oxygen\22x22\devices\multimedia-player.png" + setOutPath $INSTDIR\icons\oxygen\22x22\mimetypes + file "icons\oxygen\22x22\mimetypes\audio-x-generic.png" + file "icons\oxygen\22x22\mimetypes\inode-directory.png" + setOutPath $INSTDIR\icons\oxygen\22x22\places + file "icons\oxygen\22x22\places\bookmarks.png" + file "icons\oxygen\22x22\places\document-multiple.png" + file "icons\oxygen\22x22\places\favorites.png" + file "icons\oxygen\22x22\places\network-server.png" + file "icons\oxygen\22x22\places\server-database.png" + setOutPath $INSTDIR\icons\oxygen\22x22\status + file "icons\oxygen\22x22\status\dialog-error.png" + file "icons\oxygen\22x22\status\dialog-information.png" + file "icons\oxygen\22x22\status\dialog-warning.png" + file "icons\oxygen\22x22\status\media-playlist-shuffle.png" + file "icons\oxygen\22x22\status\object-locked.png" + setOutPath $INSTDIR\icons\oxygen\22x22\apps + file "icons\oxygen\24x24\apps\cantata.png" + setOutPath $INSTDIR\icons\oxygen\256x256\categories + file "icons\oxygen\256x256\categories\applications-internet.png" + setOutPath $INSTDIR\icons\oxygen\256x256\devices + file "icons\oxygen\256x256\devices\media-optical.png" + setOutPath $INSTDIR\icons\oxygen\32x32\actions + file "icons\oxygen\32x32\actions\application-exit.png" + file "icons\oxygen\32x32\actions\bookmark-new.png" + file "icons\oxygen\32x32\actions\configure.png" + file "icons\oxygen\32x32\actions\dialog-cancel.png" + file "icons\oxygen\32x32\actions\dialog-close.png" + file "icons\oxygen\32x32\actions\dialog-ok.png" + file "icons\oxygen\32x32\actions\document-edit.png" + file "icons\oxygen\32x32\actions\document-export.png" + file "icons\oxygen\32x32\actions\document-import.png" + file "icons\oxygen\32x32\actions\document-new.png" + file "icons\oxygen\32x32\actions\document-open.png" + file "icons\oxygen\32x32\actions\document-save-as.png" + file "icons\oxygen\32x32\actions\document-save.png" + file "icons\oxygen\32x32\actions\edit-clear-list.png" + file "icons\oxygen\32x32\actions\edit-clear-locationbar-ltr.png" + file "icons\oxygen\32x32\actions\edit-clear-locationbar-rtl.png" + file "icons\oxygen\32x32\actions\edit-delete.png" + file "icons\oxygen\32x32\actions\edit-find.png" + file "icons\oxygen\32x32\actions\edit-rename.png" + file "icons\oxygen\32x32\actions\folder-sync.png" + file "icons\oxygen\32x32\actions\go-down.png" + file "icons\oxygen\32x32\actions\go-next.png" + file "icons\oxygen\32x32\actions\go-previous.png" + file "icons\oxygen\32x32\actions\go-up.png" + file "icons\oxygen\32x32\actions\list-add.png" + file "icons\oxygen\32x32\actions\list-remove.png" + file "icons\oxygen\32x32\actions\media-playback-pause.png" + file "icons\oxygen\32x32\actions\media-playback-start.png" + file "icons\oxygen\32x32\actions\media-playback-stop.png" + file "icons\oxygen\32x32\actions\media-skip-backward.png" + file "icons\oxygen\32x32\actions\media-skip-forward.png" + file "icons\oxygen\32x32\actions\process-stop.png" + file "icons\oxygen\32x32\actions\speaker.png" + file "icons\oxygen\32x32\actions\tools-wizard.png" + file "icons\oxygen\32x32\actions\view-fullscreen.png" + file "icons\oxygen\32x32\actions\view-media-artist.png" + file "icons\oxygen\32x32\actions\view-media-playlist.png" + 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 + file "icons\oxygen\32x32\categories\applications-internet.png" + file "icons\oxygen\32x32\categories\preferences-other.png" + file "icons\oxygen\32x32\categories\preferences-system-network.png" + setOutPath $INSTDIR\icons\oxygen\32x32\devices + file "icons\oxygen\32x32\devices\media-optical.png" + file "icons\oxygen\32x32\devices\multimedia-player.png" + setOutPath $INSTDIR\icons\oxygen\32x32\mimetypes + file "icons\oxygen\32x32\mimetypes\audio-x-generic.png" + file "icons\oxygen\32x32\mimetypes\inode-directory.png" + setOutPath $INSTDIR\icons\oxygen\32x32\places + file "icons\oxygen\32x32\places\bookmarks.png" + file "icons\oxygen\32x32\places\document-multiple.png" + file "icons\oxygen\32x32\places\favorites.png" + file "icons\oxygen\32x32\places\network-server.png" + file "icons\oxygen\32x32\places\server-database.png" + setOutPath $INSTDIR\icons\oxygen\32x32\status + file "icons\oxygen\32x32\status\dialog-error.png" + file "icons\oxygen\32x32\status\dialog-information.png" + file "icons\oxygen\32x32\status\dialog-warning.png" + file "icons\oxygen\32x32\status\media-playlist-shuffle.png" + 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" + file "icons\oxygen\48x48\categories\preferences-other.png" + file "icons\oxygen\48x48\categories\preferences-system-network.png" + setOutPath $INSTDIR\icons\oxygen\48x48\devices + file "icons\oxygen\48x48\devices\media-optical.png" + 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" + file "icons\oxygen\48x48\status\dialog-warning.png" + file "icons\oxygen\48x48\status\media-playlist-shuffle.png" + 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" + file "icons\oxygen\64x64\categories\preferences-other.png" + file "icons\oxygen\64x64\categories\preferences-system-network.png" + setOutPath $INSTDIR\icons\oxygen\64x64\devices + file "icons\oxygen\64x64\devices\media-optical.png" + 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" + file "icons\oxygen\64x64\status\dialog-warning.png" + setOutPath $INSTDIR\icons\oxygen\scalable\apps + file "icons\oxygen\scalable\apps\cantata.svg" + setOutPath $INSTDIR\imageformats + 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" + file "translations\qt_pl.qm" + file "translations\qt_pt.qm" + file "translations\qt_ru.qm" + file "translations\qt_sk.qm" + file "translations\qt_sl.qm" + file "translations\qt_sv.qm" + file "translations\qt_uk.qm" + file "translations\qt_zh_CN.qm" + file "translations\qt_zh_TW.qm" + + writeUninstaller "$INSTDIR\uninstall.exe" + + # Start Menu + createShortCut "$SMPROGRAMS\@WINDOWS_APP_NAME@.lnk" "$INSTDIR\cantata.exe" "" "$INSTDIR\cantata.exe" + + # Registry information for add/remove programs + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "DisplayName" "@WINDOWS_APP_NAME@" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "UninstallString" "$\"$INSTDIR\uninstall.exe$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "InstallLocation" "$\"$INSTDIR$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "DisplayIcon" "$\"$INSTDIR\cantata.exe$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "Publisher" "@WINDOWS_COMPANY_NAME@" +# 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_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 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "NoModify" 1 + WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "NoRepair" 1 + # Set the INSTALLSIZE constant (!defined at the top of this script) so Add/Remove Programs can accurately report the size + # WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" "EstimatedSize" ${INSTALLSIZE} +sectionEnd + +# Uninstaller + +section "uninstall" + # Remove Start Menu launcher + delete "$SMPROGRAMS\@WINDOWS_APP_NAME@.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" + delete "$INSTDIR\config\podcast_directories.xml" + delete "$INSTDIR\config\scrobblers.xml" + delete "$INSTDIR\config\tag_fixes.xml" + 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" + delete "$INSTDIR\icons\podcasts.png" + delete "$INSTDIR\icons\soundcloud.png" + delete "$INSTDIR\icons\stream.png" + delete "$INSTDIR\icons\oxygen\index.theme" + delete "$INSTDIR\icons\oxygen\Oxygen License (Creative Common Attribution-ShareAlike 3.0).html" + delete "$INSTDIR\icons\oxygen\Oxygen README.txt" + delete "$INSTDIR\icons\oxygen\128x128\categories\applications-internet.png" + delete "$INSTDIR\icons\oxygen\128x128\devices\media-optical.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\application-exit.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\bookmark-new.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\configure.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\dialog-cancel.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\dialog-close.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\dialog-ok.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\document-edit.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\document-export.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\document-import.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\document-new.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\document-open.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\document-save-as.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\document-save.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\edit-clear-list.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\edit-clear-locationbar-ltr.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\edit-clear-locationbar-rtl.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\edit-delete.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\edit-find.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\edit-rename.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\folder-sync.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\go-down.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\go-next.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\go-previous.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\go-up.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\list-add.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\list-remove.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\media-playback-pause.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\media-playback-start.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\media-playback-stop.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\media-skip-backward.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\media-skip-forward.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\process-stop.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\speaker.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\tools-wizard.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\view-fullscreen.png" + delete "$INSTDIR\icons\oxygen\16x16\actions\view-media-artist.png" + 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" + delete "$INSTDIR\icons\oxygen\16x16\categories\preferences-other.png" + delete "$INSTDIR\icons\oxygen\16x16\categories\preferences-system-network.png" + delete "$INSTDIR\icons\oxygen\16x16\devices\media-optical.png" + delete "$INSTDIR\icons\oxygen\16x16\devices\multimedia-player.png" + delete "$INSTDIR\icons\oxygen\16x16\mimetypes\audio-x-generic.png" + delete "$INSTDIR\icons\oxygen\16x16\mimetypes\inode-directory.png" + delete "$INSTDIR\icons\oxygen\16x16\places\bookmarks.png" + delete "$INSTDIR\icons\oxygen\16x16\places\document-multiple.png" + delete "$INSTDIR\icons\oxygen\16x16\places\favorites.png" + delete "$INSTDIR\icons\oxygen\16x16\places\network-server.png" + delete "$INSTDIR\icons\oxygen\16x16\places\server-database.png" + delete "$INSTDIR\icons\oxygen\16x16\status\dialog-error.png" + delete "$INSTDIR\icons\oxygen\16x16\status\dialog-information.png" + delete "$INSTDIR\icons\oxygen\16x16\status\dialog-warning.png" + delete "$INSTDIR\icons\oxygen\16x16\status\media-playlist-shuffle.png" + delete "$INSTDIR\icons\oxygen\16x16\status\object-locked.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\application-exit.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\bookmark-new.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\bookmarks.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\configure.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\dialog-cancel.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\dialog-close.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\dialog-ok.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\document-edit.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\document-export.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\document-import.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\document-new.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\document-open.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\document-save-as.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\document-save.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\edit-clear-list.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\edit-clear-locationbar-ltr.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\edit-clear-locationbar-rtl.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\edit-delete.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\edit-find.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\edit-rename.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\folder-sync.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\go-down.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\go-next.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\go-previous.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\go-up.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\list-add.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\list-remove.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\media-playback-pause.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\media-playback-start.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\media-playback-stop.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\media-skip-backward.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\media-skip-forward.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\process-stop.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\speaker.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\tools-wizard.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\view-fullscreen.png" + delete "$INSTDIR\icons\oxygen\22x22\actions\view-media-artist.png" + 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" + delete "$INSTDIR\icons\oxygen\22x22\categories\preferences-other.png" + delete "$INSTDIR\icons\oxygen\22x22\categories\preferences-system-network.png" + delete "$INSTDIR\icons\oxygen\22x22\devices\media-optical.png" + delete "$INSTDIR\icons\oxygen\22x22\devices\multimedia-player.png" + delete "$INSTDIR\icons\oxygen\22x22\mimetypes\audio-x-generic.png" + delete "$INSTDIR\icons\oxygen\22x22\mimetypes\inode-directory.png" + delete "$INSTDIR\icons\oxygen\22x22\places\bookmarks.png" + delete "$INSTDIR\icons\oxygen\22x22\places\document-multiple.png" + delete "$INSTDIR\icons\oxygen\22x22\places\favorites.png" + delete "$INSTDIR\icons\oxygen\22x22\places\network-server.png" + delete "$INSTDIR\icons\oxygen\22x22\places\server-database.png" + delete "$INSTDIR\icons\oxygen\22x22\status\dialog-error.png" + delete "$INSTDIR\icons\oxygen\22x22\status\dialog-information.png" + delete "$INSTDIR\icons\oxygen\22x22\status\dialog-warning.png" + delete "$INSTDIR\icons\oxygen\22x22\status\media-playlist-shuffle.png" + delete "$INSTDIR\icons\oxygen\22x22\status\object-locked.png" + delete "$INSTDIR\icons\oxygen\24x24\apps\cantata.png" + delete "$INSTDIR\icons\oxygen\256x256\categories\applications-internet.png" + delete "$INSTDIR\icons\oxygen\256x256\devices\media-optical.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\application-exit.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\bookmark-new.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\configure.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\dialog-cancel.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\dialog-close.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\dialog-ok.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\document-edit.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\document-export.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\document-import.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\document-new.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\document-open.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\document-save-as.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\document-save.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\edit-clear-list.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\edit-clear-locationbar-ltr.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\edit-clear-locationbar-rtl.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\edit-delete.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\edit-find.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\edit-rename.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\folder-sync.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\go-down.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\go-next.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\go-previous.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\go-up.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\list-add.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\list-remove.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\media-playback-pause.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\media-playback-start.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\media-playback-stop.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\media-skip-backward.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\media-skip-forward.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\process-stop.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\speaker.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\tools-wizard.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\view-fullscreen.png" + delete "$INSTDIR\icons\oxygen\32x32\actions\view-media-artist.png" + 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" + delete "$INSTDIR\icons\oxygen\32x32\categories\preferences-other.png" + delete "$INSTDIR\icons\oxygen\32x32\categories\preferences-system-network.png" + delete "$INSTDIR\icons\oxygen\32x32\devices\media-optical.png" + delete "$INSTDIR\icons\oxygen\32x32\devices\multimedia-player.png" + delete "$INSTDIR\icons\oxygen\32x32\mimetypes\audio-x-generic.png" + delete "$INSTDIR\icons\oxygen\32x32\mimetypes\inode-directory.png" + delete "$INSTDIR\icons\oxygen\32x32\places\bookmarks.png" + delete "$INSTDIR\icons\oxygen\32x32\places\document-multiple.png" + delete "$INSTDIR\icons\oxygen\32x32\places\favorites.png" + delete "$INSTDIR\icons\oxygen\32x32\places\network-server.png" + delete "$INSTDIR\icons\oxygen\32x32\places\server-database.png" + delete "$INSTDIR\icons\oxygen\32x32\status\dialog-error.png" + delete "$INSTDIR\icons\oxygen\32x32\status\dialog-information.png" + delete "$INSTDIR\icons\oxygen\32x32\status\dialog-warning.png" + 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" + delete "$INSTDIR\icons\oxygen\48x48\categories\preferences-system-network.png" + 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" + delete "$INSTDIR\icons\oxygen\64x64\categories\preferences-system-network.png" + 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\imageformats\qjpeg.dll" + delete "$INSTDIR\imageformats\qsvg.dll" + delete "$INSTDIR\platforms\qwindows.dll" + delete "$INSTDIR\Qt4 README.txt" + 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\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" + delete "$INSTDIR\translations\cantata_ru.qm" + delete "$INSTDIR\translations\cantata_zh_CN.qm" + delete "$INSTDIR\translations\qt_ar.qm" + delete "$INSTDIR\translations\qt_cs.qm" + delete "$INSTDIR\translations\qt_da.qm" + 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" + delete "$INSTDIR\translations\qt_pl.qm" + delete "$INSTDIR\translations\qt_pt.qm" + delete "$INSTDIR\translations\qt_ru.qm" + delete "$INSTDIR\translations\qt_sk.qm" + delete "$INSTDIR\translations\qt_sl.qm" + delete "$INSTDIR\translations\qt_sv.qm" + delete "$INSTDIR\translations\qt_uk.qm" + delete "$INSTDIR\translations\qt_zh_CN.qm" + delete "$INSTDIR\translations\qt_zh_TW.qm" + + rmDir $INSTDIR\config + rmDir $INSTDIR\helpers + rmDir $INSTDIR\iconengines + rmDir $INSTDIR\icons\oxygen\128x128\categories + rmDir $INSTDIR\icons\oxygen\128x128\devices + rmDir $INSTDIR\icons\oxygen\128x128 + rmDir $INSTDIR\icons\oxygen\16x16\actions + rmDir $INSTDIR\icons\oxygen\16x16\apps + rmDir $INSTDIR\icons\oxygen\16x16\categories + rmDir $INSTDIR\icons\oxygen\16x16\devices + rmDir $INSTDIR\icons\oxygen\16x16\mimetypes + rmDir $INSTDIR\icons\oxygen\16x16\places + rmDir $INSTDIR\icons\oxygen\16x16\status + rmDir $INSTDIR\icons\oxygen\16x16 + rmDir $INSTDIR\icons\oxygen\22x22\actions + rmDir $INSTDIR\icons\oxygen\22x22\apps + rmDir $INSTDIR\icons\oxygen\22x22\categories + rmDir $INSTDIR\icons\oxygen\22x22\devices + rmDir $INSTDIR\icons\oxygen\22x22\mimetypes + rmDir $INSTDIR\icons\oxygen\22x22\places + rmDir $INSTDIR\icons\oxygen\22x22\status + rmDir $INSTDIR\icons\oxygen\22x22\apps + rmDir $INSTDIR\icons\oxygen\22x22 + rmDir $INSTDIR\icons\oxygen\256x256\categories + rmDir $INSTDIR\icons\oxygen\256x256\devices + rmDir $INSTDIR\icons\oxygen\256x256 + rmDir $INSTDIR\icons\oxygen\32x32\actions + rmDir $INSTDIR\icons\oxygen\32x32\apps + rmDir $INSTDIR\icons\oxygen\32x32\categories + rmDir $INSTDIR\icons\oxygen\32x32\devices + rmDir $INSTDIR\icons\oxygen\32x32\mimetypes + rmDir $INSTDIR\icons\oxygen\32x32\places + rmDir $INSTDIR\icons\oxygen\32x32\status + rmDir $INSTDIR\icons\oxygen\32x32 + rmDir $INSTDIR\icons\oxygen\48x48\actions + rmDir $INSTDIR\icons\oxygen\48x48\apps + rmDir $INSTDIR\icons\oxygen\48x48\categories + rmDir $INSTDIR\icons\oxygen\48x48\devices + rmDir $INSTDIR\icons\oxygen\48x48\places + rmDir $INSTDIR\icons\oxygen\48x48\status + rmDir $INSTDIR\icons\oxygen\48x48 + rmDir $INSTDIR\icons\oxygen\64x64\actions + rmDir $INSTDIR\icons\oxygen\64x64\apps + rmDir $INSTDIR\icons\oxygen\64x64\categories + rmDir $INSTDIR\icons\oxygen\64x64\devices + rmDir $INSTDIR\icons\oxygen\64x64\places + rmDir $INSTDIR\icons\oxygen\64x64\status + rmDir $INSTDIR\icons\oxygen\64x64 + rmDir $INSTDIR\icons\oxygen\scalable\apps + rmDir $INSTDIR\icons\oxygen\scalable + rmDir $INSTDIR\icons\oxygen + rmDir $INSTDIR\icons + rmDir $INSTDIR\imageformats + rmDir $INSTDIR\platforms + rmDir $INSTDIR\translations + + # Always delete uninstaller as the last action + delete $INSTDIR\uninstall.exe + + # Try to remove the install directory - this will only happen if it is empty + rmDir $INSTDIR + + # Remove uninstaller information from the registry + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@WINDOWS_COMPANY_NAME@ @WINDOWS_APP_NAME@" +sectionEnd diff -Nru cantata-1.4.2.ds1/windows/CMakeLists.txt cantata-1.5.2.ds2/windows/CMakeLists.txt --- cantata-1.4.2.ds1/windows/CMakeLists.txt 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/windows/CMakeLists.txt 2015-03-23 20:09:35.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/windows/icons/CMakeLists.txt cantata-1.5.2.ds2/windows/icons/CMakeLists.txt --- cantata-1.4.2.ds1/windows/icons/CMakeLists.txt 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/windows/icons/CMakeLists.txt 2015-03-23 20:09:35.000000000 +0000 @@ -197,9 +197,23 @@ 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 -Nru cantata-1.4.2.ds1/windows/icons/index.theme cantata-1.5.2.ds2/windows/icons/index.theme --- cantata-1.4.2.ds1/windows/icons/index.theme 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/windows/icons/index.theme 2015-03-23 20:09:35.000000000 +0000 @@ -17,7 +17,7 @@ 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 @@ 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 @@ 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 -Nru cantata-1.4.2.ds1/windows/icons/LICENSE.LGPL_V3 cantata-1.5.2.ds2/windows/icons/LICENSE.LGPL_V3 --- cantata-1.4.2.ds1/windows/icons/LICENSE.LGPL_V3 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/windows/icons/LICENSE.LGPL_V3 2015-03-23 20:09:35.000000000 +0000 @@ -1,165 +1,165 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - 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. + 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 -Nru cantata-1.4.2.ds1/windows/icons/README cantata-1.5.2.ds2/windows/icons/README --- cantata-1.4.2.ds1/windows/icons/README 2014-09-28 16:30:08.000000000 +0000 +++ cantata-1.5.2.ds2/windows/icons/README 2015-03-23 20:09:35.000000000 +0000 @@ -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 -Nru cantata-1.4.2.ds1/windows/thumbnailtoolbar.cpp cantata-1.5.2.ds2/windows/thumbnailtoolbar.cpp --- cantata-1.4.2.ds1/windows/thumbnailtoolbar.cpp 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/windows/thumbnailtoolbar.cpp 2015-03-23 20:09:34.000000000 +0000 @@ -0,0 +1,85 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 + +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 -Nru cantata-1.4.2.ds1/windows/thumbnailtoolbar.h cantata-1.5.2.ds2/windows/thumbnailtoolbar.h --- cantata-1.4.2.ds1/windows/thumbnailtoolbar.h 1970-01-01 00:00:00.000000000 +0000 +++ cantata-1.5.2.ds2/windows/thumbnailtoolbar.h 2015-03-23 20:09:35.000000000 +0000 @@ -0,0 +1,51 @@ +/* + * Cantata + * + * Copyright (c) 2011-2014 Craig Drummond + * + * ---- + * + * 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 WINTHUMBNAILTOOLBAR_H +#define WINTHUMBNAILTOOLBAR_H + +#include + +class QWinThumbnailToolButton; +class MPDStatus; +class Action; +class ThumbnailToolBar : public QWinThumbnailToolBar +{ +public: + ThumbnailToolBar(QWidget *w); + virtual ~ThumbnailToolBar() { } + + void readSettings(); + void update(MPDStatus * const status); + +private: + QWinThumbnailToolButton * createButton(Action *act); + +private: + QWinThumbnailToolButton *prevButton; + QWinThumbnailToolButton *playPauseButton; + QWinThumbnailToolButton *stopButton; + QWinThumbnailToolButton *nextButton; +}; + +#endif