summaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/CMakeLists.txt35
-rw-r--r--utils/cmake/deploy.cmake162
-rwxr-xr-xutils/common/deploy-themeeditor.py62
-rwxr-xr-xutils/common/deploy.py677
-rwxr-xr-xutils/common/gitscraper.py17
-rwxr-xr-xutils/common/tarball-rbutil.py (renamed from utils/common/deploy-rbutil.py)87
-rw-r--r--utils/ipodpatcher/ipodio-posix.c1
-rw-r--r--utils/ipodpatcher/ipodio-win32.c1
-rw-r--r--utils/ipodpatcher/ipodpatcher-aupd.c398
-rw-r--r--utils/ipodpatcher/ipodpatcher.c355
-rw-r--r--utils/jztool/src/x1000.c99
-rw-r--r--utils/rbutilqt/CMakeLists.txt47
-rw-r--r--utils/rbutilqt/INSTALL37
-rw-r--r--utils/rbutilqt/Info.plist4
-rw-r--r--utils/rbutilqt/base/autodetection.cpp10
-rw-r--r--utils/rbutilqt/base/autodetection.h5
-rw-r--r--utils/rbutilqt/base/bootloaderinstallbase.cpp65
-rw-r--r--utils/rbutilqt/base/bootloaderinstallbase.h11
-rw-r--r--utils/rbutilqt/base/bootloaderinstallipod.cpp43
-rw-r--r--utils/rbutilqt/base/bootloaderinstallsansa.cpp51
-rw-r--r--utils/rbutilqt/base/encttssettings.h3
-rw-r--r--utils/rbutilqt/base/httpget.cpp29
-rw-r--r--utils/rbutilqt/base/httpget.h7
-rw-r--r--utils/rbutilqt/base/playerbuildinfo.cpp52
-rw-r--r--utils/rbutilqt/base/playerbuildinfo.h2
-rw-r--r--utils/rbutilqt/base/rbsettings.cpp1
-rw-r--r--utils/rbutilqt/base/rbsettings.h1
-rw-r--r--utils/rbutilqt/base/system.cpp7
-rw-r--r--utils/rbutilqt/base/talkfile.cpp6
-rw-r--r--utils/rbutilqt/base/talkgenerator.cpp26
-rw-r--r--utils/rbutilqt/base/talkgenerator.h4
-rw-r--r--utils/rbutilqt/base/ttsbase.h4
-rw-r--r--utils/rbutilqt/base/ttscarbon.cpp2
-rw-r--r--utils/rbutilqt/base/ttscarbon.h2
-rw-r--r--utils/rbutilqt/base/ttsexes.cpp2
-rw-r--r--utils/rbutilqt/base/ttsexes.h2
-rw-r--r--utils/rbutilqt/base/ttsfestival.cpp94
-rw-r--r--utils/rbutilqt/base/ttsfestival.h2
-rw-r--r--utils/rbutilqt/base/ttssapi.cpp2
-rw-r--r--utils/rbutilqt/base/ttssapi.h2
-rw-r--r--utils/rbutilqt/base/uninstall.cpp20
-rw-r--r--utils/rbutilqt/base/utils.cpp4
-rw-r--r--utils/rbutilqt/base/voicefile.cpp14
-rw-r--r--utils/rbutilqt/base/voicefile.h2
-rw-r--r--utils/rbutilqt/base/zipinstaller.cpp13
-rw-r--r--utils/rbutilqt/base/zipinstaller.h13
-rw-r--r--utils/rbutilqt/base/ziputil.cpp1
-rw-r--r--utils/rbutilqt/changelog.txt8
-rw-r--r--utils/rbutilqt/configure.cpp6
-rw-r--r--utils/rbutilqt/encttscfggui.cpp275
-rw-r--r--utils/rbutilqt/encttscfggui.h16
-rw-r--r--utils/rbutilqt/gui/infowidget.cpp52
-rw-r--r--utils/rbutilqt/gui/selectiveinstallwidget.cpp38
-rw-r--r--utils/rbutilqt/gui/selectiveinstallwidget.h1
-rw-r--r--utils/rbutilqt/lang/rbutil_cs.ts1348
-rw-r--r--utils/rbutilqt/lang/rbutil_de.ts684
-rw-r--r--utils/rbutilqt/lang/rbutil_fr.ts1460
-rw-r--r--utils/rbutilqt/lang/rbutil_gr.ts1469
-rw-r--r--utils/rbutilqt/lang/rbutil_he.ts1468
-rw-r--r--utils/rbutilqt/lang/rbutil_it.ts1463
-rw-r--r--utils/rbutilqt/lang/rbutil_ja.ts1464
-rw-r--r--utils/rbutilqt/lang/rbutil_nl.ts1462
-rw-r--r--utils/rbutilqt/lang/rbutil_pl.ts1460
-rw-r--r--utils/rbutilqt/lang/rbutil_pt.ts1463
-rw-r--r--utils/rbutilqt/lang/rbutil_pt_BR.ts438
-rw-r--r--utils/rbutilqt/lang/rbutil_ru.ts436
-rw-r--r--utils/rbutilqt/lang/rbutil_tr.ts876
-rw-r--r--utils/rbutilqt/lang/rbutil_zh_TW.ts1464
-rwxr-xr-xutils/rbutilqt/langstats.py39
-rw-r--r--utils/rbutilqt/main.cpp9
-rw-r--r--utils/rbutilqt/rbutil.ini26
-rw-r--r--utils/rbutilqt/rbutilqt.cpp76
-rw-r--r--utils/rbutilqt/rbutilqt.h5
-rw-r--r--utils/rbutilqt/rbutilqtfrm.ui40
-rw-r--r--utils/rbutilqt/test/stubs/stubs-talkgenerator.cpp104
-rw-r--r--utils/rbutilqt/test/test-httpget.cpp16
-rw-r--r--utils/rbutilqt/test/test-playerbuildinfo.cpp35
-rw-r--r--utils/rbutilqt/test/test-talkgenerator.cpp83
-rw-r--r--utils/rbutilqt/test/test-talkgenerator.qrc5
-rw-r--r--utils/rbutilqt/themesinstallwindow.cpp41
-rw-r--r--utils/rbutilqt/themesinstallwindow.h13
-rw-r--r--utils/rbutilqt/version.h2
-rw-r--r--utils/sansapatcher/sansaio-posix.c1
-rw-r--r--utils/sansapatcher/sansaio-win32.c1
-rw-r--r--utils/themeeditor/CMakeLists.txt11
85 files changed, 12096 insertions, 8246 deletions
diff --git a/utils/CMakeLists.txt b/utils/CMakeLists.txt
index 6aa419ada2..55e5b7991f 100644
--- a/utils/CMakeLists.txt
+++ b/utils/CMakeLists.txt
@@ -17,6 +17,10 @@ project(RockboxUtils)
set (CMAKE_EXPORT_COMPILE_COMMANDS ON)
+if (NOT CMAKE_BUILD_TYPE)
+ message("-- CMAKE_BUILD_TYPE not set, assuming Release")
+ set(CMAKE_BUILD_TYPE Release)
+endif()
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
message("-- Found ccache, enabling")
@@ -35,6 +39,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
endif()
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
add_compile_options(-Wall -Wextra)
+ add_link_options($<$<CONFIG:RELEASE>:-s>)
endif()
@@ -43,13 +48,15 @@ enable_testing()
# Qt
find_package(QT NAMES Qt6 Qt5 REQUIRED)
if(QT_VERSION_MAJOR EQUAL 5)
- find_package(Qt5 COMPONENTS Core Widgets Svg Multimedia Network Test LinguistTools REQUIRED)
+ find_package(Qt5 REQUIRED COMPONENTS
+ Core Widgets Svg Multimedia Network Test LinguistTools)
else()
- find_package(Qt6 REQUIRED COMPONENTS Core Core5Compat Widgets Svg Multimedia Network LinguistTools
- OPTIONAL_COMPONENTS Test)
+ find_package(Qt6 REQUIRED COMPONENTS
+ Core Core5Compat Widgets Svg Network LinguistTools SvgWidgets
+ OPTIONAL_COMPONENTS Multimedia Test)
endif()
-get_target_property(_qmake_executable Qt${QT_VERSION_MAJOR}::qmake IMPORTED_LOCATION)
-get_filename_component(QT_BINDIR "${_qmake_executable}" DIRECTORY)
+get_target_property(_moc_executable Qt${QT_VERSION_MAJOR}::moc IMPORTED_LOCATION)
+get_filename_component(QT_BINDIR "${_moc_executable}" DIRECTORY)
message("-- Found Qt${QT_VERSION_MAJOR}: ${Qt${QT_VERSION_MAJOR}_DIR}")
# If we're on Linux, try to find the used libs in the system.
@@ -77,6 +84,17 @@ if(APPLE)
endif()
+add_executable(ipodpatcher-bin
+ ipodpatcher/main.c
+ ipodpatcher/ipodpatcher-aupd.c
+ )
+target_link_libraries(ipodpatcher-bin ipodpatcher)
+target_compile_definitions(ipodpatcher-bin PRIVATE VERSION="none")
+set_target_properties(ipodpatcher-bin PROPERTIES OUTPUT_NAME ipodpatcher)
+if(APPLE)
+ target_link_libraries(ipodpatcher-bin ${FRAMEWORK_IOKIT} ${FRAMEWORK_COREFOUNDATION})
+endif()
+
add_library(ipodpatcher
ipodpatcher/arc4.h
ipodpatcher/arc4.c
@@ -99,6 +117,13 @@ endif()
target_compile_definitions(ipodpatcher PUBLIC RBUTIL _LARGEFILE64_SOURCE)
target_include_directories(ipodpatcher PUBLIC ${CMAKE_CURRENT_LIST_DIR}/ipodpatcher)
+add_executable(sansapatcher-bin
+ sansapatcher/main.c
+ )
+target_link_libraries(sansapatcher-bin sansapatcher)
+target_compile_definitions(sansapatcher-bin PRIVATE VERSION="none")
+set_target_properties(sansapatcher-bin PROPERTIES OUTPUT_NAME sansapatcher)
+
add_library(sansapatcher
sansapatcher/parttypes.h
sansapatcher/sansaio.h
diff --git a/utils/cmake/deploy.cmake b/utils/cmake/deploy.cmake
index 4a43c033fa..252aba0636 100644
--- a/utils/cmake/deploy.cmake
+++ b/utils/cmake/deploy.cmake
@@ -39,43 +39,91 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-DOUTDIR=${CMAKE_BINARY_DIR}
-DURL=https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage
-P ${CMAKE_CURRENT_LIST_DIR}/download.cmake
- )
- # intermediate target needed to be able to get back to the actual file dependency.
- add_custom_target(linuxdeploy DEPENDS ${LINUXDEPLOY})
- function(deploy_qt target qtbindir iconfile desktopfile dmgbuildcfg)
+ )
+ # intermediate target needed to be able to get back to the actual file dependency.
+ add_custom_target(linuxdeploy DEPENDS ${LINUXDEPLOY})
+
+ function(deploy_qt)
+ cmake_parse_arguments(deploy ""
+ "TARGET;DESKTOPFILE;ICONFILE;QTBINDIR;DMGBUILDCFG"
+ "EXECUTABLES"
+ ${ARGN})
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
message(WARNING "Deploying a Debug build.")
endif()
+ add_custom_target(deploy_${deploy_TARGET}
+ DEPENDS ${CMAKE_BINARY_DIR}/${deploy_TARGET}.AppImage)
+
+ # need extra rules so we can use generator expressions
+ # (using get_target_property() doesn't know neede values during generation)
+ set(_deploy_deps "")
+ foreach(_deploy_exe_tgt ${deploy_EXECUTABLES})
+ add_custom_command(
+ OUTPUT ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.appimage.stamp
+ COMMENT "Copying ${_deploy_exe_tgt} to AppImage"
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/AppImage-${deploy_TARGET}/usr/bin
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${_deploy_exe_tgt}>
+ ${CMAKE_BINARY_DIR}/AppImage-${deploy_TARGET}/usr/bin
+ COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${_deploy_exe_tgt}.appimage.stamp
+ DEPENDS ${_deploy_exe_tgt}
+ )
+ add_custom_target(deploy_${deploy_TARGET}_${_deploy_exe_tgt}
+ DEPENDS ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.appimage.stamp)
+
+ set(_deploy_deps "${_deploy_deps};deploy_${deploy_TARGET}_${_deploy_exe_tgt}")
+ endforeach()
+
add_custom_command(
- OUTPUT ${CMAKE_BINARY_DIR}/${target}.AppImage
- COMMENT "Creating AppImage ${target}"
- COMMAND OUTPUT=${CMAKE_BINARY_DIR}/${target}.AppImage
+ OUTPUT ${CMAKE_BINARY_DIR}/${deploy_TARGET}.AppImage
+ COMMENT "Creating AppImage ${deploy_TARGET}"
+ COMMAND OUTPUT=${CMAKE_BINARY_DIR}/${deploy_TARGET}.AppImage
${LINUXDEPLOY}
--plugin qt
- --icon-file=${iconfile}
- --desktop-file=${desktopfile}
- --executable=$<TARGET_FILE:${target}>
- --appdir=AppImage-${target}
+ --icon-file=${deploy_ICONFILE}
+ --desktop-file=${deploy_DESKTOPFILE}
+ --executable=$<TARGET_FILE:${deploy_TARGET}>
+ --appdir=${CMAKE_BINARY_DIR}/AppImage-${deploy_TARGET}
--output=appimage
--verbosity=2
- DEPENDS ${target} linuxdeploy
+ DEPENDS ${deploy_TARGET} ${_deploy_deps} linuxdeploy
)
- add_custom_target(deploy_${target}
- DEPENDS ${CMAKE_BINARY_DIR}/${target}.AppImage)
- add_dependencies(deploy deploy_${target})
+ add_dependencies(deploy deploy_${deploy_TARGET})
endfunction()
endif()
# MacOS: Build dmg
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
- function(deploy_qt target qtbindir iconfile desktopfile dmgbuildcfg)
+ function(deploy_qt)
+ cmake_parse_arguments(deploy ""
+ "TARGET;DESKTOPFILE;ICONFILE;QTBINDIR;DMGBUILDCFG"
+ "EXECUTABLES"
+ ${ARGN})
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
message(WARNING "Deploying a Debug build.")
endif()
set(DMGBUILD ${CMAKE_BINARY_DIR}/venv/bin/python3 -m dmgbuild)
set(DMGBUILD_STAMP ${CMAKE_BINARY_DIR}/dmgbuild.stamp)
- find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${qtbindir}")
+ find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${QTBINDIR}")
+
+ # need extra rules so we can use generator expressions
+ # (using get_target_property() doesn't know neede values during generation)
+ set(_deploy_deps "")
+ foreach(_deploy_exe_tgt ${deploy_EXECUTABLES})
+ add_custom_command(
+ OUTPUT ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp
+ COMMENT "Copying ${_deploy_exe_tgt} to App"
+ COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_BUNDLE_CONTENT_DIR:${deploy_TARGET}>/bin
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${_deploy_exe_tgt}>
+ $<TARGET_BUNDLE_CONTENT_DIR:${deploy_TARGET}>/bin
+ COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp
+ DEPENDS ${_deploy_exe_tgt}
+ )
+ add_custom_target(deploy_${deploy_TARGET}_${_deploy_exe_tgt}
+ DEPENDS ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp)
+
+ set(_deploy_deps "${_deploy_deps};deploy_${deploy_TARGET}_${_deploy_exe_tgt}")
+ endforeach()
add_custom_command(
COMMENT "Setting up dmgbuild virtualenv"
@@ -86,62 +134,86 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
add_custom_command(
# TODO: find a better way to figure the app bundle name.
- OUTPUT ${CMAKE_BINARY_DIR}/${target}.dmg
- COMMENT "Running macdeployqt and creating dmg ${target}"
- COMMAND ${MACDEPLOYQT_EXECUTABLE} ${target}.app
- COMMAND ${DMGBUILD} -s ${dmgbuildcfg}
- -Dappbundle=${target}.app
- ${target} ${CMAKE_BINARY_DIR}/${target}.dmg
- DEPENDS ${target}
+ OUTPUT ${CMAKE_BINARY_DIR}/${deploy_TARGET}.dmg
+ COMMENT "Running macdeployqt and creating dmg ${deploy_TARGET}"
+ COMMAND ${MACDEPLOYQT_EXECUTABLE} ${deploy_TARGET}.app
+ COMMAND ${DMGBUILD} -s ${deploy_DMGBUILDCFG}
+ -Dappbundle=${deploy_TARGET}.app
+ ${deploy_TARGET} ${CMAKE_BINARY_DIR}/${deploy_TARGET}.dmg
+ DEPENDS ${deploy_TARGET}
${DMGBUILD_STAMP}
+ ${_deploy_deps}
)
- add_custom_target(deploy_${target}
- DEPENDS ${CMAKE_BINARY_DIR}/${target}.dmg)
- add_dependencies(deploy deploy_${target})
+ add_custom_target(deploy_${deploy_TARGET}
+ DEPENDS ${CMAKE_BINARY_DIR}/${deploy_TARGET}.dmg)
+ add_dependencies(deploy deploy_${deploy_TARGET})
endfunction()
endif()
# Windows. Copy to dist folder, run windeployqt on the binary, compress to zip.
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
- function(deploy_qt target qtbindir iconfile desktopfile dmgbuildcfg)
+ function(deploy_qt)
+ cmake_parse_arguments(deploy ""
+ "TARGET;DESKTOPFILE;ICONFILE;QTBINDIR;DMGBUILDCFG"
+ "EXECUTABLES"
+ ${ARGN})
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
message(WARNING "Deploying a Debug build.")
endif()
- set(_targetfile ${target}.exe) # TODO: Use property. OUTPUT_NAME seems to fail.
- find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${qtbindir}")
- set(deploydir ${CMAKE_BINARY_DIR}/deploy-${target})
+ find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${QTBINDIR}")
+ set(deploydir ${CMAKE_BINARY_DIR}/deploy-${deploy_TARGET})
if(WINDEPLOYQT_EXECUTABLE)
add_custom_command(
COMMENT "Creating deploy folder and running windeployqt"
- OUTPUT ${deploydir}/${_targetfile}
+ OUTPUT ${deploydir}/${deploy_TARGET}
COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir}
- COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_targetfile} ${deploydir}
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${deploy_TARGET}> ${deploydir}
COMMAND ${WINDEPLOYQT_EXECUTABLE}
- $<IF:$<CONFIG:Debug>,--debug,--release> # on MinGW, release is mistaken as debug.
- ${deploydir}/${_targetfile}
- DEPENDS ${target}
+ # on MinGW, release is mistaken as debug for Qt less than 5.14.
+ # For later versions the opposite is true: adding --debug or
+ # --release will fail with "platform plugin not found."
+ $<IF:$<VERSION_LESS:${Qt${QT_VERSION_MAJOR}Core_VERSION},5.14.0>,$<IF:$<CONFIG:Debug>,--debug,--release>,>
+ ${deploydir}/$<TARGET_FILE_NAME:${deploy_TARGET}>
+ DEPENDS ${deploy_TARGET}
)
else()
add_custom_command(
COMMENT "Creating deploy folder"
- OUTPUT ${deploydir}/${_targetfile}
+ OUTPUT ${deploydir}/${deploy_TARGET}
COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir}
- COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_targetfile} ${deploydir}
- DEPENDS ${target}
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${deploy_TARGET}> ${deploydir}
+ DEPENDS ${deploy_TARGET}
)
endif()
+ # need extra rules so we can use generator expressions
+ # (using get_target_property() doesn't know neede values during generation)
+ set(_deploy_deps "")
+ foreach(_deploy_exe_tgt ${deploy_EXECUTABLES})
+ add_custom_command(
+ OUTPUT ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp
+ COMMENT "Copying ${_deploy_exe_tgt} to deploy folder"
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir}
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${_deploy_exe_tgt}> ${deploydir}
+ COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp
+ DEPENDS ${_deploy_exe_tgt}
+ )
+ add_custom_target(deploy_${deploy_TARGET}_${_deploy_exe_tgt}
+ DEPENDS ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp)
+
+ set(_deploy_deps "${_deploy_deps};deploy_${deploy_TARGET}_${_deploy_exe_tgt}")
+ endforeach()
add_custom_command(
COMMENT "Compressing to zip"
- OUTPUT ${CMAKE_BINARY_DIR}/${target}.zip
+ OUTPUT ${CMAKE_BINARY_DIR}/${deploy_TARGET}.zip
WORKING_DIRECTORY ${deploydir}
- COMMAND ${CMAKE_COMMAND} -E tar c ${CMAKE_BINARY_DIR}/${target}.zip
+ COMMAND ${CMAKE_COMMAND} -E tar c ${CMAKE_BINARY_DIR}/${deploy_TARGET}.zip
--format=zip .
- DEPENDS ${deploydir}/${_targetfile}
+ DEPENDS ${deploydir}/${deploy_TARGET} ${_deploy_deps}
)
- add_custom_target(deploy_${target}
- DEPENDS ${CMAKE_BINARY_DIR}/${target}.zip)
- add_dependencies(deploy deploy_${target})
+ add_custom_target(deploy_${deploy_TARGET}
+ DEPENDS ${CMAKE_BINARY_DIR}/${deploy_TARGET}.zip)
+ add_dependencies(deploy deploy_${deploy_TARGET})
endfunction()
endif()
diff --git a/utils/common/deploy-themeeditor.py b/utils/common/deploy-themeeditor.py
deleted file mode 100755
index a85317a426..0000000000
--- a/utils/common/deploy-themeeditor.py
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/python
-# __________ __ ___.
-# Open \______ \ ____ ____ | | _\_ |__ _______ ___
-# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
-# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
-# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
-# \/ \/ \/ \/ \/
-# $Id$
-#
-# Copyright (c) 2010 Dominik Riebeling
-#
-# All files in this archive are subject to the GNU General Public License.
-# See the file COPYING in the source tree root for full license agreement.
-#
-# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
-# KIND, either express or implied.
-#
-
-import deploy
-
-deploy.program = "rbthemeeditor"
-deploy.project = "utils/themeeditor/themeeditor.pro"
-deploy.svnserver = "svn://svn.rockbox.org/rockbox/"
-deploy.svnpaths = \
- ["utils/themeeditor/",
- "lib/skin_parser/",
- "docs/COPYING"]
-deploy.useupx = False
-deploy.bundlecopy = {
- "resources/windowicon.icns" : "Contents/Resources/",
- "Info.plist" : "Contents/"
-}
-deploy.progexe = {
- "win32" : "release/rbthemeeditor.exe",
- "darwin" : "rbthemeeditor.app",
- "linux2" : "rbthemeeditor",
- "linux" : "rbthemeeditor"
-}
-deploy.regreplace = {}
-# OS X 10.6 defaults to gcc 4.2. Building universal binaries that are
-# compatible with 10.4 requires using gcc-4.0.
-deploy.qmakespec = {
- "win32" : "",
- "darwin" : "macx-g++40",
- "linux2" : "",
- "linux" : ""
-}
-deploy.make = {
- "win32" : "mingw32-make",
- "darwin" : "make",
- "linux2" : "make",
- "linux" : "make"
-}
-
-# all files of the program. Will get put into an archive after building
-# (zip on w32, tar.bz2 on Linux). Does not apply on Mac which uses dmg.
-# progexe will get added automatically.
-deploy.programfiles = list()
-deploy.nsisscript = "utils/themeeditor/themeeditor.nsi"
-
-deploy.deploy()
-
diff --git a/utils/common/deploy.py b/utils/common/deploy.py
deleted file mode 100755
index 04eef0b7d5..0000000000
--- a/utils/common/deploy.py
+++ /dev/null
@@ -1,677 +0,0 @@
-#!/usr/bin/python
-# __________ __ ___.
-# Open \______ \ ____ ____ | | _\_ |__ _______ ___
-# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
-# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
-# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
-# \/ \/ \/ \/ \/
-# $Id$
-#
-# Copyright (c) 2009 Dominik Riebeling
-#
-# All files in this archive are subject to the GNU General Public License.
-# See the file COPYING in the source tree root for full license agreement.
-#
-# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
-# KIND, either express or implied.
-#
-#
-# Automate building releases for deployment.
-# Run from any folder to build
-# - trunk
-# - any tag (using the -t option)
-# - any local folder (using the -p option)
-# Will build a binary archive (tar.bz2 / zip) and source archive.
-# The source archive won't be built for local builds. Trunk and
-# tag builds will retrieve the sources directly from svn and build
-# below the systems temporary folder.
-#
-# If the required Qt installation isn't in PATH use --qmake option.
-# Tested on Linux and MinGW / W32
-#
-# requires upx.exe in PATH on Windows.
-#
-
-import re
-import os
-import sys
-import tarfile
-import zipfile
-import shutil
-import subprocess
-import getopt
-import time
-import hashlib
-import tempfile
-from datetime import datetime
-import multiprocessing
-import gitscraper
-
-CPUS = multiprocessing.cpu_count()
-print("Info: %s cores found." % CPUS)
-
-# == Global stuff ==
-# DLL files to ignore when searching for required DLL files.
-SYSTEMDLLS = [
- 'advapi32.dll',
- 'comdlg32.dll',
- 'crypt32.dll',
- 'd3d9.dll',
- 'dwmapi.dll',
- 'dxva2.dll',
- 'evr.dll',
- 'gdi32.dll',
- 'imm32.dll',
- 'imm32.dll',
- 'iphlpapi.dll',
- 'kernel32.dll',
- 'mf.dll',
- 'mfplat.dll',
- 'msvcrt.dll',
- 'msvcrt.dll',
- 'netapi32.dll',
- 'ole32.dll',
- 'oleaut32.dll',
- 'setupapi.dll',
- 'shell32.dll',
- 'user32.dll',
- 'userenv.dll',
- 'uxtheme.dll',
- 'version.dll',
- 'winmm.dll',
- 'winspool.drv',
- 'ws2_32.dll',
- 'wtsapi32.dll'
- ]
-
-gitrepo = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
-
-
-# == Functions ==
-def usage(myself):
- print("Usage: %s [options]" % myself)
- print(" -q, --qmake=<qmake> path to qmake")
- print(" -p, --project=<pro> path to .pro file for building with local tree")
- print(" -t, --tag=<tag> use specified tag from svn")
- print(" -a, --add=<file> add file to build folder before building")
- print(" -s, --source-only only create source archive")
- print(" -b, --binary-only only create binary archive")
- if nsisscript != "":
- print(" -n, --makensis=<file> path to makensis for building Windows setup program.")
- if sys.platform != "darwin":
- print(" -d, --dynamic link dynamically instead of static")
- if sys.platform != "win32":
- print(" -x, --cross= prefix to cross compile for win32")
- print(" -k, --keep-temp keep temporary folder on build failure")
- print(" -h, --help this help")
- print(" If neither a project file nor tag is specified trunk will get downloaded")
- print(" from svn.")
-
-
-def which(executable):
- path = os.environ.get("PATH", "").split(os.pathsep)
- for p in path:
- fullpath = p + "/" + executable
- if os.path.exists(fullpath):
- return fullpath
- print("which: could not find " + executable)
- return ""
-
-
-def getsources(treehash, filelist, dest):
- '''Get the files listed in filelist from svnsrv and put it at dest.'''
- gitscraper.scrape_files(gitrepo, treehash, filelist, dest)
- return 0
-
-
-def getfolderrev(svnsrv):
- '''Get the most recent revision for svnsrv'''
- client = pysvn.Client()
- entries = client.info2(svnsrv, recurse=False)
- return entries[0][1].rev.number
-
-
-def findversion(versionfile):
- '''figure most recent program version from version.h,
- returns version string.'''
- h = open(versionfile, "r")
- c = h.read()
- h.close()
- version = dict()
- for v in ['MAJOR', 'MINOR', 'MICRO']:
- r = re.compile("#define +VERSION_" + v + " +([0-9a-z]+)")
- m = re.search(r, c)
- version[v] = m.group(1)
- return "%s.%s.%s" % (version['MAJOR'], version['MINOR'], version['MICRO'])
-
-
-def findqt(cross=""):
- '''Search for Qt4 installation. Return path to qmake.'''
- print("Searching for Qt")
- bins = [cross + "qmake", cross + "qmake-qt4"]
- for binary in bins:
- try:
- q = which(binary)
- if len(q) > 0:
- result = checkqt(q)
- if not result == "":
- return result
- except:
- print(sys.exc_info()[1])
-
- return ""
-
-
-def checkqt(qmakebin):
- '''Check if given path to qmake exists and is a suitable version.'''
- result = ""
- # check if binary exists
- if not os.path.exists(qmakebin):
- print("Specified qmake path does not exist!")
- return result
- # check version
- output = subprocess.Popen(
- [qmakebin, "-version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- cmdout = output.communicate()
- # don't check the qmake return code here, Qt3 doesn't return 0 on -version.
- for ou in cmdout:
- r = re.compile(b'Qt[^0-9]+([0-9\.]+[a-z]*)')
- m = re.search(r, ou)
- if m is not None:
- print("Qt found: %s" % m.group(1).decode())
- s = re.compile(b'[45]\..*')
- n = re.search(s, m.group(1))
- if n is not None:
- result = qmakebin
- return result
-
-
-def qmake(qmake, projfile, platform=sys.platform, wd=".", static=True, cross=""):
- print("Running qmake in %s..." % wd)
- command = [qmake, "-config", "release", "-config", "noccache"]
- if static == True:
- command.extend(["-config", "-static"])
- # special spec required?
- if len(qmakespec[platform]) > 0:
- command.extend(["-spec", qmakespec[platform]])
- # cross compiling prefix set?
- if len(cross) > 0:
- command.extend(["-config", "cross"])
- command.append(projfile)
- output = subprocess.Popen(command, stdout=subprocess.PIPE, cwd=wd)
- output.communicate()
- if not output.returncode == 0:
- print("qmake returned an error!")
- return -1
- return 0
-
-
-def build(wd=".", platform=sys.platform, cross=""):
- # make
- print("Building ...")
- # use the current platforms make here, cross compiling uses the native make.
- command = [make[sys.platform]]
- if CPUS > 1:
- command.append("-j")
- command.append(str(CPUS))
- output = subprocess.Popen(command, stdout=subprocess.PIPE, cwd=wd)
- while True:
- c = output.stdout.readline()
- sys.stdout.write(".")
- sys.stdout.flush()
- if not output.poll() == None:
- sys.stdout.write("\n")
- sys.stdout.flush()
- if not output.returncode == 0:
- print("Build failed!")
- return -1
- break
- if platform != "darwin":
- # strip. OS X handles this via macdeployqt.
- print("Stripping binary.")
- output = subprocess.Popen([cross + "strip", progexe[platform]], \
- stdout=subprocess.PIPE, cwd=wd)
- output.communicate()
- if not output.returncode == 0:
- print("Stripping failed!")
- return -1
- return 0
-
-
-def upxfile(wd=".", platform=sys.platform):
- # run upx on binary
- print("UPX'ing binary ...")
- output = subprocess.Popen(["upx", progexe[platform]], \
- stdout=subprocess.PIPE, cwd=wd)
- output.communicate()
- if not output.returncode == 0:
- print("UPX'ing failed!")
- return -1
- return 0
-
-
-def runnsis(versionstring, nsis, script, srcfolder):
- # run script through nsis to create installer.
- print("Running NSIS ...")
-
- # Assume the generated installer gets placed in the same folder the nsi
- # script lives in. This seems to be a valid assumption unless the nsi
- # script specifies a path. NSIS expects files relative to source folder so
- # copy progexe. Additional files are injected into the nsis script.
-
- # FIXME: instead of copying binaries around copy the NSI file and inject
- # the correct paths.
- # Only win32 supported as target platform so hard coded.
- b = srcfolder + "/" + os.path.dirname(script) + "/" \
- + os.path.dirname(progexe["win32"])
- if not os.path.exists(b):
- os.mkdir(b)
- shutil.copy(srcfolder + "/" + progexe["win32"], b)
- output = subprocess.Popen([nsis, srcfolder + "/" + script], \
- stdout=subprocess.PIPE)
- output.communicate()
- if not output.returncode == 0:
- print("NSIS failed!")
- return -1
- setupfile = program + "-" + versionstring + "-setup.exe"
- # find output filename in nsis script file
- nsissetup = ""
- for line in open(srcfolder + "/" + script):
- if re.match(r'^[^;]*OutFile\s+', line) != None:
- nsissetup = re.sub(r'^[^;]*OutFile\s+"(.+)"', r'\1', line).rstrip()
- if nsissetup == "":
- print("Could not retrieve output file name!")
- return -1
- shutil.copy(srcfolder + "/" + os.path.dirname(script) + "/" + nsissetup, \
- setupfile)
- return 0
-
-
-def nsisfileinject(nsis, outscript, filelist):
- '''Inject files in filelist into NSIS script file after the File line
- containing the main binary. This assumes that the main binary is present
- in the NSIS script and that all additiona files (dlls etc) to get placed
- into $INSTDIR.'''
- output = open(outscript, "w")
- for line in open(nsis, "r"):
- output.write(line)
- # inject files after the progexe binary.
- # Match the basename only to avoid path mismatches.
- if re.match(r'^\s*File\s*.*' + os.path.basename(progexe["win32"]),
- line, re.IGNORECASE):
- for f in filelist:
- injection = " File /oname=$INSTDIR\\" + os.path.basename(f) \
- + " " + os.path.normcase(f) + "\n"
- output.write(injection)
- output.write(" ; end of injected files\n")
- output.close()
-
-
-def finddlls(program, extrapaths=[], cross=""):
- '''Check program for required DLLs. Find all required DLLs except ignored
- ones and return a list of DLL filenames (including path).'''
- # ask objdump about dependencies.
- output = subprocess.Popen([cross + "objdump", "-x", program], \
- stdout=subprocess.PIPE)
- cmdout = output.communicate()
-
- # create list of used DLLs. Store as lower case as W32 is case-insensitive.
- dlls = []
- for line in cmdout[0].decode().split('\n'):
- if re.match(r'\s*DLL Name', line) != None:
- dll = re.sub(r'^\s*DLL Name:\s+([a-zA-Z_\-0-9\.\+]+).*$', r'\1', line)
- dlls.append(dll.lower())
-
- # find DLLs in extrapaths and PATH environment variable.
- dllpaths = []
- for file in dlls:
- if file in SYSTEMDLLS:
- print("System DLL: " + file)
- continue
- dllpath = ""
- for path in extrapaths:
- if os.path.exists(path + "/" + file):
- dllpath = re.sub(r"\\", r"/", path + "/" + file)
- print(file + ": found at " + dllpath)
- dllpaths.append(dllpath)
- break
- if dllpath == "":
- try:
- dllpath = re.sub(r"\\", r"/", which(file))
- print(file + ": found at " + dllpath)
- dllpaths.append(dllpath)
- except:
- print("MISSING DLL: " + file)
- return dllpaths
-
-
-def zipball(programfiles, versionstring, buildfolder, platform=sys.platform):
- '''package created binary'''
- print("Creating binary zipball.")
- archivebase = program + "-" + versionstring
- outfolder = buildfolder + "/" + archivebase
- archivename = archivebase + ".zip"
- # create output folder
- os.mkdir(outfolder)
- # move program files to output folder
- for f in programfiles:
- if re.match(r'^(/|[a-zA-Z]:)', f) != None:
- shutil.copy(f, outfolder)
- else:
- shutil.copy(buildfolder + "/" + f, outfolder)
- # create zipball from output folder
- zf = zipfile.ZipFile(archivename, mode='w', compression=zipfile.ZIP_DEFLATED)
- for root, dirs, files in os.walk(outfolder):
- for name in files:
- physname = os.path.normpath(os.path.join(root, name))
- filename = os.path.relpath(physname, buildfolder)
- zf.write(physname, filename)
- zf.close()
- # remove output folder
- shutil.rmtree(outfolder)
- return archivename
-
-
-def tarball(programfiles, versionstring, buildfolder):
- '''package created binary'''
- print("Creating binary tarball.")
- archivebase = program + "-" + versionstring
- outfolder = buildfolder + "/" + archivebase
- archivename = archivebase + ".tar.bz2"
- # create output folder
- os.mkdir(outfolder)
- # move program files to output folder
- for f in programfiles:
- shutil.copy(buildfolder + "/" + f, outfolder)
- # create tarball from output folder
- tf = tarfile.open(archivename, mode='w:bz2')
- tf.add(outfolder, archivebase)
- tf.close()
- # remove output folder
- shutil.rmtree(outfolder)
- return archivename
-
-
-def macdeploy(versionstring, buildfolder, platform=sys.platform):
- '''package created binary to dmg'''
- dmgfile = program + "-" + versionstring + ".dmg"
- appbundle = buildfolder + "/" + progexe[platform]
-
- # workaround to Qt issues when building out-of-tree. Copy files into bundle.
- sourcebase = buildfolder + re.sub('[^/]+.pro$', '', project) + "/"
- print(sourcebase)
- for src in bundlecopy:
- shutil.copy(sourcebase + src, appbundle + "/" + bundlecopy[src])
- # end of Qt workaround
-
- output = subprocess.Popen(["macdeployqt", progexe[platform], "-dmg"], \
- stdout=subprocess.PIPE, cwd=buildfolder)
- output.communicate()
- if not output.returncode == 0:
- print("macdeployqt failed!")
- return -1
- # copy dmg to output folder
- shutil.copy(buildfolder + "/" + program + ".dmg", dmgfile)
- return dmgfile
-
-
-def filehashes(filename):
- '''Calculate md5 and sha1 hashes for a given file.'''
- if not os.path.exists(filename):
- return ["", ""]
- m = hashlib.md5()
- s = hashlib.sha1()
- f = open(filename, 'rb')
- while True:
- d = f.read(65536)
- if d == b"":
- break
- m.update(d)
- s.update(d)
- return [m.hexdigest(), s.hexdigest()]
-
-
-def filestats(filename):
- if not os.path.exists(filename):
- return
- st = os.stat(filename)
- print("%s\n%s" % (filename, "-" * len(filename)))
- print("Size: %i bytes" % st.st_size)
- h = filehashes(filename)
- print("md5sum: %s" % h[0])
- print("sha1sum: %s" % h[1])
- print("%s\n" % ("-" * len(filename)))
-
-
-def tempclean(workfolder, nopro):
- if nopro == True:
- print("Cleaning up working folder %s" % workfolder)
- shutil.rmtree(workfolder)
- else:
- print("Project file specified or cleanup disabled!")
- print("Temporary files kept at %s" % workfolder)
-
-
-def deploy():
- startup = time.time()
-
- try:
- opts, args = getopt.getopt(
- sys.argv[1:], "q:p:t:a:n:sbdkx:i:h",
- ["qmake=", "project=", "tag=", "add=", "makensis=", "source-only",
- "binary-only", "dynamic", "keep-temp", "cross=", "buildid=", "help"])
- except getopt.GetoptError as err:
- print(str(err))
- usage(sys.argv[0])
- sys.exit(1)
- qt = ""
- proj = ""
- svnbase = svnserver + "trunk/"
- tag = ""
- addfiles = []
- cleanup = True
- binary = True
- source = True
- keeptemp = False
- makensis = ""
- cross = ""
- buildid = None
- platform = sys.platform
- treehash = gitscraper.get_refs(gitrepo)['refs/remotes/origin/HEAD']
- if sys.platform != "darwin":
- static = True
- else:
- static = False
- for o, a in opts:
- if o in ("-q", "--qmake"):
- qt = a
- if o in ("-p", "--project"):
- proj = a
- cleanup = False
- if o in ("-a", "--add"):
- addfiles.append(a)
- if o in ("-n", "--makensis"):
- makensis = a
- if o in ("-s", "--source-only"):
- binary = False
- if o in ("-b", "--binary-only"):
- source = False
- if o in ("-d", "--dynamic") and sys.platform != "darwin":
- static = False
- if o in ("-k", "--keep-temp"):
- keeptemp = True
- if o in ("-t", "--tree"):
- treehash = a
- if o in ("-x", "--cross") and sys.platform != "win32":
- cross = a
- platform = "win32"
- if o in ("-i", "--buildid"):
- buildid = a
- if o in ("-h", "--help"):
- usage(sys.argv[0])
- sys.exit(0)
-
- if source == False and binary == False:
- print("Building build neither source nor binary means nothing to do. Exiting.")
- sys.exit(1)
-
- print("Building " + progexe[platform] + " for " + platform)
- # search for qmake
- if qt == "":
- qm = findqt(cross)
- else:
- qm = checkqt(qt)
- if qm == "":
- print("ERROR: No suitable Qt installation found.")
- sys.exit(1)
-
- # create working folder. Use current directory if -p option used.
- if proj == "":
- w = tempfile.mkdtemp()
- # make sure the path doesn't contain backslashes to prevent issues
- # later when running on windows.
- workfolder = re.sub(r'\\', '/', w)
- revision = gitscraper.describe_treehash(gitrepo, treehash)
- # try to find a version number from describe output.
- # WARNING: this is broken and just a temporary workaround!
- v = re.findall(b'([\d\.a-f]+)', revision)
- if v:
- if v[-1].decode().find('.') >= 0:
- revision = "v" + v[-1].decode()
- else:
- revision = v[-1].decode()
- if buildid == None:
- versionextra = ""
- else:
- versionextra = "-" + buildid
- sourcefolder = workfolder + "/" + program + "-" + str(revision) + versionextra + "/"
- archivename = program + "-" + str(revision) + versionextra + "-src.tar.bz2"
- ver = str(revision)
- os.mkdir(sourcefolder)
- print("Version: %s" % revision)
- else:
- workfolder = "."
- sourcefolder = "."
- archivename = ""
- # check if project file explicitly given. If yes, don't get sources from svn
- if proj == "":
- proj = sourcefolder + project
- # get sources and pack source tarball
- if getsources(treehash, svnpaths, sourcefolder) != 0:
- tempclean(workfolder, cleanup and not keeptemp)
- sys.exit(1)
-
- # replace version strings.
- print("Updating version information in sources")
- for f in regreplace:
- infile = open(sourcefolder + "/" + f, "r")
- incontents = infile.readlines()
- infile.close()
-
- outfile = open(sourcefolder + "/" + f, "w")
- for line in incontents:
- newline = line
- for r in regreplace[f]:
- # replacements made on the replacement string:
- # %REVISION% is replaced with the revision number
- replacement = re.sub("%REVISION%", str(revision), r[1])
- newline = re.sub(r[0], replacement, newline)
- # %BUILD% is replaced with buildid as passed on the command line
- if buildid != None:
- replacement = re.sub("%BUILDID%", "-" + str(buildid), replacement)
- else:
- replacement = re.sub("%BUILDID%", "", replacement)
- newline = re.sub(r[0], replacement, newline)
- outfile.write(newline)
- outfile.close()
-
- if source == True:
- print("Creating source tarball %s\n" % archivename)
- tf = tarfile.open(archivename, mode='w:bz2')
- tf.add(sourcefolder, os.path.basename(re.subn('/$', '', sourcefolder)[0]))
- tf.close()
- if binary == False:
- shutil.rmtree(workfolder)
- sys.exit(0)
- else:
- # figure version from sources. Need to take path to project file into account.
- versionfile = re.subn('[\w\.]+$', "version.h", proj)[0]
- ver = findversion(versionfile) + "-dev" + datetime.now().strftime('%Y%m%d%H%M%S')
- # append buildid if any.
- if buildid != None:
- ver += "-" + buildid
-
- # check project file
- if not os.path.exists(proj):
- print("ERROR: path to project file wrong.")
- sys.exit(1)
-
- # copy specified (--add) files to working folder
- for f in addfiles:
- shutil.copy(f, sourcefolder)
- buildstart = time.time()
- header = "Building %s %s" % (program, ver)
- print(header)
- print(len(header) * "=")
-
- # build it.
- if not qmake(qm, proj, platform, sourcefolder, static, cross) == 0:
- tempclean(workfolder, cleanup and not keeptemp)
- sys.exit(1)
- if not build(sourcefolder, platform, cross) == 0:
- tempclean(workfolder, cleanup and not keeptemp)
- sys.exit(1)
- buildtime = time.time() - buildstart
- progfiles = programfiles
- progfiles.append(progexe[platform])
- if platform == "win32":
- if useupx == True:
- if not upxfile(sourcefolder, platform) == 0:
- tempclean(workfolder, cleanup and not keeptemp)
- sys.exit(1)
- dllfiles = finddlls(sourcefolder + "/" + progexe[platform], \
- [os.path.dirname(qm)], cross)
- if len(dllfiles) > 0:
- progfiles.extend(dllfiles)
- archive = zipball(progfiles, ver, sourcefolder, platform)
- # only when running native right now.
- if nsisscript != "" and makensis != "":
- nsisfileinject(sourcefolder + "/" + nsisscript, sourcefolder \
- + "/" + nsisscript + ".tmp", dllfiles)
- runnsis(ver, makensis, nsisscript + ".tmp", sourcefolder)
- elif platform == "darwin":
- archive = macdeploy(ver, sourcefolder, platform)
- else:
- if platform in ['linux', 'linux2']:
- for p in progfiles:
- prog = sourcefolder + "/" + p
- output = subprocess.Popen(
- ["file", prog], stdout=subprocess.PIPE)
- res = output.communicate()
- if re.findall("ELF 64-bit", res[0]):
- ver += "-64bit"
- break
-
- archive = tarball(progfiles, ver, sourcefolder)
-
- # remove temporary files
- tempclean(workfolder, cleanup)
-
- # display summary
- headline = "Build Summary for %s" % program
- print("\n%s\n%s" % (headline, "=" * len(headline)))
- if archivename != "":
- filestats(archivename)
- filestats(archive)
- duration = time.time() - startup
- durmins = (int)(duration / 60)
- dursecs = (int)(duration % 60)
- buildmins = (int)(buildtime / 60)
- buildsecs = (int)(buildtime % 60)
- print("Overall time %smin %ssec, building took %smin %ssec." % \
- (durmins, dursecs, buildmins, buildsecs))
-
-
-if __name__ == "__main__":
- print("You cannot run this module directly!")
- print("Set required environment and call deploy().")
diff --git a/utils/common/gitscraper.py b/utils/common/gitscraper.py
index 5b3b316115..8d162155d9 100755
--- a/utils/common/gitscraper.py
+++ b/utils/common/gitscraper.py
@@ -142,6 +142,23 @@ def get_object(repo, blob, destfile):
return True
+def parse_rev(repo, hash):
+ '''Retrieve output of git rev-parse for a given hash.
+ @param repo Path to repository root.
+ @param hash Hash identifying the tree / commit to describe.
+ @return Description string.
+ '''
+ output = subprocess.Popen(
+ ["git", "rev-parse", "--verify", "--short=10", hash],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=repo)
+ cmdout = output.communicate()
+ if len(cmdout[1]) > 0:
+ print("An error occured!\n")
+ print(cmdout[1])
+ return ""
+ return cmdout[0].decode().rstrip()
+
+
def describe_treehash(repo, treehash):
'''Retrieve output of git-describe for a given hash.
@param repo Path to repository root.
diff --git a/utils/common/deploy-rbutil.py b/utils/common/tarball-rbutil.py
index 0c98575843..ccc413ca59 100755
--- a/utils/common/deploy-rbutil.py
+++ b/utils/common/tarball-rbutil.py
@@ -1,13 +1,12 @@
-#!/usr/bin/python
+#!/usr/bin/python3
# __________ __ ___.
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
-# $Id$
#
-# Copyright (c) 2010 Dominik Riebeling
+# Copyright (c) 2022 Dominik Riebeling
#
# All files in this archive are subject to the GNU General Public License.
# See the file COPYING in the source tree root for full license agreement.
@@ -16,13 +15,44 @@
# KIND, either express or implied.
#
-import deploy
+import os
+import sys
+import gitscraper
-deploy.program = "RockboxUtility"
-deploy.project = "rbutil/rbutilqt/rbutilqt.pro"
-deploy.svnserver = "svn://svn.rockbox.org/rockbox/"
-deploy.svnpaths = \
- ["rbutil/",
+if len(sys.argv) < 2:
+ print("Usage: %s <version|hash>" % sys.argv[0])
+ sys.exit()
+
+repository = os.path.abspath(
+ os.path.join(os.path.dirname(os.path.abspath(__file__)), "../.."))
+
+if '.' in sys.argv[1]:
+ version = sys.argv[1]
+ basename = f"RockboxUtility-v{version}-src"
+ ref = f"refs/tags/rbutil_{version}"
+ refs = gitscraper.get_refs(repository)
+ if ref in refs:
+ tree = refs[ref]
+ else:
+ print("Could not find hash for version!")
+ sys.exit()
+else:
+ tree = gitscraper.parse_rev(repository, sys.argv[1])
+ basename = f"RockboxUtility-{tree}"
+
+filelist = ["utils/rbutilqt",
+ "utils/ipodpatcher",
+ "utils/sansapatcher",
+ "utils/mkamsboot",
+ "utils/chinachippatcher",
+ "utils/mks5lboot",
+ "utils/mkmpioboot",
+ "utils/mkimxboot",
+ "utils/mktccboot",
+ "utils/bspatch",
+ "utils/bzip2",
+ "utils/cmake",
+ "utils/CMakeLists.txt",
"tools/ucl",
"tools/rbspeex",
"utils/imxtools",
@@ -48,41 +78,8 @@ deploy.svnpaths = \
"tools/voicefont.h",
"tools/wavtrim.c",
"tools/sapi_voice.vbs"]
-deploy.useupx = False
-deploy.bundlecopy = {
- "icons/rbutilqt.icns" : "Contents/Resources/",
- "Info.plist" : "Contents/"
-}
-deploy.progexe = {
- "win32" : "release/RockboxUtility.exe",
- "darwin" : "RockboxUtility.app",
- "linux2" : "RockboxUtility",
- "linux" : "RockboxUtility"
-}
-deploy.regreplace = {
- "rbutil/rbutilqt/version.h" : [["\$Rev\$", "%REVISION%"],
- ["(^#define BUILDID).*", "\\1 \"%BUILDID%\""]],
- "rbutil/rbutilqt/Info.plist" : [["\$Rev\$", "%REVISION%"]],
-}
-# OS X 10.6 defaults to gcc 4.2. Building universal binaries that are
-# compatible with 10.4 requires using gcc-4.0.
-deploy.qmakespec = {
- "win32" : "",
- "darwin" : "macx-g++40",
- "linux2" : "",
- "linux" : ""
-}
-deploy.make = {
- "win32" : "mingw32-make",
- "darwin" : "make",
- "linux2" : "make",
- "linux" : "make"
-}
-# all files of the program. Will get put into an archive after building
-# (zip on w32, tar.bz2 on Linux). Does not apply on Mac which uses dmg.
-# progexe will get added automatically.
-deploy.programfiles = list()
-deploy.nsisscript = ""
+print(f"Getting git revision {tree}")
+gitscraper.archive_files(repository, tree, filelist, basename, archive="tbz")
-deploy.deploy()
+print(f"Created {basename}.tar.bz2.")
diff --git a/utils/ipodpatcher/ipodio-posix.c b/utils/ipodpatcher/ipodio-posix.c
index 9b386d994f..dc856a2e0d 100644
--- a/utils/ipodpatcher/ipodio-posix.c
+++ b/utils/ipodpatcher/ipodio-posix.c
@@ -355,6 +355,7 @@ int ipod_reopen_rw(struct ipod_t* ipod)
int ipod_close(struct ipod_t* ipod)
{
close(ipod->dh);
+ ipod->dh = -1;
return 0;
}
diff --git a/utils/ipodpatcher/ipodio-win32.c b/utils/ipodpatcher/ipodio-win32.c
index cea218774a..2c52a64658 100644
--- a/utils/ipodpatcher/ipodio-win32.c
+++ b/utils/ipodpatcher/ipodio-win32.c
@@ -155,6 +155,7 @@ int ipod_close(struct ipod_t* ipod)
{
unlock_volume(ipod->dh);
CloseHandle(ipod->dh);
+ ipod->dh = INVALID_HANDLE_VALUE;
return 0;
}
diff --git a/utils/ipodpatcher/ipodpatcher-aupd.c b/utils/ipodpatcher/ipodpatcher-aupd.c
new file mode 100644
index 0000000000..69b027284c
--- /dev/null
+++ b/utils/ipodpatcher/ipodpatcher-aupd.c
@@ -0,0 +1,398 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006-2007 Dave Chapman
+ *
+ * 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 software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <inttypes.h>
+#include <stdbool.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include "ipodpatcher.h"
+
+#include "arc4.h"
+
+static inline int le2int(unsigned char* buf)
+{
+ int32_t res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
+
+ return res;
+}
+
+static inline void int2le(unsigned int val, unsigned char* addr)
+{
+ addr[0] = val & 0xFF;
+ addr[1] = (val >> 8) & 0xff;
+ addr[2] = (val >> 16) & 0xff;
+ addr[3] = (val >> 24) & 0xff;
+}
+
+static inline uint32_t getuint32le(unsigned char* buf)
+{
+ int32_t res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
+
+ return res;
+}
+
+/* testMarker and GetSecurityBlockKey based on code from BadBlocks and
+ Kingstone, posted at http://ipodlinux.org/Flash_Decryption
+
+*/
+
+static bool testMarker(int marker)
+{
+ int mask, decrypt, temp1, temp2;
+
+ mask = (marker&0xff)|((marker&0xff)<<8)|((marker&0xff)<<16)|((marker&0xff)<<24);
+ decrypt = marker ^ mask;
+ temp1=(int)((unsigned int)decrypt>>24);
+ temp2=decrypt<<8;
+
+ if (temp1==0)
+ return false;
+
+ temp2=(int)((unsigned int)temp2>>24);
+ decrypt=decrypt<<16;
+ decrypt=(int)((unsigned int)decrypt>>24);
+
+ if ((temp1 < temp2) && (temp2 < decrypt))
+ {
+ temp1 = temp1 & 0xf;
+ temp2 = temp2 & 0xf;
+ decrypt = decrypt & 0xf;
+
+ if ((temp1 > temp2) && (temp2 > decrypt) && (decrypt != 0))
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+static int GetSecurityBlockKey(unsigned char *data, unsigned char* this_key)
+{
+ int constant = 0x54c3a298;
+ int key=0;
+ int nkeys = 0;
+ int aMarker=0;
+ int pos=0;
+ int c, count;
+ int temp1;
+ static const int offset[8]={0x5,0x25,0x6f,0x69,0x15,0x4d,0x40,0x34};
+
+ for (c = 0; c < 8; c++)
+ {
+ pos = offset[c]*4;
+ aMarker = getuint32le(data + pos);
+
+ if (testMarker(aMarker))
+ {
+ if (c<7)
+ pos =(offset[c+1]*4)+4;
+ else
+ pos =(offset[0]*4)+4;
+
+ key=0;
+
+ temp1=aMarker;
+
+ for (count=0;count<2;count++){
+ int word = getuint32le(data + pos);
+ temp1 = aMarker;
+ temp1 = temp1^word;
+ temp1 = temp1^constant;
+ key = temp1;
+ pos = pos+4;
+ }
+ int r1=0x6f;
+ int r2=0;
+ int r12;
+ int r14;
+ unsigned int r_tmp;
+
+ for (count=2;count<128;count=count+2){
+ r2=getuint32le(data+count*4);
+ r12=getuint32le(data+(count*4)+4);
+ r_tmp=(unsigned int)r12>>16;
+ r14=r2 | ((int)r_tmp);
+ r2=r2&0xffff;
+ r2=r2 | r12;
+ r1=r1^r14;
+ r1=r1+r2;
+ }
+ key=key^r1;
+
+ // Invert key, little endian
+ this_key[0] = key & 0xff;
+ this_key[1] = (key >> 8) & 0xff;
+ this_key[2] = (key >> 16) & 0xff;
+ this_key[3] = (key >> 24) & 0xff;
+ nkeys++;
+ }
+ }
+ return nkeys;
+}
+
+static int find_key(struct ipod_t* ipod, int aupd, unsigned char* key)
+{
+ int n;
+
+ /* Firstly read the security block and find the RC4 key. This is
+ in the sector preceeding the AUPD image. */
+
+ if(ipod->sectorbuf == NULL) {
+ fprintf(stderr,"[ERR] Buffer not initialized.");
+ return -1;
+ }
+ fprintf(stderr, "[INFO] Reading security block at offset 0x%08x\n",ipod->ipod_directory[aupd].devOffset-ipod->sector_size);
+ if (ipod_seek(ipod, ipod->fwoffset+ipod->ipod_directory[aupd].devOffset-ipod->sector_size) < 0) {
+ return -1;
+ }
+
+ if ((n = ipod_read(ipod, 512)) < 0) {
+ return -1;
+ }
+
+ n = GetSecurityBlockKey(ipod->sectorbuf, key);
+
+ if (n != 1)
+ {
+ fprintf(stderr, "[ERR] %d keys found in security block, can not continue\n",n);
+ return -1;
+ }
+
+ return 0;
+}
+
+int read_aupd(struct ipod_t* ipod, char* filename)
+{
+ int length;
+ int i;
+ int outfile;
+ int n;
+ int aupd;
+ struct rc4_key_t rc4;
+ unsigned char key[4];
+ unsigned long chksum=0;
+
+ if(ipod->sectorbuf == NULL) {
+ fprintf(stderr,"[ERR] Buffer not initialized.");
+ return -1;
+ }
+ aupd = 0;
+ while ((aupd < ipod->nimages) && (ipod->ipod_directory[aupd].ftype != FTYPE_AUPD))
+ {
+ aupd++;
+ }
+
+ if (aupd == ipod->nimages)
+ {
+ fprintf(stderr,"[ERR] No AUPD image in firmware partition.\n");
+ return -1;
+ }
+
+ length = ipod->ipod_directory[aupd].len;
+
+ fprintf(stderr,"[INFO] Reading firmware (%d bytes)\n",length);
+
+ if (find_key(ipod, aupd, key) < 0)
+ {
+ return -1;
+ }
+
+ fprintf(stderr, "[INFO] Decrypting AUPD image with key %02x%02x%02x%02x\n",key[0],key[1],key[2],key[3]);
+
+ if (ipod_seek(ipod, ipod->fwoffset+ipod->ipod_directory[aupd].devOffset) < 0) {
+ return -1;
+ }
+
+ i = (length+ipod->sector_size-1) & ~(ipod->sector_size-1);
+
+ if ((n = ipod_read(ipod,i)) < 0) {
+ return -1;
+ }
+
+ if (n < i) {
+ fprintf(stderr,"[ERR] Short read - requested %d bytes, received %d\n",
+ i,n);
+ return -1;
+ }
+
+ /* Perform the decryption - this is standard (A)RC4 */
+ matrixArc4Init(&rc4, key, 4);
+ matrixArc4(&rc4, ipod->sectorbuf, ipod->sectorbuf, length);
+
+ chksum = 0;
+ for (i = 0; i < (int)length; i++) {
+ /* add 8 unsigned bits but keep a 32 bit sum */
+ chksum += ipod->sectorbuf[i];
+ }
+
+ if (chksum != ipod->ipod_directory[aupd].chksum)
+ {
+ fprintf(stderr,"[ERR] Decryption failed - checksum error\n");
+ return -1;
+ }
+ fprintf(stderr,"[INFO] Decrypted OK (checksum matches header)\n");
+
+ outfile = open(filename,O_CREAT|O_TRUNC|O_WRONLY|O_BINARY,0666);
+ if (outfile < 0) {
+ fprintf(stderr,"[ERR] Couldn't open file %s\n",filename);
+ return -1;
+ }
+
+ n = write(outfile,ipod->sectorbuf,length);
+ if (n != length) {
+ fprintf(stderr,"[ERR] Write error - %d\n",n);
+ }
+ close(outfile);
+
+ return 0;
+}
+
+int write_aupd(struct ipod_t* ipod, char* filename)
+{
+ unsigned int length;
+ int i;
+ int x;
+ int n;
+ int infile;
+ int newsize;
+ int aupd;
+ unsigned long chksum=0;
+ struct rc4_key_t rc4;
+ unsigned char key[4];
+
+ if(ipod->sectorbuf == NULL) {
+ fprintf(stderr,"[ERR] Buffer not initialized.");
+ return -1;
+ }
+ /* First check that the input file is the correct type for this ipod. */
+ infile=open(filename,O_RDONLY);
+ if (infile < 0) {
+ fprintf(stderr,"[ERR] Couldn't open input file %s\n",filename);
+ return -1;
+ }
+
+ length = filesize(infile);
+ newsize=(length+ipod->sector_size-1)&~(ipod->sector_size-1);
+
+ fprintf(stderr,"[INFO] Padding input file from 0x%08x to 0x%08x bytes\n",
+ length,newsize);
+
+ if (newsize > BUFFER_SIZE) {
+ fprintf(stderr,"[ERR] Input file too big for buffer\n");
+ if (infile >= 0) close(infile);
+ return -1;
+ }
+
+ /* Find aupd image number */
+ aupd = 0;
+ while ((aupd < ipod->nimages) && (ipod->ipod_directory[aupd].ftype != FTYPE_AUPD))
+ {
+ aupd++;
+ }
+
+ if (aupd == ipod->nimages)
+ {
+ fprintf(stderr,"[ERR] No AUPD image in firmware partition.\n");
+ return -1;
+ }
+
+ if (length != ipod->ipod_directory[aupd].len)
+ {
+ fprintf(stderr,"[ERR] AUPD image (%d bytes) differs in size to %s (%d bytes).\n",
+ ipod->ipod_directory[aupd].len, filename, length);
+ return -1;
+ }
+
+ if (find_key(ipod, aupd, key) < 0)
+ {
+ return -1;
+ }
+
+ fprintf(stderr, "[INFO] Encrypting AUPD image with key %02x%02x%02x%02x\n",key[0],key[1],key[2],key[3]);
+
+ /* We now know we have enough space, so write it. */
+
+ fprintf(stderr,"[INFO] Reading input file...\n");
+ n = read(infile,ipod->sectorbuf,length);
+ if (n < 0) {
+ fprintf(stderr,"[ERR] Couldn't read input file\n");
+ close(infile);
+ return -1;
+ }
+ close(infile);
+
+ /* Pad the data with zeros */
+ memset(ipod->sectorbuf+length,0,newsize-length);
+
+ /* Calculate the new checksum (before we encrypt) */
+ chksum = 0;
+ for (i = 0; i < (int)length; i++) {
+ /* add 8 unsigned bits but keep a 32 bit sum */
+ chksum += ipod->sectorbuf[i];
+ }
+
+ /* Perform the encryption - this is standard (A)RC4 */
+ matrixArc4Init(&rc4, key, 4);
+ matrixArc4(&rc4, ipod->sectorbuf, ipod->sectorbuf, length);
+
+ if (ipod_seek(ipod, ipod->fwoffset+ipod->ipod_directory[aupd].devOffset) < 0) {
+ fprintf(stderr,"[ERR] Seek failed\n");
+ return -1;
+ }
+
+ if ((n = ipod_write(ipod,newsize)) < 0) {
+ perror("[ERR] Write failed\n");
+ return -1;
+ }
+
+ if (n < newsize) {
+ fprintf(stderr,"[ERR] Short write - requested %d bytes, received %d\n"
+ ,newsize,n);
+ return -1;
+ }
+ fprintf(stderr,"[INFO] Wrote %d bytes to firmware partition\n",n);
+
+ x = ipod->diroffset % ipod->sector_size;
+
+ /* Read directory */
+ if (ipod_seek(ipod, ipod->start + ipod->diroffset - x) < 0) { return -1; }
+
+ n=ipod_read(ipod, ipod->sector_size);
+ if (n < 0) { return -1; }
+
+ /* Update checksum */
+ fprintf(stderr,"[INFO] Updating checksum to 0x%08x (was 0x%08x)\n",(unsigned int)chksum,le2int(ipod->sectorbuf + x + aupd*40 + 28));
+ int2le(chksum,ipod->sectorbuf+x+aupd*40+28);
+
+ /* Write directory */
+ if (ipod_seek(ipod, ipod->start + ipod->diroffset - x) < 0) { return -1; }
+ n=ipod_write(ipod, ipod->sector_size);
+ if (n < 0) { return -1; }
+
+ return 0;
+}
+
diff --git a/utils/ipodpatcher/ipodpatcher.c b/utils/ipodpatcher/ipodpatcher.c
index e047e52abe..e7c0cc3358 100644
--- a/utils/ipodpatcher/ipodpatcher.c
+++ b/utils/ipodpatcher/ipodpatcher.c
@@ -45,10 +45,6 @@
#include "ipodnano2g.h"
#endif
-#ifndef RBUTIL
-#include "arc4.h"
-#endif
-
int ipod_verbose = 0;
@@ -1997,354 +1993,3 @@ void ipod_get_ramsize(struct ipod_t* ipod)
}
}
-#ifndef RBUTIL
-
-static inline uint32_t getuint32le(unsigned char* buf)
-{
- int32_t res = (buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0];
-
- return res;
-}
-
-/* testMarker and GetSecurityBlockKey based on code from BadBlocks and
- Kingstone, posted at http://ipodlinux.org/Flash_Decryption
-
-*/
-
-static bool testMarker(int marker)
-{
- int mask, decrypt, temp1, temp2;
-
- mask = (marker&0xff)|((marker&0xff)<<8)|((marker&0xff)<<16)|((marker&0xff)<<24);
- decrypt = marker ^ mask;
- temp1=(int)((unsigned int)decrypt>>24);
- temp2=decrypt<<8;
-
- if (temp1==0)
- return false;
-
- temp2=(int)((unsigned int)temp2>>24);
- decrypt=decrypt<<16;
- decrypt=(int)((unsigned int)decrypt>>24);
-
- if ((temp1 < temp2) && (temp2 < decrypt))
- {
- temp1 = temp1 & 0xf;
- temp2 = temp2 & 0xf;
- decrypt = decrypt & 0xf;
-
- if ((temp1 > temp2) && (temp2 > decrypt) && (decrypt != 0))
- {
- return true;
- }
- }
- return false;
-}
-
-static int GetSecurityBlockKey(unsigned char *data, unsigned char* this_key)
-{
- int constant = 0x54c3a298;
- int key=0;
- int nkeys = 0;
- int aMarker=0;
- int pos=0;
- int c, count;
- int temp1;
- static const int offset[8]={0x5,0x25,0x6f,0x69,0x15,0x4d,0x40,0x34};
-
- for (c = 0; c < 8; c++)
- {
- pos = offset[c]*4;
- aMarker = getuint32le(data + pos);
-
- if (testMarker(aMarker))
- {
- if (c<7)
- pos =(offset[c+1]*4)+4;
- else
- pos =(offset[0]*4)+4;
-
- key=0;
-
- temp1=aMarker;
-
- for (count=0;count<2;count++){
- int word = getuint32le(data + pos);
- temp1 = aMarker;
- temp1 = temp1^word;
- temp1 = temp1^constant;
- key = temp1;
- pos = pos+4;
- }
- int r1=0x6f;
- int r2=0;
- int r12;
- int r14;
- unsigned int r_tmp;
-
- for (count=2;count<128;count=count+2){
- r2=getuint32le(data+count*4);
- r12=getuint32le(data+(count*4)+4);
- r_tmp=(unsigned int)r12>>16;
- r14=r2 | ((int)r_tmp);
- r2=r2&0xffff;
- r2=r2 | r12;
- r1=r1^r14;
- r1=r1+r2;
- }
- key=key^r1;
-
- // Invert key, little endian
- this_key[0] = key & 0xff;
- this_key[1] = (key >> 8) & 0xff;
- this_key[2] = (key >> 16) & 0xff;
- this_key[3] = (key >> 24) & 0xff;
- nkeys++;
- }
- }
- return nkeys;
-}
-
-static int find_key(struct ipod_t* ipod, int aupd, unsigned char* key)
-{
- int n;
-
- /* Firstly read the security block and find the RC4 key. This is
- in the sector preceeding the AUPD image. */
-
- if(ipod->sectorbuf == NULL) {
- fprintf(stderr,"[ERR] Buffer not initialized.");
- return -1;
- }
- fprintf(stderr, "[INFO] Reading security block at offset 0x%08x\n",ipod->ipod_directory[aupd].devOffset-ipod->sector_size);
- if (ipod_seek(ipod, ipod->fwoffset+ipod->ipod_directory[aupd].devOffset-ipod->sector_size) < 0) {
- return -1;
- }
-
- if ((n = ipod_read(ipod, 512)) < 0) {
- return -1;
- }
-
- n = GetSecurityBlockKey(ipod->sectorbuf, key);
-
- if (n != 1)
- {
- fprintf(stderr, "[ERR] %d keys found in security block, can not continue\n",n);
- return -1;
- }
-
- return 0;
-}
-
-int read_aupd(struct ipod_t* ipod, char* filename)
-{
- int length;
- int i;
- int outfile;
- int n;
- int aupd;
- struct rc4_key_t rc4;
- unsigned char key[4];
- unsigned long chksum=0;
-
- if(ipod->sectorbuf == NULL) {
- fprintf(stderr,"[ERR] Buffer not initialized.");
- return -1;
- }
- aupd = 0;
- while ((aupd < ipod->nimages) && (ipod->ipod_directory[aupd].ftype != FTYPE_AUPD))
- {
- aupd++;
- }
-
- if (aupd == ipod->nimages)
- {
- fprintf(stderr,"[ERR] No AUPD image in firmware partition.\n");
- return -1;
- }
-
- length = ipod->ipod_directory[aupd].len;
-
- fprintf(stderr,"[INFO] Reading firmware (%d bytes)\n",length);
-
- if (find_key(ipod, aupd, key) < 0)
- {
- return -1;
- }
-
- fprintf(stderr, "[INFO] Decrypting AUPD image with key %02x%02x%02x%02x\n",key[0],key[1],key[2],key[3]);
-
- if (ipod_seek(ipod, ipod->fwoffset+ipod->ipod_directory[aupd].devOffset) < 0) {
- return -1;
- }
-
- i = (length+ipod->sector_size-1) & ~(ipod->sector_size-1);
-
- if ((n = ipod_read(ipod,i)) < 0) {
- return -1;
- }
-
- if (n < i) {
- fprintf(stderr,"[ERR] Short read - requested %d bytes, received %d\n",
- i,n);
- return -1;
- }
-
- /* Perform the decryption - this is standard (A)RC4 */
- matrixArc4Init(&rc4, key, 4);
- matrixArc4(&rc4, ipod->sectorbuf, ipod->sectorbuf, length);
-
- chksum = 0;
- for (i = 0; i < (int)length; i++) {
- /* add 8 unsigned bits but keep a 32 bit sum */
- chksum += ipod->sectorbuf[i];
- }
-
- if (chksum != ipod->ipod_directory[aupd].chksum)
- {
- fprintf(stderr,"[ERR] Decryption failed - checksum error\n");
- return -1;
- }
- fprintf(stderr,"[INFO] Decrypted OK (checksum matches header)\n");
-
- outfile = open(filename,O_CREAT|O_TRUNC|O_WRONLY|O_BINARY,0666);
- if (outfile < 0) {
- fprintf(stderr,"[ERR] Couldn't open file %s\n",filename);
- return -1;
- }
-
- n = write(outfile,ipod->sectorbuf,length);
- if (n != length) {
- fprintf(stderr,"[ERR] Write error - %d\n",n);
- }
- close(outfile);
-
- return 0;
-}
-
-int write_aupd(struct ipod_t* ipod, char* filename)
-{
- unsigned int length;
- int i;
- int x;
- int n;
- int infile;
- int newsize;
- int aupd;
- unsigned long chksum=0;
- struct rc4_key_t rc4;
- unsigned char key[4];
-
- if(ipod->sectorbuf == NULL) {
- fprintf(stderr,"[ERR] Buffer not initialized.");
- return -1;
- }
- /* First check that the input file is the correct type for this ipod. */
- infile=open(filename,O_RDONLY);
- if (infile < 0) {
- fprintf(stderr,"[ERR] Couldn't open input file %s\n",filename);
- return -1;
- }
-
- length = filesize(infile);
- newsize=(length+ipod->sector_size-1)&~(ipod->sector_size-1);
-
- fprintf(stderr,"[INFO] Padding input file from 0x%08x to 0x%08x bytes\n",
- length,newsize);
-
- if (newsize > BUFFER_SIZE) {
- fprintf(stderr,"[ERR] Input file too big for buffer\n");
- if (infile >= 0) close(infile);
- return -1;
- }
-
- /* Find aupd image number */
- aupd = 0;
- while ((aupd < ipod->nimages) && (ipod->ipod_directory[aupd].ftype != FTYPE_AUPD))
- {
- aupd++;
- }
-
- if (aupd == ipod->nimages)
- {
- fprintf(stderr,"[ERR] No AUPD image in firmware partition.\n");
- return -1;
- }
-
- if (length != ipod->ipod_directory[aupd].len)
- {
- fprintf(stderr,"[ERR] AUPD image (%d bytes) differs in size to %s (%d bytes).\n",
- ipod->ipod_directory[aupd].len, filename, length);
- return -1;
- }
-
- if (find_key(ipod, aupd, key) < 0)
- {
- return -1;
- }
-
- fprintf(stderr, "[INFO] Encrypting AUPD image with key %02x%02x%02x%02x\n",key[0],key[1],key[2],key[3]);
-
- /* We now know we have enough space, so write it. */
-
- fprintf(stderr,"[INFO] Reading input file...\n");
- n = read(infile,ipod->sectorbuf,length);
- if (n < 0) {
- fprintf(stderr,"[ERR] Couldn't read input file\n");
- close(infile);
- return -1;
- }
- close(infile);
-
- /* Pad the data with zeros */
- memset(ipod->sectorbuf+length,0,newsize-length);
-
- /* Calculate the new checksum (before we encrypt) */
- chksum = 0;
- for (i = 0; i < (int)length; i++) {
- /* add 8 unsigned bits but keep a 32 bit sum */
- chksum += ipod->sectorbuf[i];
- }
-
- /* Perform the encryption - this is standard (A)RC4 */
- matrixArc4Init(&rc4, key, 4);
- matrixArc4(&rc4, ipod->sectorbuf, ipod->sectorbuf, length);
-
- if (ipod_seek(ipod, ipod->fwoffset+ipod->ipod_directory[aupd].devOffset) < 0) {
- fprintf(stderr,"[ERR] Seek failed\n");
- return -1;
- }
-
- if ((n = ipod_write(ipod,newsize)) < 0) {
- perror("[ERR] Write failed\n");
- return -1;
- }
-
- if (n < newsize) {
- fprintf(stderr,"[ERR] Short write - requested %d bytes, received %d\n"
- ,newsize,n);
- return -1;
- }
- fprintf(stderr,"[INFO] Wrote %d bytes to firmware partition\n",n);
-
- x = ipod->diroffset % ipod->sector_size;
-
- /* Read directory */
- if (ipod_seek(ipod, ipod->start + ipod->diroffset - x) < 0) { return -1; }
-
- n=ipod_read(ipod, ipod->sector_size);
- if (n < 0) { return -1; }
-
- /* Update checksum */
- fprintf(stderr,"[INFO] Updating checksum to 0x%08x (was 0x%08x)\n",(unsigned int)chksum,le2int(ipod->sectorbuf + x + aupd*40 + 28));
- int2le(chksum,ipod->sectorbuf+x+aupd*40+28);
-
- /* Write directory */
- if (ipod_seek(ipod, ipod->start + ipod->diroffset - x) < 0) { return -1; }
- n=ipod_write(ipod, ipod->sector_size);
- if (n < 0) { return -1; }
-
- return 0;
-}
-
-#endif
diff --git a/utils/jztool/src/x1000.c b/utils/jztool/src/x1000.c
index f59727a2ca..e4bd466562 100644
--- a/utils/jztool/src/x1000.c
+++ b/utils/jztool/src/x1000.c
@@ -25,19 +25,72 @@
#include <stdbool.h>
#include <string.h>
-/* TODO: these functions could be refactored to be CPU-agnostic */
+#define X1000_TCSM_BASE 0xf4000000
+
+#define X1000_SPL_LOAD_ADDR (X1000_TCSM_BASE + 0x1000)
+#define X1000_SPL_EXEC_ADDR (X1000_TCSM_BASE + 0x1800)
+
+#define X1000_STANDARD_DRAM_BASE 0x80004000
+
+#define HDR_BEGIN 128 /* header must begin within this many bytes */
+#define HDR_LEN 256 /* header length cannot exceed this */
+
+#define MIN(a,b) ((a) < (b) ? (a) : (b))
+
+/* search for header value, label must be a 4-character string.
+ * Returns the found value or 0 if the label wasn't found. */
+static uint32_t search_header(const unsigned char* source, size_t length,
+ const char* label)
+{
+ size_t search_len = MIN(length, HDR_BEGIN);
+ if(search_len < 8)
+ return 0;
+ search_len -= 7;
+
+ /* find the beginning marker */
+ size_t i;
+ for(i = 8; i < search_len; i += 4)
+ if(!memcmp(&source[i], "BEGINHDR", 8))
+ break;
+ if(i >= search_len)
+ return 0;
+ i += 8;
+
+ /* search within the header */
+ search_len = MIN(length, i + HDR_LEN) - 7;
+ for(; i < search_len; i += 8) {
+ if(!memcmp(&source[i], "ENDH", 4)) {
+ break;
+ } else if(!memcmp(&source[i], label, 4)) {
+ i += 4;
+ /* read little-endian value */
+ uint32_t ret = source[i];
+ ret |= source[i+1] << 8;
+ ret |= source[i+2] << 16;
+ ret |= source[i+3] << 24;
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
static int run_stage1(jz_usbdev* dev, jz_buffer* buf)
{
- int rc = jz_usb_send(dev, 0xf4001000, buf->size, buf->data);
+ int rc = jz_usb_send(dev, X1000_SPL_LOAD_ADDR, buf->size, buf->data);
if(rc < 0)
return rc;
- return jz_usb_start1(dev, 0xf4001800);
+ return jz_usb_start1(dev, X1000_SPL_EXEC_ADDR);
}
static int run_stage2(jz_usbdev* dev, jz_buffer* buf)
{
- int rc = jz_usb_send(dev, 0x80004000, buf->size, buf->data);
+ uint32_t load_addr = search_header(buf->data, buf->size, "LOAD");
+ if(!load_addr)
+ load_addr = X1000_STANDARD_DRAM_BASE;
+
+ int rc = jz_usb_send(dev, load_addr, buf->size, buf->data);
if(rc < 0)
return rc;
@@ -45,11 +98,16 @@ static int run_stage2(jz_usbdev* dev, jz_buffer* buf)
if(rc < 0)
return rc;
- return jz_usb_start2(dev, 0x80004000);
+ return jz_usb_start2(dev, load_addr);
}
+enum {
+ F_DECOMPRESS = 0x01,
+ F_OPTIONAL = 0x02,
+};
+
static int get_file(jz_context* jz, mtar_t* tar, const char* file,
- bool decompress, jz_buffer** buf)
+ unsigned int flags, jz_buffer** buf)
{
jz_buffer* buffer = NULL;
const mtar_header_t* h;
@@ -57,8 +115,9 @@ static int get_file(jz_context* jz, mtar_t* tar, const char* file,
rc = mtar_find(tar, file);
if(rc != MTAR_ESUCCESS) {
- jz_log(jz, JZ_LOG_ERROR, "can't find %s in boot file, tar error %d", file, rc);
- return JZ_ERR_BAD_FILE_FORMAT;
+ if(!(flags & F_OPTIONAL))
+ jz_log(jz, JZ_LOG_ERROR, "can't find %s in boot file, tar error %d", file, rc);
+ return JZ_ERR_OPEN_FILE;
}
h = mtar_get_header(tar);
@@ -73,7 +132,7 @@ static int get_file(jz_context* jz, mtar_t* tar, const char* file,
return JZ_ERR_BAD_FILE_FORMAT;
}
- if(decompress) {
+ if(flags & F_DECOMPRESS) {
uint32_t dst_len;
jz_buffer* nbuf = jz_ucl_unpack(buffer->data, buffer->size, &dst_len);
jz_buffer_free(buffer);
@@ -139,9 +198,27 @@ int jz_x1000_boot(jz_usbdev* dev, jz_device_type type, const char* filename)
if(rc != JZ_SUCCESS)
goto error;
- rc = get_file(dev->jz, &tar, "bootloader.ucl", true, &bootloader);
- if(rc != JZ_SUCCESS)
+ /* - A bootloader2.ucl binary should carry the LOAD header to define its
+ * load address. This name must be used when the load address is not
+ * equal to 0x80004000 to ensure old jztools will not try to load it.
+ *
+ * - The bootloader.ucl name must only be used when the binary loads at
+ * 0x80004000 and can be booted by old versions of jztool.
+ */
+ const char* bl_files[2] = {"bootloader2.ucl", "bootloader.ucl"};
+ for(int i = 0; i < 2; ++i) {
+ rc = get_file(dev->jz, &tar, bl_files[i],
+ F_DECOMPRESS|F_OPTIONAL, &bootloader);
+ if(rc == JZ_SUCCESS)
+ break;
+ else if(rc != JZ_ERR_OPEN_FILE)
+ goto error;
+ }
+
+ if(rc != JZ_SUCCESS) {
+ jz_log(dev->jz, JZ_LOG_ERROR, "no bootloader binary found", filename);
goto error;
+ }
rc = get_file(dev->jz, &tar, "bootloader-info.txt", false, &info_file);
if(rc != JZ_SUCCESS)
diff --git a/utils/rbutilqt/CMakeLists.txt b/utils/rbutilqt/CMakeLists.txt
index cc1ecd575c..41954cb9ee 100644
--- a/utils/rbutilqt/CMakeLists.txt
+++ b/utils/rbutilqt/CMakeLists.txt
@@ -109,8 +109,10 @@ if(WIN32)
target_sources(RockboxUtility PRIVATE
${CMAKE_CURRENT_LIST_DIR}/rbutilqt-win.qrc
${CMAKE_CURRENT_LIST_DIR}/rbutilqt.rc)
- # needed on Windows, otherwise svg icons won't show.
- target_link_libraries(RockboxUtility Qt${QT_VERSION_MAJOR}::QSvgIconPlugin)
+ if(QT_VERSION_MAJOR EQUAL 5)
+ # needed on Windows, otherwise svg icons won't show.
+ target_link_libraries(RockboxUtility Qt${QT_VERSION_MAJOR}::QSvgIconPlugin)
+ endif()
endif()
if(APPLE)
# MacOS Application Bundle specifics.
@@ -123,7 +125,17 @@ if(APPLE)
endif()
target_link_libraries(RockboxUtility rbbase cutelogger gitversion
- Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Multimedia)
+ Qt${QT_VERSION_MAJOR}::Widgets
+ Qt${QT_VERSION_MAJOR}::Svg)
+
+if (TARGET Qt${QT_VERSION_MAJOR}::Multimedia) # optional
+ target_link_libraries(RockboxUtility
+ Qt${QT_VERSION_MAJOR}::Multimedia)
+endif()
+
+if(QT_VERSION_MAJOR EQUAL 6)
+ target_link_libraries(RockboxUtility Qt${QT_VERSION_MAJOR}::SvgWidgets)
+endif()
target_include_directories(RockboxUtility PRIVATE
${CMAKE_CURRENT_LIST_DIR}/gui
@@ -136,11 +148,13 @@ set_property(TARGET RockboxUtility PROPERTY AUTOMOC ON)
set_property(TARGET RockboxUtility PROPERTY AUTORCC ON)
set_property(TARGET RockboxUtility PROPERTY AUTOUIC ON)
-deploy_qt(RockboxUtility
- ${QT_BINDIR}
- ${CMAKE_CURRENT_LIST_DIR}/../../docs/logo/rockbox-clef.svg
- ${CMAKE_CURRENT_LIST_DIR}/RockboxUtility.desktop
- ${CMAKE_CURRENT_LIST_DIR}/dmgbuild.cfg)
+deploy_qt(TARGET RockboxUtility
+ QTBINDIR ${QT_BINDIR}
+ ICONFILE ${CMAKE_CURRENT_LIST_DIR}/../../docs/logo/rockbox-clef.svg
+ DESKTOPFILE ${CMAKE_CURRENT_LIST_DIR}/RockboxUtility.desktop
+ DMGBUILDCFG ${CMAKE_CURRENT_LIST_DIR}/dmgbuild.cfg
+ EXECUTABLES ipodpatcher-bin sansapatcher-bin
+ )
add_library(rbbase
${CMAKE_CURRENT_LIST_DIR}/../../tools/iriver.c
@@ -403,4 +417,21 @@ target_compile_definitions(test_rockboxinfo PRIVATE UNICODE)
qtest_discover_tests(test_rockboxinfo)
set_property(TARGET test_rockboxinfo PROPERTY AUTOMOC ON)
+add_executable(test_talkgenerator
+ base/talkgenerator.cpp
+ base/talkgenerator.h
+ base/encttssettings.cpp
+ base/encttssettings.h
+ base/ttsbase.h
+ test/stubs/stubs-talkgenerator.cpp
+ test/test-talkgenerator.qrc
+ test/test-talkgenerator.cpp)
+
+target_link_libraries(test_talkgenerator Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Test)
+target_include_directories(test_talkgenerator PRIVATE base test/stubs
+ ${CMAKE_CURRENT_LIST_DIR}/../../tools)
+target_compile_definitions(test_talkgenerator PRIVATE UNICODE)
+qtest_discover_tests(test_talkgenerator)
+set_property(TARGET test_talkgenerator PROPERTY AUTOMOC ON)
+set_property(TARGET test_talkgenerator PROPERTY AUTORCC ON)
diff --git a/utils/rbutilqt/INSTALL b/utils/rbutilqt/INSTALL
index 884e7b3739..81cf748e10 100644
--- a/utils/rbutilqt/INSTALL
+++ b/utils/rbutilqt/INSTALL
@@ -20,43 +20,34 @@ for Rockbox.
Requirements:
=============
- gcc
-- Qt 4.5.0 or later
-- at least the following folders from Rockbox svn:
+- Qt 5
+- at least the following folders from Rockbox tree:
o lib/rbcodec/codecs/libspeex
- o rbutil/
+ o utils/
o tools/
- libusb (Linux only)
Building:
=========
-- run qmake
+- run cmake in the utils/ folder
- run make
Build Options:
==============
-- static
- add "-config static" to the qmake call to build a static binary. Note that
- this also requires that you have a statically built version of Qt.
-- dbg
- add "-config dbg" to build with debug symbols.
-- silent
- add "-config silent" to the qmake call. This is an undocumented feature of
- Qt itself. Note that this doesn't seem to work on Windows and Mac OS X until
- recent versions of Qt.
+There are no build options to set by the user. If your Qt installation is not
+in the PATH or a standard search location you might need to set
+CMAKE_PREFIX_PATH to point to it.
Installation / Deployment:
==========================
-Rockbox Utility is build as all-in-one binary. This means for distribution
-you need:
-- RockboxUtility (main binary)
-- rbutil_*.qm (translation files, only for non-static builds)
-You don't need any other files like configuration files, especially
-rbutil.ini which will get included into the binary.
-
-The script utils/common/deploy-rbutil.py automates building deployment
-binaries. For a complete list of paths to get from svn to build please check
-its source.
+For deployment the generated build system contains a target
+deploy_RockboxUtility (there's also a target deploy which will also deploy
+other tools.) Depending on the system deployment will create a zip file
+(Windows), dmg (MacOS) or AppImage (Linux).
+The script utils/common/tarball-rbutil.py automates building a source archive.
+For a complete list of paths to get from the repository to build please check
+its source.
The website for Rockbox Utility is
http://www.rockbox.org/wiki/RockboxUtility
diff --git a/utils/rbutilqt/Info.plist b/utils/rbutilqt/Info.plist
index af905a3f1e..15a5dc5313 100644
--- a/utils/rbutilqt/Info.plist
+++ b/utils/rbutilqt/Info.plist
@@ -7,11 +7,11 @@
<key>CFBundleName</key>
<string>Rockbox Utility</string>
<key>CFBundleShortVersionString</key>
- <string>1.4.1 ($Rev$)</string>
+ <string>1.5.1</string>
<key>CFBundleIconFile</key>
<string>rbutilqt.icns</string>
<key>CFBundleIdentifier</key>
- <string>com.rockbox.rbutil</string>
+ <string>org.rockbox.rbutil</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
diff --git a/utils/rbutilqt/base/autodetection.cpp b/utils/rbutilqt/base/autodetection.cpp
index 341f219c30..5021e1b3cc 100644
--- a/utils/rbutilqt/base/autodetection.cpp
+++ b/utils/rbutilqt/base/autodetection.cpp
@@ -92,7 +92,8 @@ void Autodetection::detectUsb()
int i = attached.size();
while(i--) {
- QStringList a = PlayerBuildInfo::instance()->value(PlayerBuildInfo::UsbIdTargetList, attached.at(i)).toStringList();
+ QStringList a = PlayerBuildInfo::instance()->value(
+ PlayerBuildInfo::UsbIdTargetList, attached.at(i)).toStringList();
if(a.size() > 0) {
struct Detected d;
d.status = PlayerOk;
@@ -100,7 +101,8 @@ void Autodetection::detectUsb()
m_detected.append(d);
LOG_INFO() << "[USB] detected supported player" << d.usbdevices;
}
- QStringList b = PlayerBuildInfo::instance()->value(PlayerBuildInfo::UsbIdErrorList, attached.at(i)).toStringList();
+ QStringList b = PlayerBuildInfo::instance()->value(
+ PlayerBuildInfo::UsbIdErrorList, attached.at(i)).toStringList();
if(b.size() > 0) {
struct Detected d;
d.status = PlayerMtpMode;
@@ -310,7 +312,7 @@ void Autodetection::mergePatcher(void)
}
-QString Autodetection::detectAjbrec(QString root)
+QString Autodetection::detectAjbrec(const QString& root)
{
QFile f(root + "/ajbrec.ajz");
char header[24];
@@ -347,7 +349,7 @@ QString Autodetection::detectAjbrec(QString root)
}
-int Autodetection::findDetectedDevice(QString device)
+int Autodetection::findDetectedDevice(const QString& device)
{
int i = m_detected.size();
while(i--) {
diff --git a/utils/rbutilqt/base/autodetection.h b/utils/rbutilqt/base/autodetection.h
index cdbb94d303..183f240bd0 100644
--- a/utils/rbutilqt/base/autodetection.h
+++ b/utils/rbutilqt/base/autodetection.h
@@ -55,12 +55,11 @@ public:
QList<struct Detected> detected(void) { return m_detected; }
private:
- QString resolveMountPoint(QString);
void detectUsb(void);
void mergeMounted(void);
void mergePatcher(void);
- QString detectAjbrec(QString);
- int findDetectedDevice(QString device);
+ QString detectAjbrec(const QString&);
+ int findDetectedDevice(const QString& device);
void updateDetectedDevice(struct Detected& entry);
QList<struct Detected> m_detected;
diff --git a/utils/rbutilqt/base/bootloaderinstallbase.cpp b/utils/rbutilqt/base/bootloaderinstallbase.cpp
index 096c601b91..b49a9b933b 100644
--- a/utils/rbutilqt/base/bootloaderinstallbase.cpp
+++ b/utils/rbutilqt/base/bootloaderinstallbase.cpp
@@ -57,16 +57,7 @@ void BootloaderInstallBase::downloadBlStart(QUrl source)
}
-void BootloaderInstallBase::downloadReqFinished(int id, bool error)
-{
- LOG_INFO() << "Download Request" << id
- << "finished, error:" << m_http.errorString();
-
- downloadBlFinish(error);
-}
-
-
-void BootloaderInstallBase::downloadBlFinish(bool error)
+void BootloaderInstallBase::downloadBlFinish(QNetworkReply::NetworkError error)
{
LOG_INFO() << "Downloading bootloader finished, error:"
<< error;
@@ -80,7 +71,7 @@ void BootloaderInstallBase::downloadBlFinish(bool error)
emit done(true);
return;
}
- if(error) {
+ if(error != QNetworkReply::NoError) {
emit logItem(tr("Download error: %1")
.arg(m_http.errorString()), LOGERROR);
emit done(true);
@@ -116,19 +107,24 @@ void BootloaderInstallBase::progressAborted(void)
bool BootloaderInstallBase::backup(QString to)
{
LOG_INFO() << "Backing up bootloader file";
- QDir targetDir(".");
- emit logItem(tr("Creating backup of original firmware file."), LOGINFO);
- if(!targetDir.mkpath(to)) {
- emit logItem(tr("Creating backup folder failed"), LOGERROR);
- return false;
+ if(!m_blfile.isEmpty()) {
+ QDir targetDir(".");
+ emit logItem(tr("Creating backup of original firmware file."), LOGINFO);
+ if(!targetDir.mkpath(to)) {
+ emit logItem(tr("Creating backup folder failed"), LOGERROR);
+ return false;
+ }
+ QString tofile = to + "/" + QFileInfo(m_blfile).fileName();
+ LOG_INFO() << "trying to backup" << m_blfile << "to" << tofile;
+ if(!QFile::copy(Utils::resolvePathCase(m_blfile), tofile)) {
+ emit logItem(tr("Creating backup copy failed."), LOGERROR);
+ return false;
+ }
+ emit logItem(tr("Backup created."), LOGOK);
}
- QString tofile = to + "/" + QFileInfo(m_blfile).fileName();
- LOG_INFO() << "trying to backup" << m_blfile << "to" << tofile;
- if(!QFile::copy(Utils::resolvePathCase(m_blfile), tofile)) {
- emit logItem(tr("Creating backup copy failed."), LOGERROR);
- return false;
+ else {
+ LOG_INFO() << "Bootloader backup not supported for current device.";
}
- emit logItem(tr("Backup created."), LOGOK);
return true;
}
@@ -207,21 +203,28 @@ void BootloaderInstallBase::checkRemount()
//! @brief set list of possible bootloader files and pick the existing one.
//! @param sl list of possible bootloader files.
-void BootloaderInstallBase::setBlFile(QStringList sl)
+void BootloaderInstallBase::setBlFile(const QString& mountpoint, const QStringList& sl)
{
- // figue which of the possible bootloader filenames is correct.
- for(int a = 0; a < sl.size(); a++) {
- if(!Utils::resolvePathCase(sl.at(a)).isEmpty()) {
- m_blfile = sl.at(a);
- }
+ if(sl.size() == 0) {
+ m_blfile = mountpoint;
}
- if(m_blfile.isEmpty()) {
- m_blfile = sl.at(0);
+ else {
+ for(int a = 0; a < sl.size(); a++) {
+ QString filename = mountpoint + sl.at(a);
+ if(!Utils::resolvePathCase(filename).isEmpty()) {
+ m_blfile = filename;
+ break;
+ }
+ }
+ // figue which of the possible bootloader filenames is correct.
+ if(m_blfile.isEmpty() && sl.size() > 0) {
+ m_blfile = mountpoint + sl.at(0);
+ }
}
}
-bool BootloaderInstallBase::setOfFile(QString of, QStringList blfile)
+bool BootloaderInstallBase::setOfFile(QString& of, const QStringList& blfile)
{
bool found = false;
ArchiveUtil *util = nullptr;
diff --git a/utils/rbutilqt/base/bootloaderinstallbase.h b/utils/rbutilqt/base/bootloaderinstallbase.h
index 0d9423a06f..32ca637288 100644
--- a/utils/rbutilqt/base/bootloaderinstallbase.h
+++ b/utils/rbutilqt/base/bootloaderinstallbase.h
@@ -55,21 +55,20 @@ class BootloaderInstallBase : public QObject
bool backup(QString to);
//! set the different filenames and paths
- void setBlFile(QStringList f);
+ void setBlFile(const QString& mountpoint, const QStringList& f);
void setBlUrl(QUrl u)
{ m_blurl = u; }
- void setLogfile(QString f)
+ void setLogfile(const QString& f)
{ m_logfile = f; }
- bool setOfFile(QString of, QStringList blfile);
+ bool setOfFile(QString& of, const QStringList& blfile);
//! returns a port Install Hint or empty if there is none
//! static and in the base class, so the installer classes dont need to
// be modified for new targets
- static QString postinstallHints(QString model);
+ static QString postinstallHints(const QString& model);
protected slots:
- void downloadReqFinished(int id, bool error);
- void downloadBlFinish(bool error);
+ void downloadBlFinish(QNetworkReply::NetworkError error);
void installBlfile(void);
void progressAborted(void);
diff --git a/utils/rbutilqt/base/bootloaderinstallipod.cpp b/utils/rbutilqt/base/bootloaderinstallipod.cpp
index d08cc22339..1bddaea6d5 100644
--- a/utils/rbutilqt/base/bootloaderinstallipod.cpp
+++ b/utils/rbutilqt/base/bootloaderinstallipod.cpp
@@ -28,6 +28,12 @@
BootloaderInstallIpod::BootloaderInstallIpod(QObject *parent)
: BootloaderInstallBase(parent)
{
+ ipod.sectorbuf = nullptr;
+#if defined(Q_OS_WIN32)
+ ipod.dh = INVALID_HANDLE_VALUE;
+#else
+ ipod.dh = -1;
+#endif
}
@@ -41,23 +47,6 @@ BootloaderInstallIpod::~BootloaderInstallIpod()
bool BootloaderInstallIpod::install(void)
{
- // initialize sector buffer. The sector buffer is part of the ipod_t
- // structure, so a second instance of this class will have its own buffer.
- if(ipod.sectorbuf == nullptr) {
- ipod_alloc_buffer(&ipod, BUFFER_SIZE);
- }
-
- if(ipod.sectorbuf == nullptr) {
- emit logItem(tr("Error: can't allocate buffer memory!"), LOGERROR);
- emit done(true);
- return false;
- }
-
- // save buffer pointer before cleaning up ipod_t structure
- unsigned char* sb = ipod.sectorbuf;
- memset(&ipod, 0, sizeof(struct ipod_t));
- ipod.sectorbuf = sb;
-
if(!ipodInitialize(&ipod)) {
emit done(true);
return false;
@@ -226,6 +215,26 @@ BootloaderInstallBase::Capabilities BootloaderInstallIpod::capabilities(void)
*/
bool BootloaderInstallIpod::ipodInitialize(struct ipod_t *ipod)
{
+ // if the ipod was already opened make sure to close it first.
+#if defined(Q_OS_WIN32)
+ if(ipod->dh != INVALID_HANDLE_VALUE)
+#else
+ if(ipod->dh >= 0)
+#endif
+ {
+ ipod_close(ipod);
+ }
+
+ // save buffer pointer before cleaning up ipod_t structure
+ unsigned char* sb = ipod->sectorbuf;
+ memset(ipod, 0, sizeof(struct ipod_t));
+ ipod->sectorbuf = sb;
+
+ // initialize sector buffer. The sector buffer is part of the ipod_t
+ // structure, so a second instance of this class will have its own buffer.
+ if(ipod->sectorbuf == nullptr) {
+ ipod_alloc_buffer(ipod, BUFFER_SIZE);
+ }
if(!m_blfile.isEmpty()) {
QString devicename = Utils::resolveDevicename(m_blfile);
if(devicename.isEmpty()) {
diff --git a/utils/rbutilqt/base/bootloaderinstallsansa.cpp b/utils/rbutilqt/base/bootloaderinstallsansa.cpp
index 568bb82afa..b8e307cf2c 100644
--- a/utils/rbutilqt/base/bootloaderinstallsansa.cpp
+++ b/utils/rbutilqt/base/bootloaderinstallsansa.cpp
@@ -27,6 +27,12 @@
BootloaderInstallSansa::BootloaderInstallSansa(QObject *parent)
: BootloaderInstallBase(parent)
{
+ sansa.sectorbuf = nullptr;
+#if defined(Q_OS_WIN32)
+ sansa.dh = INVALID_HANDLE_VALUE;
+#else
+ sansa.dh = -1;
+#endif
}
@@ -42,11 +48,7 @@ BootloaderInstallSansa::~BootloaderInstallSansa()
*/
bool BootloaderInstallSansa::install(void)
{
- // initialize sector buffer. The sector buffer is part of the sansa_t
- // structure, so a second instance of this class will have its own buffer.
- if(sansa.sectorbuf == nullptr) {
- sansa_alloc_buffer(&sansa, BUFFER_SIZE);
- }
+ sansaInitialize(&sansa);
if(sansa.sectorbuf == nullptr) {
emit logItem(tr("Error: can't allocate buffer memory!"), LOGERROR);
@@ -54,21 +56,6 @@ bool BootloaderInstallSansa::install(void)
emit done(true);
}
- emit logItem(tr("Searching for Sansa"), LOGINFO);
-
- int n = sansa_scan(&sansa);
- if(n == -1) {
- emit logItem(tr("Permission for disc access denied!\n"
- "This is required to install the bootloader"),
- LOGERROR);
- emit done(true);
- return false;
- }
- if(n == 0) {
- emit logItem(tr("No Sansa detected!"), LOGERROR);
- emit done(true);
- return false;
- }
if(sansa.hasoldbootloader) {
emit logItem(tr("OLD ROCKBOX INSTALLATION DETECTED, ABORTING.\n"
"You must reinstall the original Sansa firmware before running\n"
@@ -95,10 +82,6 @@ void BootloaderInstallSansa::installStage2(void)
emit logItem(tr("Installing Rockbox bootloader"), LOGINFO);
QCoreApplication::processEvents();
- if(!sansaInitialize(&sansa)) {
- emit done(true);
- return;
- }
if(sansa_reopen_rw(&sansa) < 0) {
emit logItem(tr("Could not open Sansa in R/W mode"), LOGERROR);
@@ -235,6 +218,26 @@ BootloaderInstallBase::BootloaderType BootloaderInstallSansa::installed(void)
bool BootloaderInstallSansa::sansaInitialize(struct sansa_t *sansa)
{
+ // if the ipod was already opened make sure to close it first.
+#if defined(Q_OS_WIN32)
+ if(sansa->dh != INVALID_HANDLE_VALUE)
+#else
+ if(sansa->dh >= 0)
+#endif
+ {
+ sansa_close(sansa);
+ }
+ // save buffer pointer before cleaning up ipod_t structure
+ unsigned char* sb = sansa->sectorbuf;
+ memset(sansa, 0, sizeof(struct sansa_t));
+ sansa->sectorbuf = sb;
+
+ // initialize sector buffer. The sector buffer is part of the ipod_t
+ // structure, so a second instance of this class will have its own buffer.
+ if(sansa->sectorbuf == nullptr) {
+ sansa_alloc_buffer(sansa, BUFFER_SIZE);
+ }
+
if(!m_blfile.isEmpty()) {
QString devicename = Utils::resolveDevicename(m_blfile);
if(devicename.isEmpty()) {
diff --git a/utils/rbutilqt/base/encttssettings.h b/utils/rbutilqt/base/encttssettings.h
index 1258d81d57..ef3e5728b5 100644
--- a/utils/rbutilqt/base/encttssettings.h
+++ b/utils/rbutilqt/base/encttssettings.h
@@ -108,8 +108,7 @@ public:
virtual void saveSettings() = 0;
signals:
- void busy(); // emit this if a operation takes time
- void busyEnd(); // emit this at the end of a busy section
+ void busy(bool show); // emit this if a operation takes time
protected:
//! Child class should fill in the setttingsList
diff --git a/utils/rbutilqt/base/httpget.cpp b/utils/rbutilqt/base/httpget.cpp
index 2df9501fd6..0cd9236209 100644
--- a/utils/rbutilqt/base/httpget.cpp
+++ b/utils/rbutilqt/base/httpget.cpp
@@ -20,6 +20,7 @@
#include <QNetworkAccessManager>
#include <QNetworkRequest>
+#include <QSslConfiguration>
#include "httpget.h"
#include "Logger.h"
@@ -27,6 +28,7 @@
QString HttpGet::m_globalUserAgent; //< globally set user agent for requests
QDir HttpGet::m_globalCache; //< global cach path value for new objects
QNetworkProxy HttpGet::m_globalProxy;
+QList<QSslCertificate> HttpGet::m_acceptedClientCerts;
HttpGet::HttpGet(QObject *parent)
: QObject(parent),
@@ -145,7 +147,7 @@ void HttpGet::requestFinished(QNetworkReply* reply)
{
m_lastStatusCode
= reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
- LOG_INFO() << "Request finished, status code:" << m_lastStatusCode;
+ LOG_INFO() << "Request finished, status code:" << m_lastStatusCode << reply->error();
m_lastServerTimestamp
= reply->header(QNetworkRequest::LastModifiedHeader).toDateTime().toLocalTime();
LOG_INFO() << "Data from cache:"
@@ -178,11 +180,11 @@ void HttpGet::requestFinished(QNetworkReply* reply)
m_outputFile->write(m_data);
m_outputFile->close();
}
- emit done(false);
+ emit done(QNetworkReply::NoError);
}
else {
m_data.clear();
- emit done(true);
+ emit done(reply->error());
}
reply->deleteLater();
m_reply = nullptr;
@@ -211,9 +213,30 @@ void HttpGet::startRequest(QUrl url)
connect(m_reply, &QNetworkReply::errorOccurred, this, &HttpGet::networkError);
#endif
connect(m_reply, &QNetworkReply::downloadProgress, this, &HttpGet::downloadProgress);
+ connect(m_reply, &QNetworkReply::sslErrors, this, &HttpGet::gotSslError);
}
+void HttpGet::gotSslError(const QList<QSslError> &errors)
+{
+ LOG_WARNING() << "Got SSL error" << errors;
+
+ // if this is a cert error, and only if we already accepted a remote cert
+ // ignore the error.
+ // This will make QNAM continue the request and finish it.
+ if (errors.size() == 1
+ && errors.at(0).error() == QSslError::UnableToGetLocalIssuerCertificate
+ && m_acceptedClientCerts.contains(m_reply->sslConfiguration().peerCertificate())) {
+ LOG_INFO() << "client cert temporarily trusted by user.";
+ m_reply->ignoreSslErrors();
+ }
+ else {
+ LOG_ERROR() << m_reply->sslConfiguration().peerCertificate().toText();
+ emit sslError(errors.at(0), m_reply->sslConfiguration().peerCertificate());
+ }
+
+}
+
void HttpGet::networkError(QNetworkReply::NetworkError error)
{
LOG_ERROR() << "NetworkError occured:" << error << m_reply->errorString();
diff --git a/utils/rbutilqt/base/httpget.h b/utils/rbutilqt/base/httpget.h
index 472ad83b81..fb5b920b47 100644
--- a/utils/rbutilqt/base/httpget.h
+++ b/utils/rbutilqt/base/httpget.h
@@ -73,22 +73,27 @@ class HttpGet : public QObject
//< set global user agent string
static void setGlobalUserAgent(const QString& u)
{ m_globalUserAgent = u; }
+ static void addTrustedPeerCert(QSslCertificate cert)
+ { m_acceptedClientCerts.append(cert);}
public slots:
void abort(void);
signals:
- void done(bool);
+ void done(QNetworkReply::NetworkError error);
void dataReadProgress(int, int);
void headerFinished(void);
+ void sslError(const QSslError& error, const QSslCertificate& peerCert);
private slots:
void requestFinished(QNetworkReply* reply);
void startRequest(QUrl url);
void downloadProgress(qint64 received, qint64 total);
void networkError(QNetworkReply::NetworkError error);
+ void gotSslError(const QList<QSslError> &errors);
private:
+ static QList<QSslCertificate> m_acceptedClientCerts;
static QString m_globalUserAgent;
static QNetworkProxy m_globalProxy;
QNetworkAccessManager m_mgr;
diff --git a/utils/rbutilqt/base/playerbuildinfo.cpp b/utils/rbutilqt/base/playerbuildinfo.cpp
index f118a9fd7a..c76abc4ffe 100644
--- a/utils/rbutilqt/base/playerbuildinfo.cpp
+++ b/utils/rbutilqt/base/playerbuildinfo.cpp
@@ -113,40 +113,46 @@ QVariant PlayerBuildInfo::value(BuildInfo item, BuildType type)
// For build info we don't use that.
QString target = RbSettings::value(RbSettings::CurrentPlatform).toString().split('.').at(0);
- QString s = ServerInfoList[i].name;
- s.replace(":target:", target);
- QString v;
+ QString serverinfo = ServerInfoList[i].name;
+ serverinfo.replace(":target:", target);
+ QString buildtypename;
switch(type) {
case TypeRelease:
- v = "release";
+ buildtypename = "release";
break;
case TypeCandidate:
- v = "release-candidate";
+ buildtypename = "release-candidate";
break;
case TypeDaily:
- v = "daily";
+ buildtypename = "daily";
break;
case TypeDevel:
- v = "development";
+ buildtypename = "development";
+ // manual and fonts don't exist for development builds. We do have an
+ // URL configured, but need to get the daily version instead.
+ if(item == BuildManualUrl || item == BuildFontUrl) {
+ LOG_INFO() << "falling back to daily build for this info value";
+ buildtypename = "daily";
+ }
break;
}
- QVariant result = QString();
+ QVariant result;
if (!serverInfo)
- return result;
- QStringList version = serverInfo->value(v + "/" + target, "").toStringList();
- s.replace(":build:", v);
- s.replace(":version:", version.at(0));
+ return QString();
+ QStringList version = serverInfo->value(buildtypename + "/" + target, "").toStringList();
+ serverinfo.replace(":build:", buildtypename);
+ serverinfo.replace(":version:", version.at(0));
// get value from server build-info
// we need to get a version string, otherwise the data is invalid.
// For invalid data return an empty string.
if(version.at(0).isEmpty()) {
- LOG_INFO() << s << "(version invalid)";
- return result;
+ LOG_INFO() << serverinfo << "(version invalid)";
+ return QString();
}
- if(!s.isEmpty())
- result = serverInfo->value(s);
+ if(!serverinfo.isEmpty())
+ result = serverInfo->value(serverinfo);
// depending on the actual value we need more replacements.
switch(item) {
@@ -163,8 +169,8 @@ QVariant PlayerBuildInfo::value(BuildInfo item, BuildType type)
case BuildVoiceLangs:
if (type == TypeDaily)
- s = "voices/daily";
- result = serverInfo->value(s);
+ serverinfo = "voices/daily";
+ result = serverInfo->value(serverinfo);
break;
case BuildManualUrl:
@@ -183,12 +189,16 @@ QVariant PlayerBuildInfo::value(BuildInfo item, BuildType type)
// if the value is a string we can replace some patterns.
// if we cannot convert it (f.e. for a QStringList) we leave as-is, since
// the conversion would return an empty type.
- if (result.canConvert(QMetaType::QString))
+#if QT_VERSION < 0x060000
+ if (result.type() == QVariant::String)
+#else
+ if (result.metaType().id() == QMetaType::QString)
+#endif
result = result.toString()
.replace("%TARGET%", target)
.replace("%VERSION%", version.at(0));
- LOG_INFO() << "B:" << s << result;
+ LOG_INFO() << "B:" << serverinfo << result;
return result;
}
@@ -251,7 +261,7 @@ QVariant PlayerBuildInfo::value(DeviceInfo item, QString target)
break;
default:
- result = playerInfo.value(s);
+ result = playerInfo.value(s, "");
break;
}
diff --git a/utils/rbutilqt/base/playerbuildinfo.h b/utils/rbutilqt/base/playerbuildinfo.h
index 6a88f750ed..85fc2ac6dc 100644
--- a/utils/rbutilqt/base/playerbuildinfo.h
+++ b/utils/rbutilqt/base/playerbuildinfo.h
@@ -30,8 +30,6 @@
// For build info data retrieved from the build server has to be passed.
class PlayerBuildInfo : public QObject
{
- Q_OBJECT
-
public:
enum BuildType {
diff --git a/utils/rbutilqt/base/rbsettings.cpp b/utils/rbutilqt/base/rbsettings.cpp
index 8eaa01f7f6..00a37c010e 100644
--- a/utils/rbutilqt/base/rbsettings.cpp
+++ b/utils/rbutilqt/base/rbsettings.cpp
@@ -45,7 +45,6 @@ const static struct {
{ RbSettings::BackupPath, "backuppath", "" },
{ RbSettings::InstallRockbox, "install_rockbox", "true" },
{ RbSettings::InstallFonts, "install_fonts", "true" },
- { RbSettings::InstallThemes, "install_themes", "false" },
{ RbSettings::InstallPluginData, "install_plugin_data", "true" },
{ RbSettings::InstallVoice, "install_voice", "false" },
{ RbSettings::InstallManual, "install_manual", "false" },
diff --git a/utils/rbutilqt/base/rbsettings.h b/utils/rbutilqt/base/rbsettings.h
index ef0c4eb134..820b3e0067 100644
--- a/utils/rbutilqt/base/rbsettings.h
+++ b/utils/rbutilqt/base/rbsettings.h
@@ -44,7 +44,6 @@ class RbSettings : public QObject
BackupPath,
InstallRockbox,
InstallFonts,
- InstallThemes,
InstallPluginData,
InstallVoice,
InstallManual,
diff --git a/utils/rbutilqt/base/system.cpp b/utils/rbutilqt/base/system.cpp
index a1d3d1165d..0ec1a9d424 100644
--- a/utils/rbutilqt/base/system.cpp
+++ b/utils/rbutilqt/base/system.cpp
@@ -418,10 +418,11 @@ QMultiMap<uint32_t, QString> System::listUsbDevices(void)
// the keys (W7 uses different casing than XP at least), in addition
// XP may use "Vid_" and "Pid_".
QString data = QString::fromWCharArray(buffer).toUpper();
- QRegExp rex("USB\\\\VID_([0-9A-F]{4})&PID_([0-9A-F]{4}).*");
- if(rex.indexIn(data) >= 0) {
+ QRegularExpression regex("^USB\\\\VID_([0-9A-F]{4})&PID_([0-9A-F]{4})&REV_([0-9A-F]{4})$");
+ QRegularExpressionMatch match = regex.match(data);
+ if(match.hasMatch()) {
uint32_t id;
- id = rex.cap(1).toUInt(0, 16) << 16 | rex.cap(2).toUInt(0, 16);
+ id = match.captured(1).toUInt(0, 16) << 16 | match.captured(2).toUInt(0, 16);
usbids.insert(id, description);
LOG_INFO() << "USB:" << QString("0x%1").arg(id, 8, 16);
}
diff --git a/utils/rbutilqt/base/talkfile.cpp b/utils/rbutilqt/base/talkfile.cpp
index c9876a81f9..aab5fbc29a 100644
--- a/utils/rbutilqt/base/talkfile.cpp
+++ b/utils/rbutilqt/base/talkfile.cpp
@@ -177,9 +177,9 @@ bool TalkFileCreator::createTalkList(QDir startDir)
bool match = false;
for(int i=0; i < m_ignoreFiles.size();i++)
{
- QRegularExpression rx(
- QRegularExpression::wildcardToRegularExpression(
- (m_ignoreFiles[i].trimmed())));
+ QString pattern = m_ignoreFiles[i].trimmed()
+ .replace("?", ".").replace("*", ".*");
+ QRegularExpression rx(pattern);
if(rx.match(fileInf.fileName()).hasMatch())
match = true;
diff --git a/utils/rbutilqt/base/talkgenerator.cpp b/utils/rbutilqt/base/talkgenerator.cpp
index eb000bf188..8bbc7702e0 100644
--- a/utils/rbutilqt/base/talkgenerator.cpp
+++ b/utils/rbutilqt/base/talkgenerator.cpp
@@ -24,7 +24,6 @@
TalkGenerator::TalkGenerator(QObject* parent): QObject(parent)
{
-
}
//! \brief Creates Talkfiles.
@@ -257,16 +256,17 @@ void TalkGenerator::abort()
m_abort = true;
}
-QString TalkGenerator::correctString(QString s)
+QString TalkGenerator::correctString(const QString& s)
{
QString corrected = s;
int i = 0;
int max = m_corrections.size();
while(i < max) {
corrected = corrected.replace(QRegularExpression(m_corrections.at(i).search,
- m_corrections.at(i).modifier.contains("i")
- ? QRegularExpression::NoPatternOption
- : QRegularExpression::CaseInsensitiveOption),
+ (m_corrections.at(i).modifier.contains("i")
+ ? QRegularExpression::CaseInsensitiveOption
+ : QRegularExpression::NoPatternOption)
+ | QRegularExpression::UseUnicodePropertiesOption),
m_corrections.at(i).replace);
i++;
}
@@ -277,7 +277,7 @@ QString TalkGenerator::correctString(QString s)
return corrected;
}
-void TalkGenerator::setLang(QString name)
+void TalkGenerator::setLang(const QString& name)
{
m_lang = name;
@@ -287,7 +287,7 @@ void TalkGenerator::setLang(QString name)
correctionsFile.open(QIODevice::ReadOnly);
QString engine = RbSettings::value(RbSettings::Tts).toString();
- TTSBase* tts = TTSBase::getTTS(this,RbSettings::value(RbSettings::Tts).toString());
+ TTSBase* tts = TTSBase::getTTS(this, RbSettings::value(RbSettings::Tts).toString());
if(!tts)
{
LOG_ERROR() << "getting the TTS object failed!";
@@ -313,16 +313,16 @@ void TalkGenerator::setLang(QString name)
if(items.size() < 6)
continue;
- QRegExp re_lang(items.at(0));
- QRegExp re_engine(items.at(1));
- QRegExp re_vendor(items.at(2));
- if(!re_lang.exactMatch(m_lang)) {
+ QRegularExpression re_lang(items.at(0));
+ QRegularExpression re_engine(items.at(1));
+ QRegularExpression re_vendor(items.at(2));
+ if(!re_lang.match(m_lang).hasMatch()) {
continue;
}
- if(!re_vendor.exactMatch(vendor)) {
+ if(!re_vendor.match(vendor).hasMatch()) {
continue;
}
- if(!re_engine.exactMatch(engine)) {
+ if(!re_engine.match(engine).hasMatch()) {
continue;
}
struct CorrectionItems co;
diff --git a/utils/rbutilqt/base/talkgenerator.h b/utils/rbutilqt/base/talkgenerator.h
index bb026190d8..7e25f8ce5e 100644
--- a/utils/rbutilqt/base/talkgenerator.h
+++ b/utils/rbutilqt/base/talkgenerator.h
@@ -53,11 +53,11 @@ public:
TalkGenerator(QObject* parent);
Status process(QList<TalkEntry>* list,int wavtrimth = -1);
- QString correctString(QString s);
+ QString correctString(const QString& s);
public slots:
void abort();
- void setLang(QString name);
+ void setLang(const QString& name);
signals:
void done(bool);
diff --git a/utils/rbutilqt/base/ttsbase.h b/utils/rbutilqt/base/ttsbase.h
index 125fe49ff4..f9279006bd 100644
--- a/utils/rbutilqt/base/ttsbase.h
+++ b/utils/rbutilqt/base/ttsbase.h
@@ -36,9 +36,9 @@ class TTSBase : public EncTtsSettingInterface
TTSBase(QObject *parent);
//! Child class should generate a clip
- virtual TTSStatus voice(QString text,QString wavfile, QString* errStr) =0;
+ virtual TTSStatus voice(const QString& text, const QString& wavfile, QString* errStr) = 0;
//! Child class should do startup
- virtual bool start(QString *errStr) =0;
+ virtual bool start(QString *errStr) = 0;
//! child class should stop
virtual bool stop() =0;
diff --git a/utils/rbutilqt/base/ttscarbon.cpp b/utils/rbutilqt/base/ttscarbon.cpp
index 2d9fa49dbe..6b20de764f 100644
--- a/utils/rbutilqt/base/ttscarbon.cpp
+++ b/utils/rbutilqt/base/ttscarbon.cpp
@@ -171,7 +171,7 @@ void TTSCarbon::saveSettings(void)
/** @brief create wav file from text using the selected TTS voice.
*/
-TTSStatus TTSCarbon::voice(QString text, QString wavfile, QString* errStr)
+TTSStatus TTSCarbon::voice(const QString& text, const QString& wavfile, QString* errStr)
{
TTSStatus status = NoError;
OSErr error;
diff --git a/utils/rbutilqt/base/ttscarbon.h b/utils/rbutilqt/base/ttscarbon.h
index 2e9e84aa7d..80235b8b12 100644
--- a/utils/rbutilqt/base/ttscarbon.h
+++ b/utils/rbutilqt/base/ttscarbon.h
@@ -39,7 +39,7 @@ class TTSCarbon : public TTSBase
TTSCarbon(QObject *parent = NULL);
//! Child class should generate a clip
- TTSStatus voice(QString text, QString wavfile, QString* errStr);
+ TTSStatus voice(const QString& text, const QString& wavfile, QString* errStr);
//! Child class should do startup
bool start(QString *errStr);
//! child class should stop
diff --git a/utils/rbutilqt/base/ttsexes.cpp b/utils/rbutilqt/base/ttsexes.cpp
index 446725968f..3eae930eef 100644
--- a/utils/rbutilqt/base/ttsexes.cpp
+++ b/utils/rbutilqt/base/ttsexes.cpp
@@ -80,7 +80,7 @@ bool TTSExes::start(QString *errStr)
}
}
-TTSStatus TTSExes::voice(QString text, QString wavfile, QString *errStr)
+TTSStatus TTSExes::voice(const QString& text, const QString& wavfile, QString *errStr)
{
(void) errStr;
QString execstring;
diff --git a/utils/rbutilqt/base/ttsexes.h b/utils/rbutilqt/base/ttsexes.h
index 5707c827fe..470b007e92 100644
--- a/utils/rbutilqt/base/ttsexes.h
+++ b/utils/rbutilqt/base/ttsexes.h
@@ -35,7 +35,7 @@ class TTSExes : public TTSBase
Q_OBJECT
public:
TTSExes(QObject* parent=nullptr);
- TTSStatus voice(QString text, QString wavfile, QString *errStr);
+ TTSStatus voice(const QString& text, const QString& wavfile, QString *errStr);
bool start(QString *errStr);
bool stop() {return true;}
QString voiceVendor(void) { return QString(); }
diff --git a/utils/rbutilqt/base/ttsfestival.cpp b/utils/rbutilqt/base/ttsfestival.cpp
index 4c718de824..9cdad7fe64 100644
--- a/utils/rbutilqt/base/ttsfestival.cpp
+++ b/utils/rbutilqt/base/ttsfestival.cpp
@@ -121,18 +121,14 @@ void TTSFestival::startServer()
QString path;
/* currentPath is set by the GUI - if it's set, it is the currently set
path in the configuration GUI; if it's not set, use the saved path */
- if (currentPath == "")
+ if (currentPath.isEmpty())
path = RbSettings::subValue("festival-server",RbSettings::TtsPath).toString();
else
path = currentPath;
- serverProcess.start(QString("%1 --server").arg(path));
+ serverProcess.start(path, QStringList("--server"));
serverProcess.waitForStarted();
- /* A friendlier version of a spinlock */
- while (serverProcess.processId() == 0 && serverProcess.state() != QProcess::Running)
- QCoreApplication::processEvents(QEventLoop::AllEvents, 50);
-
if(serverProcess.state() == QProcess::Running)
LOG_INFO() << "Server is up and running";
else
@@ -174,7 +170,7 @@ bool TTSFestival::start(QString* errStr)
}
if (!running)
- (*errStr) = "Festival could not be started";
+ (*errStr) = tr("Festival could not be started");
return running;
}
@@ -186,18 +182,19 @@ bool TTSFestival::stop()
return true;
}
-TTSStatus TTSFestival::voice(QString text, QString wavfile, QString* errStr)
+TTSStatus TTSFestival::voice(const QString& text, const QString& wavfile, QString* errStr)
{
LOG_INFO() << "Voicing" << text << "->" << wavfile;
QString path = RbSettings::subValue("festival-client",
RbSettings::TtsPath).toString();
- QString cmd = QString("%1 --server localhost --otype riff --ttw --withlisp"
- " --output \"%2\" --prolog \"%3\" - ").arg(path, wavfile, prologPath);
- LOG_INFO() << "Client cmd:" << cmd;
+ QStringList cmd;
+ cmd << "--server" << "localhost" << "--otype" << "riff" << "--ttw"
+ << "--withlisp" << "--output" << wavfile << "--prolog" << prologPath << "-";
+ LOG_INFO() << "Client cmd:" << path << cmd;
QProcess clientProcess;
- clientProcess.start(cmd);
+ clientProcess.start(path, cmd);
clientProcess.write(QString("%1.\n").arg(text).toLatin1());
clientProcess.waitForBytesWritten();
clientProcess.closeWriteChannel();
@@ -332,81 +329,92 @@ QString TTSFestival::getVoiceInfo(QString voice)
QString TTSFestival::queryServer(QString query, int timeout)
{
+ // make sure we always abort at some point.
+ if(timeout == 0)
+ timeout = 60000;
if(!configOk())
return "";
// this operation could take some time
- emit busy();
+ emit busy(true);
LOG_INFO() << "queryServer with" << query;
if (!ensureServerRunning())
{
LOG_ERROR() << "queryServer: ensureServerRunning failed";
- emit busyEnd();
+ emit busy(false);
return "";
}
- QString response;
- QDateTime endTime;
- if(timeout > 0)
- endTime = QDateTime::currentDateTime().addMSecs(timeout);
+ QDateTime endTime = QDateTime::currentDateTime().addMSecs(timeout);
/* Festival is *extremely* unreliable. Although at this
* point we are sure that SIOD is accepting commands,
* we might end up with an empty response. Hence, the loop.
*/
- while(true)
+ QTcpSocket socket;
+ QString response;
+ while(QDateTime::currentDateTime() < endTime)
{
QCoreApplication::processEvents(QEventLoop::AllEvents, 50);
- QTcpSocket socket;
-
- socket.connectToHost("localhost", 1314);
- socket.waitForConnected();
- if(socket.state() == QAbstractSocket::ConnectedState)
+ if(socket.state() != QAbstractSocket::ConnectedState)
{
+ LOG_INFO() << "socket not (yet) connected, trying again.";
+ socket.connectToHost("localhost", 1314);
+ // appears we need to recheck the state still.
+ socket.waitForConnected();
+ }
+ else
+ {
+ // seems to be necessary to resend the request at times.
socket.write(QString("%1\n").arg(query).toLatin1());
socket.waitForBytesWritten();
socket.waitForReadyRead();
- response = socket.readAll().trimmed();
+ // we might not get the complete response on the first read.
+ // Concatenate until we got a full response.
+ response += socket.readAll();
- if (response != "LP" && response != "")
+ // The query response ends with this.
+ if (response.contains("ft_StUfF_keyOK"))
+ {
break;
+ }
}
- socket.abort();
- socket.disconnectFromHost();
- if(timeout > 0 && QDateTime::currentDateTime() >= endTime)
- {
- emit busyEnd();
- return "";
- }
/* make sure we wait a little as we don't want to flood the server
* with requests */
QDateTime tmpEndTime = QDateTime::currentDateTime().addMSecs(500);
while(QDateTime::currentDateTime() < tmpEndTime)
QCoreApplication::processEvents(QEventLoop::AllEvents);
}
+ emit busy(false);
+ socket.disconnectFromHost();
+
if(response == "nil")
{
- emit busyEnd();
return "";
}
- QStringList lines = response.split('\n');
- if(lines.size() > 2)
+ /* The response starts with "LP\n", and ends with "ft_StUfF_keyOK", but we
+ * could get trailing data -- we might have sent the request more than
+ * once. Use a regex to get the actual response part.
+ */
+ QRegularExpression regex("LP\\n(.*?)\\nft_StUfF_keyOK",
+ QRegularExpression::MultilineOption
+ | QRegularExpression::DotMatchesEverythingOption);
+ QRegularExpressionMatch match = regex.match(response);
+ if(match.hasMatch())
{
- lines.removeFirst(); /* should be LP */
- lines.removeLast(); /* should be ft_StUfF_keyOK */
+ response = match.captured(1);
+ }
+ else {
+ LOG_WARNING() << "Invalid Festival response." << response;
}
- else
- LOG_ERROR() << "Response too short:" << response;
-
- emit busyEnd();
- return lines.join("\n");
+ return response.trimmed();
}
diff --git a/utils/rbutilqt/base/ttsfestival.h b/utils/rbutilqt/base/ttsfestival.h
index 5f6dc13ab5..28409e2a4e 100644
--- a/utils/rbutilqt/base/ttsfestival.h
+++ b/utils/rbutilqt/base/ttsfestival.h
@@ -40,7 +40,7 @@ class TTSFestival : public TTSBase
~TTSFestival();
bool start(QString *errStr);
bool stop();
- TTSStatus voice(QString text,QString wavfile, QString *errStr);
+ TTSStatus voice(const QString& text, const QString& wavfile, QString *errStr);
QString voiceVendor(void) { return QString(); }
Capabilities capabilities();
diff --git a/utils/rbutilqt/base/ttssapi.cpp b/utils/rbutilqt/base/ttssapi.cpp
index 66ca6cc144..c1a642a14e 100644
--- a/utils/rbutilqt/base/ttssapi.cpp
+++ b/utils/rbutilqt/base/ttssapi.cpp
@@ -228,7 +228,7 @@ QStringList TTSSapi::getVoiceList(QString language)
-TTSStatus TTSSapi::voice(QString text,QString wavfile, QString *errStr)
+TTSStatus TTSSapi::voice(const QString& text, const QString& wavfile, QString *errStr)
{
(void) errStr;
QString query = "SPEAK\t"+wavfile+"\t"+text;
diff --git a/utils/rbutilqt/base/ttssapi.h b/utils/rbutilqt/base/ttssapi.h
index 25d7d3dab7..b30b9d5fac 100644
--- a/utils/rbutilqt/base/ttssapi.h
+++ b/utils/rbutilqt/base/ttssapi.h
@@ -38,7 +38,7 @@ class TTSSapi : public TTSBase
public:
TTSSapi(QObject* parent=nullptr);
- TTSStatus voice(QString text,QString wavfile, QString *errStr);
+ TTSStatus voice(const QString& text, const QString& wavfile, QString *errStr);
bool start(QString *errStr);
bool stop();
QString voiceVendor(void);
diff --git a/utils/rbutilqt/base/uninstall.cpp b/utils/rbutilqt/base/uninstall.cpp
index 5ab670a031..db150b411c 100644
--- a/utils/rbutilqt/base/uninstall.cpp
+++ b/utils/rbutilqt/base/uninstall.cpp
@@ -57,8 +57,10 @@ void Uninstaller::uninstall(void)
installlog.endGroup();
// iterate over all entries
- for(int j =0; j < toDeleteList.size(); j++ )
+ QStringList deletedItems;
+ for(int j = 0; j < toDeleteList.size(); j++ )
{
+ emit logProgress(j, toDeleteList.size());
// check if current file is in use by another section
bool deleteFile = true;
for(int s = 0; s < sections.size(); s++)
@@ -72,14 +74,13 @@ void Uninstaller::uninstall(void)
installlog.endGroup();
}
- installlog.beginGroup(uninstallSections.at(i));
QFileInfo toDelete(m_mountpoint + "/" + toDeleteList.at(j));
if(toDelete.isFile()) // if it is a file remove it
{
if(deleteFile && !QFile::remove(toDelete.filePath()))
emit logItem(tr("Could not delete %1")
.arg(toDelete.filePath()), LOGWARNING);
- installlog.remove(toDeleteList.at(j));
+ deletedItems.append(toDeleteList.at(j));
LOG_INFO() << "deleted:" << toDelete.filePath();
}
else // if it is a dir, remember it for later deletion
@@ -88,20 +89,25 @@ void Uninstaller::uninstall(void)
// folders will be rm'ed.
dirList << toDeleteList.at(j);
}
- installlog.endGroup();
QCoreApplication::processEvents();
}
// delete the dirs
installlog.beginGroup(uninstallSections.at(i));
- for(int j=0; j < dirList.size(); j++ )
+ for(int j = 0; j < dirList.size(); j++ )
{
- installlog.remove(dirList.at(j));
+ emit logProgress(j, dirList.size());
+ deletedItems.append(dirList.at(j));
QDir dir(m_mountpoint);
dir.rmdir(dirList.at(j)); // rm works only on empty folders
}
+ // for speed reasons update log file only at the end.
+ for (const auto& file : deletedItems)
+ {
+ installlog.remove(file);
+ }
+ installlog.remove("");
installlog.endGroup();
- //installlog.removeGroup(uninstallSections.at(i))
}
uninstallSections.clear();
installlog.sync();
diff --git a/utils/rbutilqt/base/utils.cpp b/utils/rbutilqt/base/utils.cpp
index b834567688..7b6eed30bc 100644
--- a/utils/rbutilqt/base/utils.cpp
+++ b/utils/rbutilqt/base/utils.cpp
@@ -62,7 +62,7 @@
#endif
// recursive function to delete a dir with files
-bool Utils::recursiveRmdir( const QString &dirName )
+bool Utils::recursiveRmdir(const QString &dirName)
{
QString dirN = dirName;
QDir dir(dirN);
@@ -634,7 +634,7 @@ QString Utils::resolveMountPoint(QString device)
QString result;
unsigned int driveno = device.replace(QRegularExpression("^.*([0-9]+)"), "\\1").toInt();
- int letter;
+ char letter;
for(letter = 'A'; letter <= 'Z'; letter++) {
if(resolveDevicename(QString(letter)).toUInt() == driveno) {
result = letter;
diff --git a/utils/rbutilqt/base/voicefile.cpp b/utils/rbutilqt/base/voicefile.cpp
index eabf7a721a..dbdd56e53e 100644
--- a/utils/rbutilqt/base/voicefile.cpp
+++ b/utils/rbutilqt/base/voicefile.cpp
@@ -96,7 +96,7 @@ bool VoiceFileCreator::createVoiceFile()
// header (4 bytes): cookie = 9a, version = 06, targetid, options
// subheader for each user. Only "core" for now.
// subheader (6 bytes): count (2bytes), size (2bytes), offset (2bytes)
- if(buf[0] != (char)0x9a || buf[1] != 0x06 || buf[2] != m_targetid) {
+ if(buf[0] != '\x9a' || buf[1] != '\x06' || buf[2] != m_targetid) {
emit logItem(tr("Extracted voice strings incompatible"), LOGINFO);
}
else {
@@ -121,14 +121,14 @@ bool VoiceFileCreator::createVoiceFile()
QTemporaryFile voicefontlist;
voicefontlist.open();
m_filename = voicefontlist.fileName();
- for(int i = 0; i < voicestrings.size(); ++i) {
+ for(auto key : voicestrings.keys()) {
QByteArray qba;
qba = QString("id: %1_%2\n")
- .arg(voicestrings.keys().at(i) < 0x8000 ? "LANG" : "VOICE")
- .arg(voicestrings.keys().at(i)).toUtf8();
+ .arg(key < 0x8000 ? "LANG" : "VOICE")
+ .arg(key).toUtf8();
voicefontlist.write(qba);
qba = QString("voice: \"%1\"\n").arg(
- voicestrings[voicestrings.keys().at(i)]).toUtf8();
+ voicestrings[key]).toUtf8();
voicefontlist.write(qba);
}
voicefontlist.close();
@@ -175,7 +175,7 @@ bool VoiceFileCreator::createVoiceFile()
}
-void VoiceFileCreator::downloadDone(bool error)
+void VoiceFileCreator::downloadDone(QNetworkReply::NetworkError error)
{
LOG_INFO() << "download done, error:" << error;
@@ -190,7 +190,7 @@ void VoiceFileCreator::downloadDone(bool error)
if(getter->isCached())
emit logItem(tr("Cached file used."), LOGINFO);
- if(error)
+ if(error != QNetworkReply::NoError)
{
emit logItem(tr("Download error: %1").arg(getter->errorString()),LOGERROR);
emit done(true);
diff --git a/utils/rbutilqt/base/voicefile.h b/utils/rbutilqt/base/voicefile.h
index c813910a69..feb0ac6e5a 100644
--- a/utils/rbutilqt/base/voicefile.h
+++ b/utils/rbutilqt/base/voicefile.h
@@ -52,7 +52,7 @@ signals:
void logProgress(int, int); //! set progress bar.
private slots:
- void downloadDone(bool error);
+ void downloadDone(QNetworkReply::NetworkError error);
private:
diff --git a/utils/rbutilqt/base/zipinstaller.cpp b/utils/rbutilqt/base/zipinstaller.cpp
index 8de6c53b16..4ca8ce8688 100644
--- a/utils/rbutilqt/base/zipinstaller.cpp
+++ b/utils/rbutilqt/base/zipinstaller.cpp
@@ -102,7 +102,7 @@ void ZipInstaller::installStart()
}
-void ZipInstaller::downloadDone(bool error)
+void ZipInstaller::downloadDone(QNetworkReply::NetworkError error)
{
LOG_INFO() << "download done, error:" << error;
QStringList zipContents; // needed later
@@ -116,14 +116,17 @@ void ZipInstaller::downloadDone(bool error)
emit done(true);
return;
}
- if(m_getter->isCached())
- emit logItem(tr("Cached file used."), LOGINFO);
- if(error) {
+ if(error != QNetworkReply::NoError) {
emit logItem(tr("Download error: %1").arg(m_getter->errorString()), LOGERROR);
emit done(true);
return;
}
- else emit logItem(tr("Download finished."),LOGOK);
+ else if(m_getter->isCached()) {
+ emit logItem(tr("Download finished (cache used)."), LOGOK);
+ }
+ else {
+ emit logItem(tr("Download finished."),LOGOK);
+ }
QCoreApplication::processEvents();
if(m_unzip) {
// unzip downloaded file
diff --git a/utils/rbutilqt/base/zipinstaller.h b/utils/rbutilqt/base/zipinstaller.h
index 35967af6b1..87c38b7700 100644
--- a/utils/rbutilqt/base/zipinstaller.h
+++ b/utils/rbutilqt/base/zipinstaller.h
@@ -37,13 +37,12 @@ class ZipInstaller : public QObject
Q_OBJECT
public:
ZipInstaller(QObject* parent);
- ~ZipInstaller(){}
void install(void);
- void setMountPoint(QString mountpoint) {m_mountpoint = mountpoint;}
- void setUrl(QString url){m_urllist = QStringList(url);}
- void setUrl(QStringList url) { m_urllist = url; }
+ void setMountPoint(QString& mountpoint) {m_mountpoint = mountpoint;}
+ void setUrl(QString& url){m_urllist = QStringList(url);}
+ void setUrl(QStringList& url) { m_urllist = url; }
void setLogSection(QString name) {m_loglist = QStringList(name);}
- void setLogSection(QStringList name) { m_loglist = name; }
+ void setLogSection(QStringList& name) { m_loglist = name; }
void setLogVersion(QString v = "")
{ m_verlist = QStringList(v); LOG_INFO() << m_verlist;}
void setLogVersion(QStringList v)
@@ -52,14 +51,14 @@ public:
void setUnzip(bool i) { m_unzip = i; }
/** Set target filename for copy mode.
* If not set the filename part of the download URL is used. */
- void setTarget(QString t) { m_target = t; }
+ void setTarget(QString& t) { m_target = t; }
void setCache(bool c) { m_usecache = c; }
public slots:
void abort(void);
private slots:
- void downloadDone(bool);
+ void downloadDone(QNetworkReply::NetworkError error);
void installStart(void);
void installContinue(void);
diff --git a/utils/rbutilqt/base/ziputil.cpp b/utils/rbutilqt/base/ziputil.cpp
index 3527e8e881..e285446711 100644
--- a/utils/rbutilqt/base/ziputil.cpp
+++ b/utils/rbutilqt/base/ziputil.cpp
@@ -147,6 +147,7 @@ bool ZipUtil::extractArchive(const QString& dest, QString file)
outputFile.close();
emit logProgress(current, entries);
+ QCoreApplication::processEvents();
}
delete currentFile;
emit logProgress(1, 1);
diff --git a/utils/rbutilqt/changelog.txt b/utils/rbutilqt/changelog.txt
index 992ea19445..705395b5f0 100644
--- a/utils/rbutilqt/changelog.txt
+++ b/utils/rbutilqt/changelog.txt
@@ -40,3 +40,11 @@ Version 1.5.0
* Improved HiDPI support.
* Drop support for Qt4, now requires Qt5.
* Update various external libraries.
+* Server Downloads changed to https.
+
+Version 1.5.1
+* Fix bootloader installation for Ipods.
+* Fix bootloader installation for Sandisk players.
+* Improve responsiveness on install / uninstall.
+* Enable Themes installation if themes are selected.
+
diff --git a/utils/rbutilqt/configure.cpp b/utils/rbutilqt/configure.cpp
index 169499800e..a544c8528a 100644
--- a/utils/rbutilqt/configure.cpp
+++ b/utils/rbutilqt/configure.cpp
@@ -20,7 +20,7 @@
#include <QProgressDialog>
#include <QFileDialog>
#include <QUrl>
-#ifdef QT_MULTIMEDIA_LIB
+#if defined(QT_MULTIMEDIA_LIB) && (QT_VERSION < 0x060000)
#include <QSound>
#endif
@@ -444,7 +444,7 @@ void Config::updateTtsState(int index)
{
ui.configTTSstatus->setText(tr("Configuration OK"));
ui.configTTSstatusimg->setPixmap(QPixmap(QString::fromUtf8(":/icons/go-next.svg")));
-#ifdef QT_MULTIMEDIA_LIB
+#if defined(QT_MULTIMEDIA_LIB) && (QT_VERSION < 0x060000)
ui.testTTS->setEnabled(true);
#else
ui.testTTS->setEnabled(false);
@@ -894,7 +894,7 @@ void Config::configTts()
void Config::testTts()
{
-#ifdef QT_MULTIMEDIA_LIB
+#if defined(QT_MULTIMEDIA_LIB) && (QT_VERSION < 0x060000)
QString errstr;
int index = ui.comboTts->currentIndex();
TTSBase* tts;
diff --git a/utils/rbutilqt/encttscfggui.cpp b/utils/rbutilqt/encttscfggui.cpp
index 51a047da61..e0f203bc1c 100644
--- a/utils/rbutilqt/encttscfggui.cpp
+++ b/utils/rbutilqt/encttscfggui.cpp
@@ -35,20 +35,19 @@
#include "Logger.h"
EncTtsCfgGui::EncTtsCfgGui(QDialog* parent, EncTtsSettingInterface* iface, QString name)
- : QDialog(parent)
+ : QDialog(parent),
+ m_settingInterface(iface),
+ m_busyCnt(0)
{
- m_settingInterface = iface;
-
- m_busyCnt=0;
// create a busy Dialog
- m_busyDlg= new QProgressDialog("", "", 0, 0,this);
+ m_busyDlg= new QProgressDialog("", "", 0, 1, this);
m_busyDlg->setWindowTitle(tr("Waiting for engine..."));
m_busyDlg->setModal(true);
m_busyDlg->setLabel(nullptr);
m_busyDlg->setCancelButton(nullptr);
- m_busyDlg->hide();
- connect(iface,&EncTtsSettingInterface::busy,this,&EncTtsCfgGui::showBusy);
- connect(iface,&EncTtsSettingInterface::busyEnd,this,&EncTtsCfgGui::hideBusy);
+ m_busyDlg->setMinimumDuration(100);
+ m_busyDlg->setValue(1);
+ connect(iface, &EncTtsSettingInterface::busy, this, &EncTtsCfgGui::busyDialog);
//setup the window
setWindowTitle(name);
@@ -88,17 +87,14 @@ void EncTtsCfgGui::setUpWindow()
groupBox->setLayout(gridLayout);
mainLayout->addWidget(groupBox);
- // connect browse btn
- connect(&m_browseBtnMap,SIGNAL(mapped(QObject*)),this,SLOT(browse(QObject*)));
-
// ok - cancel buttons
QPushButton* okBtn = new QPushButton(tr("Ok"),this);
okBtn->setDefault(true);
okBtn->setIcon(QIcon(":icons/go-next.svg"));
QPushButton* cancelBtn = new QPushButton(tr("Cancel"),this);
cancelBtn->setIcon(QIcon(":icons/process-stop.svg"));
- connect(okBtn,SIGNAL(clicked()),this,SLOT(accept()));
- connect(cancelBtn,SIGNAL(clicked()),this,SLOT(reject()));
+ connect(okBtn, &QPushButton::clicked, this, &EncTtsCfgGui::accept);
+ connect(cancelBtn, &QPushButton::clicked, this, &EncTtsCfgGui::reject);
QHBoxLayout *btnbox = new QHBoxLayout;
btnbox->addWidget(okBtn);
@@ -124,8 +120,21 @@ QWidget* EncTtsCfgGui::createWidgets(EncTtsSetting* setting)
spinBox->setMaximum(setting->max().toDouble());
spinBox->setSingleStep(0.01);
spinBox->setValue(setting->current().toDouble());
- connect(spinBox,SIGNAL(valueChanged(double)),this,SLOT(updateSetting()));
+
value = spinBox;
+
+ connect(spinBox, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged),
+ this, [=](double value) {
+ this->m_settingsWidgetsMap.key(spinBox)->setCurrent(value, false);
+ });
+ connect(setting, &EncTtsSetting::updateGui, this,
+ [spinBox, setting]() {
+ spinBox->setMinimum(setting->min().toDouble());
+ spinBox->setMaximum(setting->max().toDouble());
+ spinBox->blockSignals(true);
+ spinBox->setValue(setting->current().toDouble());
+ spinBox->blockSignals(false);
+ });
break;
}
case EncTtsSetting::eINT:
@@ -135,8 +144,19 @@ QWidget* EncTtsCfgGui::createWidgets(EncTtsSetting* setting)
spinBox->setMinimum(setting->min().toInt());
spinBox->setMaximum(setting->max().toInt());
spinBox->setValue(setting->current().toInt());
- connect(spinBox,SIGNAL(valueChanged(int)),this,SLOT(updateSetting()));
value = spinBox;
+ connect(spinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
+ this, [=](int value) {
+ this->m_settingsWidgetsMap.key(spinBox)->setCurrent(value, false);
+ });
+ connect(setting, &EncTtsSetting::updateGui, this,
+ [spinBox, setting]() {
+ spinBox->setMinimum(setting->min().toInt());
+ spinBox->setMaximum(setting->max().toInt());
+ spinBox->blockSignals(true);
+ spinBox->setValue(setting->current().toInt());
+ spinBox->blockSignals(false);
+ });
break;
}
case EncTtsSetting::eSTRING:
@@ -144,13 +164,31 @@ QWidget* EncTtsCfgGui::createWidgets(EncTtsSetting* setting)
QLineEdit *lineEdit = new QLineEdit(this);
lineEdit->setAccessibleName(setting->name());
lineEdit->setText(setting->current().toString());
- connect(lineEdit,&QLineEdit::textChanged,this,&EncTtsCfgGui::updateSetting);
value = lineEdit;
+
+ connect(lineEdit, &QLineEdit::textChanged,
+ this, [=](QString value) {
+ this->m_settingsWidgetsMap.key(lineEdit)->setCurrent(value, false);
+ });
+ connect(setting, &EncTtsSetting::updateGui, this,
+ [lineEdit, setting]() {
+ lineEdit->blockSignals(true);
+ lineEdit->setText(setting->current().toString());
+ lineEdit->blockSignals(false);
+ });
break;
}
case EncTtsSetting::eREADONLYSTRING:
{
- value = new QLabel(setting->current().toString(),this);
+ QLabel *label = new QLabel(setting->current().toString(), this);
+ label->setWordWrap(true);
+ value = label;
+ connect(setting, &EncTtsSetting::updateGui, this,
+ [label, setting]() {
+ label->blockSignals(true);
+ label->setText(setting->current().toString());
+ label->blockSignals(false);
+ });
break;
}
case EncTtsSetting::eSTRINGLIST:
@@ -160,17 +198,40 @@ QWidget* EncTtsCfgGui::createWidgets(EncTtsSetting* setting)
comboBox->addItems(setting->list());
int index = comboBox->findText(setting->current().toString());
comboBox->setCurrentIndex(index);
- connect(comboBox,SIGNAL(currentIndexChanged(QString)),this,SLOT(updateSetting()));
+ connect(comboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+ this, [=](int) {
+ this->m_settingsWidgetsMap.key(comboBox)->setCurrent(comboBox->currentText(), false);
+ });
value = comboBox;
+ connect(setting, &EncTtsSetting::updateGui, this,
+ [comboBox, setting]() {
+ comboBox->blockSignals(true);
+ comboBox->clear();
+ comboBox->addItems(setting->list());
+ comboBox->setCurrentIndex(comboBox->findText(setting->current().toString()));
+ comboBox->blockSignals(false);
+ });
+
break;
}
case EncTtsSetting::eBOOL:
{
QCheckBox *checkbox = new QCheckBox(this);
checkbox->setAccessibleName(setting->name());
- checkbox->setCheckState(setting->current().toBool() == true ? Qt::Checked : Qt::Unchecked);
- connect(checkbox,&QCheckBox::stateChanged,this,&EncTtsCfgGui::updateSetting);
+ checkbox->setCheckState(setting->current().toBool() == true
+ ? Qt::Checked : Qt::Unchecked);
+ connect(checkbox, &QCheckBox::stateChanged,
+ this, [=](int value) {
+ this->m_settingsWidgetsMap.key(checkbox)->setCurrent(value, false);
+ });
value = checkbox;
+ connect(setting, &EncTtsSetting::updateGui, this,
+ [checkbox, setting]() {
+ checkbox->blockSignals(true);
+ checkbox->setCheckState(setting->current().toBool() == true
+ ? Qt::Checked : Qt::Unchecked);
+ checkbox->blockSignals(false);
+ });
break;
}
default:
@@ -183,8 +244,7 @@ QWidget* EncTtsCfgGui::createWidgets(EncTtsSetting* setting)
// remember widget
if(value != nullptr)
{
- m_settingsWidgetsMap.insert(setting,value);
- connect(setting,&EncTtsSetting::updateGui,this,&EncTtsCfgGui::updateWidget);
+ m_settingsWidgetsMap.insert(setting, value);
}
return value;
@@ -196,163 +256,46 @@ QWidget* EncTtsCfgGui::createButton(EncTtsSetting* setting)
{
QPushButton* browsebtn = new QPushButton(tr("Browse"),this);
browsebtn->setIcon(QIcon(":/icons/system-search.svg"));
- m_browseBtnMap.setMapping(browsebtn,setting);
- connect(browsebtn,SIGNAL(clicked()),&m_browseBtnMap,SLOT(map()));
+
+ connect(browsebtn, &QPushButton::clicked, this,
+ [this, setting]()
+ {
+ QString exe = QFileDialog::getOpenFileName(this, tr("Select executable"),
+ setting->current().toString(), "*");
+ if(QFileInfo(exe).isExecutable())
+ setting->setCurrent(exe);
+ });
return browsebtn;
}
else if(setting->button() == EncTtsSetting::eREFRESHBTN)
{
QPushButton* refreshbtn = new QPushButton(tr("Refresh"),this);
refreshbtn->setIcon(QIcon(":/icons/view-refresh.svg"));
- connect(refreshbtn,&QAbstractButton::clicked,setting,&EncTtsSetting::refresh);
+ connect(refreshbtn, &QAbstractButton::clicked, setting, &EncTtsSetting::refresh);
return refreshbtn;
}
else
return nullptr;
}
-void EncTtsCfgGui::updateSetting()
-{
- //cast and get the sender widget
- QWidget* widget = qobject_cast<QWidget*>(QObject::sender());
- if(widget == nullptr) return;
- // get the corresponding setting
- EncTtsSetting* setting = m_settingsWidgetsMap.key(widget);
- // update widget based on setting type
- switch(setting->type())
+void EncTtsCfgGui::busyDialog(bool show)
+{
+ if(show)
{
- case EncTtsSetting::eDOUBLE:
- {
- setting->setCurrent(((QDoubleSpinBox*)widget)->value(),false);
- break;
- }
- case EncTtsSetting::eINT:
- {
- setting->setCurrent(((QSpinBox*)widget)->value(),false);
- break;
- }
- case EncTtsSetting::eSTRING:
- {
- setting->setCurrent(((QLineEdit*)widget)->text(),false);
- break;
- }
- case EncTtsSetting::eREADONLYSTRING:
- {
- setting->setCurrent(((QLabel*)widget)->text(),false);
- break;
- }
- case EncTtsSetting::eSTRINGLIST:
- {
- setting->setCurrent(((QComboBox*)widget)->currentText(),false);
- break;
- }
- case EncTtsSetting::eBOOL:
- {
- setting->setCurrent(((QCheckBox*)widget)->isChecked(),false);
- break;
- }
- default:
- {
- LOG_WARNING() << "unknown setting type!";
- break;
- }
+ m_busyDlg->setValue(0);
+ m_busyCnt++;
}
-}
-
-void EncTtsCfgGui::updateWidget()
-{
- // get sender setting
- EncTtsSetting* setting = qobject_cast<EncTtsSetting*>(QObject::sender());
- if(setting == nullptr) return;
- // get corresponding widget
- QWidget* widget = m_settingsWidgetsMap.value(setting);
-
- // update Widget based on setting type
- switch(setting->type())
+ else
{
- case EncTtsSetting::eDOUBLE:
- {
- QDoubleSpinBox* spinbox = (QDoubleSpinBox*) widget;
- spinbox->setMinimum(setting->min().toDouble());
- spinbox->setMaximum(setting->max().toDouble());
- spinbox->blockSignals(true);
- spinbox->setValue(setting->current().toDouble());
- spinbox->blockSignals(false);
- break;
- }
- case EncTtsSetting::eINT:
- {
- QSpinBox* spinbox = (QSpinBox*) widget;
- spinbox->setMinimum(setting->min().toInt());
- spinbox->setMaximum(setting->max().toInt());
- spinbox->blockSignals(true);
- spinbox->setValue(setting->current().toInt());
- spinbox->blockSignals(false);
- break;
- }
- case EncTtsSetting::eSTRING:
- {
- QLineEdit* lineedit = (QLineEdit*) widget;
-
- lineedit->blockSignals(true);
- lineedit->setText(setting->current().toString());
- lineedit->blockSignals(false);
- break;
- }
- case EncTtsSetting::eREADONLYSTRING:
+ m_busyDlg->setValue(1);
+ if(m_busyCnt > 0)
{
- QLabel* label = (QLabel*) widget;
-
- label->blockSignals(true);
- label->setText(setting->current().toString());
- label->blockSignals(false);
- break;
- }
- case EncTtsSetting::eSTRINGLIST:
- {
- QComboBox* combobox = (QComboBox*) widget;
-
- combobox->blockSignals(true);
- combobox->clear();
- combobox->addItems(setting->list());
- int index = combobox->findText(setting->current().toString());
- combobox->setCurrentIndex(index);
- combobox->blockSignals(false);
-
- break;
- }
- case EncTtsSetting::eBOOL:
- {
- QCheckBox* checkbox = (QCheckBox*) widget;
-
- checkbox->blockSignals(true);
- checkbox->setCheckState(setting->current().toBool() == true ? Qt::Checked : Qt::Unchecked);
- checkbox->blockSignals(false);
- break;
- }
- default:
- {
- LOG_WARNING() << "unknown EncTTsSetting";
- break;
+ m_busyCnt--;
}
}
}
-void EncTtsCfgGui::showBusy()
-{
- if(m_busyCnt == 0) m_busyDlg->show();
-
- m_busyCnt++;
-}
-
-void EncTtsCfgGui::hideBusy()
-{
- m_busyCnt--;
-
- if(m_busyCnt == 0) m_busyDlg->hide();
-}
-
void EncTtsCfgGui::accept(void)
{
@@ -365,20 +308,4 @@ void EncTtsCfgGui::reject(void)
this->done(0);
}
-//! takes a QObject because of QsignalMapper
-void EncTtsCfgGui::browse(QObject* settingObj)
-{
- // cast top setting
- EncTtsSetting* setting= qobject_cast<EncTtsSetting*>(settingObj);
- if(setting == nullptr) return;
-
- //current path
- QString curPath = setting->current().toString();
- // show file dialog
- QString exe = QFileDialog::getOpenFileName(this, tr("Select executable"), curPath, "*");
- if(!QFileInfo(exe).isExecutable())
- return;
- // set new value, gui will update automatically
- setting->setCurrent(exe);
-}
diff --git a/utils/rbutilqt/encttscfggui.h b/utils/rbutilqt/encttscfggui.h
index 80af86dabc..109aebd399 100644
--- a/utils/rbutilqt/encttscfggui.h
+++ b/utils/rbutilqt/encttscfggui.h
@@ -40,16 +40,8 @@ private slots:
void accept(void);
//! close window and dont save configuration
void reject(void);
- //! updates the corresponding setting from the sending Widget
- void updateSetting();
- //! updates corresponding Widget from the sending Setting.
- void updateWidget();
- //! shows a busy dialog. counts calls.
- void showBusy();
- //! hides the busy dialog, counts calls
- void hideBusy();
- //! used via the SignalMapper for all Browse buttons
- void browse(QObject*);
+ //! show / hide the busy dialog, counts calls
+ void busyDialog(bool show);
private:
//! creates all dynamic window content
@@ -67,9 +59,7 @@ private:
//! List of settings from the TTS or Encoder
QList<EncTtsSetting*> m_settingsList;
//! Maps settings and the correspondig Widget
- QMap<EncTtsSetting*,QWidget*> m_settingsWidgetsMap;
- //! Maps all browse buttons to the corresponding Setting
- QSignalMapper m_browseBtnMap;
+ QMap<EncTtsSetting*, QWidget*> m_settingsWidgetsMap;
//! counter how often busyShow() is called,
int m_busyCnt;
};
diff --git a/utils/rbutilqt/gui/infowidget.cpp b/utils/rbutilqt/gui/infowidget.cpp
index 25b0503090..b0e76a7bf4 100644
--- a/utils/rbutilqt/gui/infowidget.cpp
+++ b/utils/rbutilqt/gui/infowidget.cpp
@@ -36,26 +36,20 @@ InfoWidget::InfoWidget(QWidget *parent) : QWidget(parent)
void InfoWidget::updateInfo(void)
{
- LOG_INFO() << "updating server info";
+ LOG_INFO() << "updating install info";
QString mp = RbSettings::value(RbSettings::Mountpoint).toString();
QSettings log(mp + "/.rockbox/rbutil.log", QSettings::IniFormat, this);
QStringList groups = log.childGroups();
- QList<QTreeWidgetItem *> items;
QTreeWidgetItem *w, *w2;
QString min, max;
- int olditems = 0;
+ QTreeWidgetItem *loading = new QTreeWidgetItem;
+ loading->setText(0, tr("Loading, please wait ..."));
+ ui.treeInfo->clear();
+ ui.treeInfo->addTopLevelItem(loading);
+ ui.treeInfo->resizeColumnToContents(0);
+ QCoreApplication::processEvents();
- // remove old list entries (if any)
- int l = ui.treeInfo->topLevelItemCount();
- while(l--) {
- QTreeWidgetItem *m;
- m = ui.treeInfo->takeTopLevelItem(l);
- // delete childs (single level deep, no recursion here)
- int n = m->childCount();
- while(n--)
- delete m->child(n);
- }
// get and populate new items
for(int a = 0; a < groups.size(); a++) {
log.beginGroup(groups.at(a));
@@ -63,40 +57,38 @@ void InfoWidget::updateInfo(void)
w = new QTreeWidgetItem;
w->setFlags(Qt::ItemIsEnabled);
w->setText(0, groups.at(a));
- items.append(w);
+ ui.treeInfo->addTopLevelItem(w);
// get minimum and maximum version information so we can hilight old files
min = max = log.value(keys.at(0)).toString();
for(int b = 0; b < keys.size(); b++) {
- if(log.value(keys.at(b)).toString() > max)
- max = log.value(keys.at(b)).toString();
- if(log.value(keys.at(b)).toString() < min)
- min = log.value(keys.at(b)).toString();
- }
+ QString v = log.value(keys.at(b)).toString();
+ if(v > max)
+ max = v;
+ if(v < min)
+ min = v;
- for(int b = 0; b < keys.size(); b++) {
- QString file;
- file = mp + "/" + keys.at(b);
- if(QFileInfo(file).isDir())
+ QString file = mp + "/" + keys.at(b);
+ if(QFileInfo(file).isDir()) {
+ // ignore folders
continue;
+ }
w2 = new QTreeWidgetItem(w, QStringList() << "/"
- + keys.at(b) << log.value(keys.at(b)).toString());
- if(log.value(keys.at(b)).toString() != max) {
+ + keys.at(b) << v);
+ if(v != max) {
w2->setForeground(0, QBrush(QColor(255, 0, 0)));
w2->setForeground(1, QBrush(QColor(255, 0, 0)));
- olditems++;
}
- items.append(w2);
+ w->addChild(w2);
}
log.endGroup();
if(min != max)
w->setData(1, Qt::DisplayRole, QString("%1 / %2").arg(min, max));
else
w->setData(1, Qt::DisplayRole, max);
+ QCoreApplication::processEvents();
}
- ui.treeInfo->insertTopLevelItems(0, items);
- ui.treeInfo->expandAll();
+ ui.treeInfo->takeTopLevelItem(0);
ui.treeInfo->resizeColumnToContents(0);
- ui.treeInfo->collapseAll();
}
diff --git a/utils/rbutilqt/gui/selectiveinstallwidget.cpp b/utils/rbutilqt/gui/selectiveinstallwidget.cpp
index 638082091b..28dd50d482 100644
--- a/utils/rbutilqt/gui/selectiveinstallwidget.cpp
+++ b/utils/rbutilqt/gui/selectiveinstallwidget.cpp
@@ -36,7 +36,6 @@ SelectiveInstallWidget::SelectiveInstallWidget(QWidget* parent) : QWidget(parent
ui.setupUi(this);
ui.rockboxCheckbox->setChecked(RbSettings::value(RbSettings::InstallRockbox).toBool());
ui.fontsCheckbox->setChecked(RbSettings::value(RbSettings::InstallFonts).toBool());
- ui.themesCheckbox->setChecked(RbSettings::value(RbSettings::InstallThemes).toBool());
ui.pluginDataCheckbox->setChecked(RbSettings::value(RbSettings::InstallPluginData).toBool());
ui.voiceCheckbox->setChecked(RbSettings::value(RbSettings::InstallVoice).toBool());
ui.manualCheckbox->setChecked(RbSettings::value(RbSettings::InstallManual).toBool());
@@ -52,14 +51,16 @@ SelectiveInstallWidget::SelectiveInstallWidget(QWidget* parent) : QWidget(parent
m_logger = nullptr;
m_zipinstaller = nullptr;
- m_themesinstaller = nullptr;
+ m_themesinstaller = new ThemesInstallWindow(this);
+ connect(m_themesinstaller, &ThemesInstallWindow::selected,
+ [this](int count) {ui.themesCheckbox->setChecked(count > 0);});
connect(ui.installButton, &QAbstractButton::clicked,
this, &SelectiveInstallWidget::startInstall);
connect(this, &SelectiveInstallWidget::installSkipped,
this, &SelectiveInstallWidget::continueInstall);
connect(ui.themesCustomize, &QAbstractButton::clicked,
- this, &SelectiveInstallWidget::customizeThemes);
+ [this]() { m_themesinstaller->show(); } );
connect(ui.selectedVersion, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
this, &SelectiveInstallWidget::selectedVersionChanged);
// update version information. This also handles setting the previously
@@ -97,6 +98,12 @@ void SelectiveInstallWidget::selectedVersionChanged(int index)
ui.voiceCombobox->setEnabled(voice);
ui.voiceLabel->setEnabled(voice);
ui.voiceCheckbox->setToolTip(voice ? "" : tr("Not available for the selected version"));
+ QString fontsurl = PlayerBuildInfo::instance()->value(
+ PlayerBuildInfo::BuildFontUrl, m_buildtype).toString();
+ ui.fontsCheckbox->setEnabled(!fontsurl.isEmpty());
+ QString manualurl = PlayerBuildInfo::instance()->value(
+ PlayerBuildInfo::BuildManualUrl, m_buildtype).toString();
+ ui.manualCheckbox->setEnabled(!manualurl.isEmpty());
updateVoiceLangs();
}
@@ -196,7 +203,6 @@ void SelectiveInstallWidget::saveSettings(void)
RbSettings::setValue(RbSettings::InstallRockbox, ui.rockboxCheckbox->isChecked());
RbSettings::setValue(RbSettings::InstallFonts, ui.fontsCheckbox->isChecked());
- RbSettings::setValue(RbSettings::InstallThemes, ui.themesCheckbox->isChecked());
RbSettings::setValue(RbSettings::InstallPluginData, ui.pluginDataCheckbox->isChecked());
RbSettings::setValue(RbSettings::InstallVoice, ui.voiceCheckbox->isChecked());
RbSettings::setValue(RbSettings::InstallManual, ui.manualCheckbox->isChecked());
@@ -292,7 +298,6 @@ void SelectiveInstallWidget::installBootloader(void)
// the bootloader install class does NOT use any GUI stuff.
// All messages are passed via signals.
- connect(bl, &BootloaderInstallBase::done, m_logger, &ProgressLoggerGui::setFinished);
connect(bl, &BootloaderInstallBase::done, this, &SelectiveInstallWidget::continueInstall);
connect(bl, &BootloaderInstallBase::logItem, m_logger, &ProgressLoggerGui::addItem);
connect(bl, &BootloaderInstallBase::logProgress, m_logger, &ProgressLoggerGui::setProgress);
@@ -302,12 +307,7 @@ void SelectiveInstallWidget::installBootloader(void)
// set bootloader filename. Do this now as installed() needs it.
QStringList blfile = PlayerBuildInfo::instance()->value(
PlayerBuildInfo::BootloaderFile).toStringList();
- QStringList blfilepath;
- for(int a = 0; a < blfile.size(); a++) {
- blfilepath.append(RbSettings::value(RbSettings::Mountpoint).toString()
- + blfile.at(a));
- }
- bl->setBlFile(blfilepath);
+ bl->setBlFile(RbSettings::value(RbSettings::Mountpoint).toString(), blfile);
QUrl url(PlayerBuildInfo::instance()->value(PlayerBuildInfo::BootloaderUrl).toString()
+ PlayerBuildInfo::instance()->value(PlayerBuildInfo::BootloaderName).toString());
bl->setBlUrl(url);
@@ -583,28 +583,16 @@ void SelectiveInstallWidget::installManual(void)
}
}
-void SelectiveInstallWidget::customizeThemes(void)
-{
- if(m_themesinstaller == nullptr)
- m_themesinstaller = new ThemesInstallWindow(this);
-
- m_themesinstaller->setSelectOnly(true);
- m_themesinstaller->show();
-}
-
-
void SelectiveInstallWidget::installThemes(void)
{
if(ui.themesCheckbox->isChecked()) {
LOG_INFO() << "installing themes";
- if(m_themesinstaller == nullptr)
- m_themesinstaller = new ThemesInstallWindow(this);
- connect(m_themesinstaller, &ThemesInstallWindow::done,
- this, &SelectiveInstallWidget::continueInstall);
m_themesinstaller->setLogger(m_logger);
m_themesinstaller->setModal(true);
m_themesinstaller->install();
+ connect(m_themesinstaller, &ThemesInstallWindow::finished,
+ this, &SelectiveInstallWidget::continueInstall);
}
else {
LOG_INFO() << "Themes install disabled.";
diff --git a/utils/rbutilqt/gui/selectiveinstallwidget.h b/utils/rbutilqt/gui/selectiveinstallwidget.h
index c961a387e0..d430cecb10 100644
--- a/utils/rbutilqt/gui/selectiveinstallwidget.h
+++ b/utils/rbutilqt/gui/selectiveinstallwidget.h
@@ -39,7 +39,6 @@ class SelectiveInstallWidget : public QWidget
private slots:
void continueInstall(bool);
- void customizeThemes(void);
void selectedVersionChanged(int);
void updateVoiceLangs();
diff --git a/utils/rbutilqt/lang/rbutil_cs.ts b/utils/rbutilqt/lang/rbutil_cs.ts
index a6e38d2555..aca73ab84c 100644
--- a/utils/rbutilqt/lang/rbutil_cs.ts
+++ b/utils/rbutilqt/lang/rbutil_cs.ts
@@ -40,42 +40,42 @@
<translation>Z&amp;rušit</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="70"/>
+ <location filename="../gui/backupdialog.cpp" line="69"/>
<source>Installation size: calculating ...</source>
<translation>Počítám celikost instalace ...</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="89"/>
+ <location filename="../gui/backupdialog.cpp" line="88"/>
<source>Select Backup Filename</source>
<translation>Vyberte pojmenování zálohy</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="109"/>
+ <location filename="../gui/backupdialog.cpp" line="108"/>
<source>Installation size: %L1 %2</source>
<translation>Velikost instalace: %L1 %2</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="116"/>
+ <location filename="../gui/backupdialog.cpp" line="115"/>
<source>File exists</source>
<translation>Soubor už existuje</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="117"/>
+ <location filename="../gui/backupdialog.cpp" line="116"/>
<source>The selected backup file already exists. Overwrite?</source>
<translation>Soubor se zálohou již existuje. Přepsat?</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="125"/>
+ <location filename="../gui/backupdialog.cpp" line="124"/>
<source>Starting backup ...</source>
<translation>Spouštím zálohování ...</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="144"/>
+ <location filename="../gui/backupdialog.cpp" line="143"/>
<source>Backup successful.</source>
<translation>Zálohování úspěšné.</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="147"/>
+ <location filename="../gui/backupdialog.cpp" line="146"/>
<source>Backup failed!</source>
<translation>Zálohování selhalo!</translation>
</message>
@@ -130,94 +130,142 @@
</message>
</context>
<context>
+ <name>BootloaderInstallBSPatch</name>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="65"/>
+ <source>Bootloader installation requires you to provide the correct verrsion of the original firmware file. This file will be patched with the Rockbox bootloader and installed to your player. You need to download this file yourself due to legal reasons. Please refer to the &lt;a href=&apos;http://www.rockbox.org/wiki/&apos;&gt;rockbox wiki&lt;/a&gt; pages on how to obtain this file.&lt;br/&gt;Press Ok to continue and browse your computer for the firmware file.</source>
+ <translation>Instalace zavaděče vyžaduje správnou verzi souboru původního firmware. Ten bude doplněn zavaděčem Rockboxu a instalován na váš přehrávač.Z právních důvodů si tento soubor musíte stáhnou sami. Podívejte se prosím na &lt;a href=&apos;http://www.rockbox.org/wiki/&apos;&gt;rockbox wiki&lt;/a&gt; &gt; stránky jak ho získat. &lt;br/&gt;Vyberte OK pro pokračování a vyberte umístění souboru ve vašem počítači.</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="84"/>
+ <source>Could not read original firmware file</source>
+ <translation>Nepodařilo se přečíst původní firmware</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="90"/>
+ <source>Downloading bootloader file</source>
+ <translation>Stahuji soubor zavaděče</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="99"/>
+ <source>Patching file...</source>
+ <translation>Patchuji soubor...</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="124"/>
+ <source>Patching the original firmware failed</source>
+ <translation>Patchování původního firmware selhalo</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="130"/>
+ <source>Succesfully patched firmware file</source>
+ <translation>Soubor firmware úspěšně opatchován</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="145"/>
+ <source>Bootloader successful installed</source>
+ <translation>Zavaděč úspěšně nainstalován</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="151"/>
+ <source>Patched bootloader could not be installed</source>
+ <translation>Opatchovaný zavaděč nemohl být nainstalován</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="161"/>
+ <source>To uninstall, perform a normal upgrade with an unmodified original firmware.</source>
+ <translation>Pro odinstalaci proveďte běžnou aktualizaci s neupravovaným původním firmware.</translation>
+ </message>
+</context>
+<context>
<name>BootloaderInstallBase</name>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="78"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="69"/>
<source>Download error: received HTTP error %1.</source>
<translation>Chyba stahování: chyba HTTP %1.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="84"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="75"/>
<source>Download error: %1</source>
<translation>Chyba stahování: %1</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="90"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="81"/>
<source>Download finished (cache used).</source>
<translation>Stahování dokončeno (použita vyrovnávací paměť).</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="92"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="83"/>
<source>Download finished.</source>
<translation>Stahování dokončeno.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="120"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="112"/>
<source>Creating backup of original firmware file.</source>
<translation>Vytváří se záloha původního souboru firmware.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="122"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="114"/>
<source>Creating backup folder failed</source>
<translation>Vytvoření záložního adresáře selhalo</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="128"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="120"/>
<source>Creating backup copy failed.</source>
<translation>Vytvoření záložní kopie selhalo.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="131"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="123"/>
<source>Backup created.</source>
<translation>Záloha vytvořena.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="144"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="140"/>
<source>Creating installation log</source>
<translation>Vytváření instalačního výpisu</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="156"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="152"/>
<source>Installation log created</source>
<translation>Instalační výpis vytvořen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="233"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="245"/>
<source>Zip file format detected</source>
<translation>Zjištěn formát zip</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="245"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="257"/>
<source>CAB file format detected</source>
<translation>Zjištěn formát CAB</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="266"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="278"/>
<source>Extracting firmware %1 from archive</source>
<translation>Rozbaluji firmware %1 z archivu</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="273"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="285"/>
<source>Error extracting firmware from archive</source>
<translation>Chyba rozbalování fimware z archivu</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="282"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="294"/>
<source>Could not find firmware in archive</source>
<translation>Firmware v archivu nenalezen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="166"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="162"/>
<source>Waiting for system to remount player</source>
<translation>Čekám na znovupřipojení přehrávače</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="196"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="192"/>
<source>Player remounted</source>
<translation>Přehrávač znovupřipojen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="201"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="197"/>
<source>Timeout on remount</source>
<translation>Vypršel limit znovuzavedení</translation>
</message>
@@ -554,27 +602,27 @@
<translation>Patchuji soubor...</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="137"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="136"/>
<source>Patching the original firmware failed</source>
<translation>Patchování původního firmware selhalo</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="143"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="142"/>
<source>Succesfully patched firmware file</source>
<translation>Soubor firmware úspěšně opatchován</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="158"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="157"/>
<source>Bootloader successful installed</source>
<translation>Zavaděč úspěšně nainstalován</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="164"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="163"/>
<source>Patched bootloader could not be installed</source>
<translation>Opatchovaný zavaděč nemohl být nainstalován</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="175"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="174"/>
<source>To uninstall, perform a normal upgrade with an unmodified original firmware.</source>
<translation>Pro odinstalaci proveďte běžnou aktualizaci s neupravovaným původním firmware.</translation>
</message>
@@ -582,112 +630,111 @@
<context>
<name>BootloaderInstallIpod</name>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="49"/>
<source>Error: can&apos;t allocate buffer memory!</source>
- <translation>Chyba: Nemohu alokovat vyrovnávací paměť!</translation>
+ <translation type="vanished">Chyba: Nemohu alokovat vyrovnávací paměť!</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="80"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="72"/>
<source>Downloading bootloader file</source>
<translation>Stahuji soubor zavaděče</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="90"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="82"/>
<source>Installing Rockbox bootloader</source>
<translation>Instaluji zavaděč Rockboxu</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="64"/>
- <location filename="../base/bootloaderinstallipod.cpp" line="151"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="56"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="143"/>
<source>Failed to read firmware directory</source>
<translation>Chyba čtení adresáře firmwaru</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="69"/>
- <location filename="../base/bootloaderinstallipod.cpp" line="156"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="61"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="148"/>
<source>Unknown version number in firmware (%1)</source>
<translation>Neznámá verze firmwaru (%1)</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="75"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="67"/>
<source>Warning: This is a MacPod, Rockbox only runs on WinPods.
See http://www.rockbox.org/wiki/IpodConversionToFAT32</source>
<translation>Pozor: Tohle je MacPod, Rockbox funguje pouzena WinPodu.
Viz http://www.rockbox.org/wiki/IpodConversionToFAT32</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="94"/>
- <location filename="../base/bootloaderinstallipod.cpp" line="163"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="86"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="155"/>
<source>Could not open Ipod in R/W mode</source>
<translation>Nelze otevřít Ipod pro čtení a zápis</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="104"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="96"/>
<source>Successfull added bootloader</source>
<translation>Zavaděč úspěšně přidán</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="115"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="107"/>
<source>Failed to add bootloader</source>
<translation>Přidání zavaděče selhalo</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="127"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="119"/>
<source>Bootloader Installation complete.</source>
<translation>Zavaděč úspěšně nainstalován.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="132"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="124"/>
<source>Writing log aborted</source>
<translation>Zápis výpisu přerušen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="142"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="134"/>
<source>Uninstalling bootloader</source>
<translation>Odinstalace zavaděče</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="169"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="161"/>
<source>No bootloader detected.</source>
<translation>Zavaděč nenalezen.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="175"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="167"/>
<source>Successfully removed bootloader</source>
<translation>Zavaděč úspěšně odstraněn</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="183"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="175"/>
<source>Removing bootloader failed.</source>
<translation>Odstranění zavaděče selhalo.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="229"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="241"/>
<source>Error: could not retrieve device name</source>
<translation>Chyba: nepodařilo se zjistit jméno zařízení</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="245"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="257"/>
<source>Error: no mountpoint specified!</source>
<translation>Chyba: Není zvolen přípojný bod!</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="250"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="262"/>
<source>Could not open Ipod: permission denied</source>
<translation>Nelze otevřít Ipod: nepovolený přístup</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="254"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="266"/>
<source>Could not open Ipod</source>
<translation>Nelze otevřít Ipod</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="259"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="271"/>
<source>Error reading partition table - possibly not an Ipod</source>
<translation>Chyba při čtení tabulky oddílů - možná to není Ipod</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="265"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="277"/>
<source>No firmware partition on disk</source>
<translation>Na disku není oddíl s firmwarem</translation>
</message>
@@ -837,131 +884,207 @@ Viz http://www.rockbox.org/wiki/IpodConversionToFAT32</translation>
<translation>Stahuji soubor zavaděče...</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="110"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="113"/>
<source>Could not make DFU image.</source>
<translation>Nepodařilo se vytvořit obraz DFU.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="116"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="119"/>
<source>Ejecting iPod...</source>
<translation>Odpojuji iPod...</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="138"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="141"/>
+ <source>Action required:
+
+Please make sure no programs are accessing files on the device. If ejecting still fails please use your computers eject functionality.</source>
+ <translation>Je nutný zásah:
+
+Přesvědčte se prosím, že žádné programy nepracuj se soubory na zařízení. Jestliže odpojení přesto selže využijte prosím funkci odpojení vašeho počítače.</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="171"/>
+ <source>Action required:
+
+Quit iTunes application.</source>
+ <translation>Je nutný zásah:
+
+Ukončete aplikaci iTunes.</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="192"/>
+ <source>Could not suspend iTunesHelper. Stop it using the Task Manager, and try again.</source>
+ <translation>Nepodařilo se zavřít iTunesHelper. Ukončete ho prostřednictvím Správce úloh a zkuste to znovu.</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="218"/>
+ <source>Action required:
+
+Press and hold SELECT+MENU buttons, after about 12 seconds a new action will require you to release the buttons, DO IT QUICKLY, otherwise the process could fail.</source>
+ <translation>Je nutný zásah:
+
+Zmáčkněte a držte tlačítka SELECT+MENU, po zhruba 12 sekundách bude nutné tlačítka pustit UDĚLEJTE TO RYCHLE, jinak může proces selhat.</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="243"/>
+ <source>Action required:
+
+Release SELECT+MENU buttons and wait...</source>
+ <translation>Je nutný zásah:
+
+Pusťte tlačítka SELECT+MENU a čekejte...</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="268"/>
+ <source>Device is not in DFU mode. It seems that the previous required action failed, please try again.</source>
+ <translation>Zařízení není v DFU režimu. Zdá se, že předchozí potřebný zásah selhal. Prosím, zkuste to znovu.</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="285"/>
+ <source>No valid DFU USB driver found.
+
+Install iTunes (or the Apple Device Driver) and try again.</source>
+ <translation>Nebyl nalezen platný DFU USB ovladač.
+
+Instalujte iTunes (nebo Apple Device Driver) a zkuste to znovu.</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="321"/>
+ <source>Action required:
+
+Could not remount the device, try to do it manually. If the iPod didn&apos;t restart, force a reset by pressing SELECT+MENU buttons for about 5 seconds. If the problem could not be solved then click &apos;Abort&apos; to cancel.</source>
+ <translation>Je nutný zásah:
+
+Zařízení se nepodařilo znovu připojit, zkuste to prosím ručně. Jestliže se iPod nerestartoval, vynuťte restart stisknutím tlačítek SELECT+MENU na 5 sekund. Jestliže se problém nepodařilo vyřešit, klikněte na &apos;Zrušit&apos; pro přerušení.</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="336"/>
+ <source>Bootloader successfully installed.</source>
+ <translation>Zavaděč úspěšně nainstalován.</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="338"/>
+ <source>Bootloader successfully uninstalled.</source>
+ <translation>Zavaděč úspěšně odinstalován.</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="368"/>
+ <source>Install aborted by user.</source>
+ <translation>Instalace přerušena uživatelem.</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="370"/>
+ <source>Uninstall aborted by user.</source>
+ <translation>Odstalace přerušena uživatelem.</translation>
+ </message>
+ <message>
<source>Action required:
Please make sure no programs are accessing
files on the device. If ejecting still fails
please use your computers eject funtionality.</source>
- <translation>Je nutný zásah:
+ <translation type="vanished">Je nutný zásah:
Přesvědčte se prosím, že žádné programy nepracují
se soubory na zařízení. Jestliže odpojení přesto selže
využijte prosím funkci odpojení vašeho počítače.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="148"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="151"/>
<source>Device successfully ejected.</source>
<translation>Zařízení úspěšně odpojeno.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="168"/>
<source>Action required:
Quit iTunes application.</source>
- <translation>Je nutný zásah:
+ <translation type="vanished">Je nutný zásah:
Ukončete aplikaci iTunes.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="176"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="179"/>
<source>iTunes closed.</source>
<translation>iTunes ukončeny.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="189"/>
<source>Could not suspend iTunesHelper. Stop it
using the Task Manager, and try again.</source>
- <translation>Nepodařilo se zavřít iTunesHelper. Ukončete ho
+ <translation type="vanished">Nepodařilo se zavřít iTunesHelper. Ukončete ho
prostřednictvím Správce úloh a zkuste to znovu.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="198"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="201"/>
<source>Waiting for HDD spin-down...</source>
<translation>Čekám na zastavení HDD...</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="214"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="217"/>
<source>Waiting for DFU mode...</source>
<translation>Čekám na DFU režim...</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="215"/>
<source>Action required:
Press and hold SELECT+MENU buttons, after
about 12 seconds a new action will require
you to release the buttons, DO IT QUICKLY,
otherwise the process could fail.</source>
- <translation>Je nutný zásah:
+ <translation type="vanished">Je nutný zásah:
Zmáčkněte a držte tlačítka SELECT+MENU, po
zhruba 12 sekundách bude nutné tlačítka pustit
UDĚLEJTE TO RYCHLE, jinak může proces selhat.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="238"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="241"/>
<source>DFU mode detected.</source>
<translation>Zjištěn DFU režim.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="240"/>
<source>Action required:
Release SELECT+MENU buttons and wait...</source>
- <translation>Je nutný zásah:
+ <translation type="vanished">Je nutný zásah:
Pusťte tlačítka SELECT+MENU a čekejte...</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="265"/>
<source>Device is not in DFU mode. It seems that
the previous required action failed, please
try again.</source>
- <translation>Zařízení není v DFU režimu. Zdá se,
+ <translation type="vanished">Zařízení není v DFU režimu. Zdá se,
že předchozí potřebný zásah selhal. Prosím,
zkuste to znovu.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="272"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="275"/>
<source>Transfering DFU image...</source>
<translation>Přenáším DFU obraz...</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="282"/>
<source>No valid DFU USB driver found.
Install iTunes (or the Apple Device Driver)
and try again.</source>
- <translation>Nebyl nalezen platný DFU USB ovladač.
+ <translation type="vanished">Nebyl nalezen platný DFU USB ovladač.
Instalujte iTunes (nebo Apple Device Driver)
a zkuste to znovu.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="291"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="294"/>
<source>Could not transfer DFU image.</source>
<translation>Nebylo možné přenést DFU obraz.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="296"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="299"/>
<source>DFU transfer completed.</source>
<translation>Přenos DFU kompletní.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="299"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="302"/>
<source>Restarting iPod, waiting for remount...</source>
<translation>Restartuji iPod, čekám na znovupřipojení...</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="318"/>
<source>Action required:
Could not remount the device, try to do it
manually. If the iPod didn&apos;t restart, force
a reset by pressing SELECT+MENU buttons
for about 5 seconds. If the problem could
not be solved then click &apos;Abort&apos; to cancel.</source>
- <translation>Je nutný zásah:
+ <translation type="vanished">Je nutný zásah:
Zařízení se nepodařilo znovu připojit,
zkuste to prosím ručně. Jestliže se iPod
nerestartoval, vynuťte restart stisknutím
@@ -970,63 +1093,58 @@ a zkuste to znovu.</translation>
na &apos;Zrušit&apos; pro přerušení.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="330"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="333"/>
<source>Device remounted.</source>
<translation>Zařízení znovupřipojeno.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="332"/>
<source>Bootloader successfully %1.</source>
- <translation>Zavaděč úspěšně %1.</translation>
+ <translation type="vanished">Zavaděč úspěšně %1.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="345"/>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="350"/>
<source>Could not resume iTunesHelper.</source>
<translation>Nelze obnovit iTunesHelper.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstalls5l.cpp" line="361"/>
<source>%1 aborted by user.</source>
- <translation>%1 zrušeno uživatelem.</translation>
+ <translation type="vanished">%1 zrušeno uživatelem.</translation>
</message>
</context>
<context>
<name>BootloaderInstallSansa</name>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="50"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="54"/>
<source>Error: can&apos;t allocate buffer memory!</source>
<translation>Chyba: Nemohu alokovat vyrovnávací paměť!</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="55"/>
<source>Searching for Sansa</source>
- <translation>Hledám Sansu</translation>
+ <translation type="vanished">Hledám Sansu</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="59"/>
<source>Permission for disc access denied!
This is required to install the bootloader</source>
- <translation>Nepovolen přístup k disku!
+ <translation type="vanished">Nepovolen přístup k disku!
Což je požadováno pro instalaci zavaděče</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="66"/>
<source>No Sansa detected!</source>
- <translation>Sansa nenalezena!</translation>
+ <translation type="vanished">Sansa nenalezena!</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="79"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="68"/>
<source>Downloading bootloader file</source>
<translation>Stahuji soubor zavaděče</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="94"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="83"/>
<source>Installing Rockbox bootloader</source>
<translation>Instaluji zavaděč Rockboxu</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="71"/>
- <location filename="../base/bootloaderinstallsansa.cpp" line="179"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="60"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="164"/>
<source>OLD ROCKBOX INSTALLATION DETECTED, ABORTING.
You must reinstall the original Sansa firmware before running
sansapatcher for the first time.
@@ -1039,78 +1157,78 @@ Viz http://www.rockbox.org/wiki/SansaE200Install
</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="102"/>
- <location filename="../base/bootloaderinstallsansa.cpp" line="189"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="87"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="174"/>
<source>Could not open Sansa in R/W mode</source>
<translation>Nelze otevřít Sansu pro čtení a zápis</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="111"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="96"/>
<source>Checking downloaded bootloader</source>
<translation>Kontroluji stažený zavaděč</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="119"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="104"/>
<source>Bootloader mismatch! Aborting.</source>
<translation>Nesloulad zavaděče! Přerušuji.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="129"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="114"/>
<source>Successfully installed bootloader</source>
<translation>Zavaděč úspěšně nainstalován</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="140"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="125"/>
<source>Failed to install bootloader</source>
<translation>Instalace zavaděče selhala</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="153"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="138"/>
<source>Bootloader Installation complete.</source>
<translation>Zavaděč úspěšně nainstalován.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="158"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="143"/>
<source>Writing log aborted</source>
<translation>Zápis výpisu přerušen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="170"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="155"/>
<source>Uninstalling bootloader</source>
<translation>Odinstalovávám zavaděč</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="195"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="180"/>
<source>Successfully removed bootloader</source>
<translation>Zavaděč úspěšně odstraněn</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="203"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="188"/>
<source>Removing bootloader failed.</source>
<translation>Odstranění zavaděče selhalo.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="239"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="244"/>
<source>Error: could not retrieve device name</source>
<translation>Chyba: nepodařilo se zjistit jméno zařízení</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="255"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="260"/>
<source>Can&apos;t find Sansa</source>
<translation>Nelze najít Sansu</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="260"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="265"/>
<source>Could not open Sansa</source>
<translation>Sansu nelze otevřít</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="265"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="270"/>
<source>Could not read partition table</source>
<translation>Nelze přečíst tabulku oddílů</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="272"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="277"/>
<source>Disk is not a Sansa (Error %1), aborting.</source>
<translation>Disk není Sansa (chyba %1), přerušuji.</translation>
</message>
@@ -1190,152 +1308,152 @@ Viz http://www.rockbox.org/wiki/SansaE200Install
<context>
<name>Config</name>
<message>
- <location filename="../configure.cpp" line="130"/>
+ <location filename="../configure.cpp" line="125"/>
<source>The following errors occurred:</source>
<translation>Nastaly následující problémy:</translation>
</message>
<message>
- <location filename="../configure.cpp" line="175"/>
+ <location filename="../configure.cpp" line="170"/>
<source>No mountpoint given</source>
<translation>Neposkytnut žádný přípojný bod</translation>
</message>
<message>
- <location filename="../configure.cpp" line="179"/>
+ <location filename="../configure.cpp" line="174"/>
<source>Mountpoint does not exist</source>
<translation>Přípojný bod neexistuje</translation>
</message>
<message>
- <location filename="../configure.cpp" line="183"/>
+ <location filename="../configure.cpp" line="178"/>
<source>Mountpoint is not a directory.</source>
<translation>Přípojný bod není adresář.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="187"/>
+ <location filename="../configure.cpp" line="182"/>
<source>Mountpoint is not writeable</source>
<translation>Do přípojného bodu nelze zapisovat</translation>
</message>
<message>
- <location filename="../configure.cpp" line="202"/>
+ <location filename="../configure.cpp" line="197"/>
<source>No player selected</source>
<translation>Nevybrán žádný přehrávač</translation>
</message>
<message>
- <location filename="../configure.cpp" line="209"/>
+ <location filename="../configure.cpp" line="204"/>
<source>Cache path not writeable. Leave path empty to default to systems temporary path.</source>
<translation>Do zadané vyrovnávací paměti nelze zapisovat. Ponechejte prázdné pro nasměrování do dočasné složky systému.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="228"/>
+ <location filename="../configure.cpp" line="223"/>
<source>You need to fix the above errors before you can continue.</source>
<translation>Budete muset opravit výše uvedené chyby, než budete moci pokračovat.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="231"/>
+ <location filename="../configure.cpp" line="226"/>
<source>Configuration error</source>
<translation>Chyba nastavení</translation>
</message>
<message>
- <location filename="../configure.cpp" line="322"/>
+ <location filename="../configure.cpp" line="310"/>
<source>Current cache size is %L1 kiB.</source>
<translation>Aktuální velikost vyrovnávací paměti je %L1 kiB.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="340"/>
+ <location filename="../configure.cpp" line="328"/>
<source>Showing disabled targets</source>
<translation>Zobrazit skrytá zařízení</translation>
</message>
<message>
- <location filename="../configure.cpp" line="341"/>
+ <location filename="../configure.cpp" line="329"/>
<source>You just enabled showing targets that are marked disabled. Disabled targets are not recommended to end users. Please use this option only if you know what you are doing.</source>
<translation>Vybrali jste zobrazení zařízení, která jsou skrytá. Ta nejsou doporučena pro běžné uživatele. Pokračujte jen pokud víte, co děláte.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="448"/>
- <location filename="../configure.cpp" line="914"/>
+ <location filename="../configure.cpp" line="438"/>
+ <location filename="../configure.cpp" line="904"/>
<source>TTS error</source>
<translation>Chyba syntézy řeči</translation>
</message>
<message>
- <location filename="../configure.cpp" line="449"/>
- <location filename="../configure.cpp" line="915"/>
+ <location filename="../configure.cpp" line="439"/>
+ <location filename="../configure.cpp" line="905"/>
<source>The selected TTS failed to initialize. You can&apos;t use this TTS.</source>
<translation>Spuštění vybrané syntézy řeči selhalo a nelze ji použít.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="455"/>
- <location filename="../configure.cpp" line="485"/>
+ <location filename="../configure.cpp" line="445"/>
+ <location filename="../configure.cpp" line="479"/>
<source>Configuration OK</source>
<translation>Nastavení je v pořádku</translation>
</message>
<message>
- <location filename="../configure.cpp" line="461"/>
- <location filename="../configure.cpp" line="490"/>
+ <location filename="../configure.cpp" line="455"/>
+ <location filename="../configure.cpp" line="484"/>
<source>Configuration INVALID</source>
<translation>Nastavení není platné</translation>
</message>
<message>
- <location filename="../configure.cpp" line="529"/>
+ <location filename="../configure.cpp" line="523"/>
<source>Proxy Detection</source>
<translation>Zjištění proxy</translation>
</message>
<message>
- <location filename="../configure.cpp" line="530"/>
+ <location filename="../configure.cpp" line="524"/>
<source>The System Proxy settings are invalid!
Rockbox Utility can&apos;t work with this proxy settings. Make sure the system proxy is set correctly. Note that &quot;proxy auto-config (PAC)&quot; scripts are not supported by Rockbox Utility. If your system uses this you need to use manual proxy settings.</source>
<translation>Chybné nastavení proxy v systému!
S tímto nastavením proxy nebude Rockbox Utilita fungovat. Ověřte, zda je v systému správně nastavena proxy. Skripty automatické konfigurace proxy (PAC) nejsou podporovány. Jestliže je váš systém používá, musíte proxy nastavit ručně.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="643"/>
+ <location filename="../configure.cpp" line="634"/>
<source>Set Cache Path</source>
<translation>Umístění vyrovnávací paměti</translation>
</message>
<message>
- <location filename="../configure.cpp" line="665"/>
+ <location filename="../configure.cpp" line="656"/>
<source>%1 (%2 GiB of %3 GiB free)</source>
<translation>%1 (%2 GiB of %3 GiB volné)</translation>
</message>
<message>
- <location filename="../configure.cpp" line="739"/>
+ <location filename="../configure.cpp" line="730"/>
<source>Multiple devices have been detected. Please disconnect all players but one and try again.</source>
<translation>Bylo zjištěno více zařízení. Odpojte prosím všechny nepotřebné a zkuste to znovu.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="742"/>
+ <location filename="../configure.cpp" line="733"/>
<source>Detected devices:</source>
<translation>Zjištěná zařízení:</translation>
</message>
<message>
- <location filename="../configure.cpp" line="747"/>
+ <location filename="../configure.cpp" line="738"/>
<source>(unknown)</source>
<translation>(neznámé)</translation>
</message>
<message>
- <location filename="../configure.cpp" line="749"/>
+ <location filename="../configure.cpp" line="740"/>
<source>%1 at %2</source>
<translation>%1 na %2</translation>
</message>
<message>
- <location filename="../configure.cpp" line="755"/>
+ <location filename="../configure.cpp" line="747"/>
<source>Note: detecting connected devices might be ambiguous. You might have less devices connected than listed. In this case it might not be possible to detect your player unambiguously.</source>
<translation>Poznámka: Nezjištění připojených zařízení může být z více důvodů. Můžete mít méně připojených zařízení, než je v seznamu. V tomto případě nemusí být možné jednoznačně zjistit váš přehrávač.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="759"/>
- <location filename="../configure.cpp" line="763"/>
- <location filename="../configure.cpp" line="805"/>
+ <location filename="../configure.cpp" line="751"/>
+ <location filename="../configure.cpp" line="755"/>
+ <location filename="../configure.cpp" line="800"/>
<source>Device Detection</source>
<translation>Zjištění zařízení</translation>
</message>
<message>
- <location filename="../configure.cpp" line="780"/>
+ <location filename="../configure.cpp" line="773"/>
<source>%1 in MTP mode found!
You need to change your player to MSC mode for installation. </source>
<translation>Nalezen %1 v MTP režimu!
Musíte přepnout váš přehrávač do MSC módu, aby instalace proběhla. </translation>
</message>
<message>
- <location filename="../configure.cpp" line="788"/>
+ <location filename="../configure.cpp" line="782"/>
<source>%1 &quot;MacPod&quot; found!
Rockbox needs a FAT formatted Ipod (so-called &quot;WinPod&quot;) to run. </source>
<translation>Nalezen %1 &quot;MacPod&quot;!
@@ -1346,7 +1464,7 @@ Rockbox potřebuje k běhu Ipod naformátovaný jako FAT (tzv. &quot;WinPod&quot
<translation type="obsolete">Fatální chyba</translation>
</message>
<message>
- <location filename="../configure.cpp" line="774"/>
+ <location filename="../configure.cpp" line="766"/>
<source>Detected an unsupported player:
%1
Sorry, Rockbox doesn&apos;t run on your player.</source>
@@ -1359,100 +1477,100 @@ Je nám líto, Rockbox neběží na vašem přehrávači.</translation>
<translation type="obsolete">Fatální chyba: přehrávač neslučitelný</translation>
</message>
<message>
- <location filename="../configure.cpp" line="858"/>
+ <location filename="../configure.cpp" line="853"/>
<source>Autodetection</source>
<translation>Automatická detekce</translation>
</message>
<message>
- <location filename="../configure.cpp" line="859"/>
+ <location filename="../configure.cpp" line="854"/>
<source>Could not detect a Mountpoint.
Select your Mountpoint manually.</source>
<translation>Nelze zjistit přípojný bod.
Vyberte svůj přípojný bod ručně.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="764"/>
+ <location filename="../configure.cpp" line="756"/>
<source>Could not detect a device.
Select your device and Mountpoint manually.</source>
<translation>Nelze zjistit zařízení.
Vyberte své zařízení a přípojný bod ručně.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="794"/>
+ <location filename="../configure.cpp" line="789"/>
<source>The player contains an incompatible filesystem.
Make sure you selected the correct mountpoint and the player is set up to use a filesystem compatible with Rockbox.</source>
<translation>Přehrávač má nekompatibilní souborový systém.
Ujistěte se, že přehrávač je ve správném přípojném bodu a má souborový systém slučitelný s Rockboxem.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="802"/>
+ <location filename="../configure.cpp" line="797"/>
<source>An unknown error occured during player detection.</source>
<translation>Při detekci přehrávače nastala neznámá chyba.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="869"/>
+ <location filename="../configure.cpp" line="864"/>
<source>Really delete cache?</source>
<translation>Opravdu vymazat vyrovnávací paměť?</translation>
</message>
<message>
- <location filename="../configure.cpp" line="870"/>
+ <location filename="../configure.cpp" line="865"/>
<source>Do you really want to delete the cache? Make absolutely sure this setting is correct as it will remove &lt;b&gt;all&lt;/b&gt; files in this folder!</source>
<translation>Chcete opravdu vymazat vyrovnávací paměť? Ujistěte se, že ano, protože se odstraní &lt;b&gt;veškeré&lt;/b&gt; soubory v tomto adresáři!</translation>
</message>
<message>
- <location filename="../configure.cpp" line="878"/>
+ <location filename="../configure.cpp" line="873"/>
<source>Path wrong!</source>
<translation>Chybná cesta!</translation>
</message>
<message>
- <location filename="../configure.cpp" line="879"/>
+ <location filename="../configure.cpp" line="874"/>
<source>The cache path is invalid. Aborting.</source>
<translation>Umístění vyrovnávací paměti je chybné. Přerušuji.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="921"/>
+ <location filename="../configure.cpp" line="911"/>
<source>TTS configuration invalid</source>
<translation>Nastavení syntézy řeči je chybné</translation>
</message>
<message>
- <location filename="../configure.cpp" line="922"/>
+ <location filename="../configure.cpp" line="912"/>
<source>TTS configuration invalid.
Please configure TTS engine.</source>
<translation>Nastavení syntézy řeči je chybné.
Prosím nastavte engine snytézy řeči.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="927"/>
+ <location filename="../configure.cpp" line="917"/>
<source>Could not start TTS engine.</source>
<translation>Nelze spustit engine syntézy řeči.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="928"/>
+ <location filename="../configure.cpp" line="918"/>
<source>Could not start TTS engine.
</source>
<translation>Nelze spustit engine syntézy řeči.
</translation>
</message>
<message>
- <location filename="../configure.cpp" line="929"/>
- <location filename="../configure.cpp" line="948"/>
+ <location filename="../configure.cpp" line="919"/>
+ <location filename="../configure.cpp" line="938"/>
<source>
Please configure TTS engine.</source>
<translation>
Prosím nastavte engine syntézy řeči.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="943"/>
+ <location filename="../configure.cpp" line="933"/>
<source>Rockbox Utility Voice Test</source>
<translation>Hlasový test Rockbox Utility</translation>
</message>
<message>
- <location filename="../configure.cpp" line="946"/>
+ <location filename="../configure.cpp" line="936"/>
<source>Could not voice test string.</source>
<translation>Nepodařil se hlasový test řetězce.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="947"/>
+ <location filename="../configure.cpp" line="937"/>
<source>Could not voice test string.
</source>
<translation>Nepodařil se hlasový test řetězce.
@@ -1482,7 +1600,7 @@ Prosím nastavte engine syntézy řeči.</translation>
<translation>Vyberte své zařízení v &amp;systému</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="319"/>
+ <location filename="../configurefrm.ui" line="326"/>
<source>&amp;Browse</source>
<translation>&amp;Procházet</translation>
</message>
@@ -1557,42 +1675,42 @@ Prosím nastavte engine syntézy řeči.</translation>
<translation>Zobrazit</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="260"/>
+ <location filename="../configurefrm.ui" line="267"/>
<source>&amp;Language</source>
<translation>&amp;Jazyk</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="274"/>
+ <location filename="../configurefrm.ui" line="281"/>
<source>Cac&amp;he</source>
<translation>Vy&amp;rovnávací paměť</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="277"/>
+ <location filename="../configurefrm.ui" line="284"/>
<source>Download cache settings</source>
<translation>Nastavení vyrovnávací paměti stahování</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="283"/>
+ <location filename="../configurefrm.ui" line="290"/>
<source>Rockbox Utility uses a local download cache to save network traffic. You can change the path to the cache and use it as local repository by enabling Offline mode.</source>
<translation>Rockbox Utilita používá lokální vyrovnávací paměť, aby šetřila síťový přenos. Můžete změnit cestu do vyrovnávací paměti a použít ji jako lokální úložiště zvolením Offline módu.</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="293"/>
+ <location filename="../configurefrm.ui" line="300"/>
<source>Current cache size is %1</source>
<translation>Aktuální velikost vyrovnávací paměti je %1</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="302"/>
+ <location filename="../configurefrm.ui" line="309"/>
<source>P&amp;ath</source>
<translation>C&amp;esta</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="312"/>
+ <location filename="../configurefrm.ui" line="319"/>
<source>Entering an invalid folder will reset the path to the systems temporary path.</source>
<translation>Zadáním neplatného adresáře se resetuje cesta do dočasného adresáře systému.</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="334"/>
+ <location filename="../configurefrm.ui" line="341"/>
<source>Disable local &amp;download cache</source>
<translation>Zakázat lokální vyrovnávací paměť &amp;stahování</translation>
</message>
@@ -1605,73 +1723,73 @@ Prosím nastavte engine syntézy řeči.</translation>
<translation type="obsolete">O&amp;ffline mód</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="369"/>
+ <location filename="../configurefrm.ui" line="376"/>
<source>Clean cache &amp;now</source>
<translation>Vyčistit vyrovnávací &amp;paměť</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="385"/>
+ <location filename="../configurefrm.ui" line="392"/>
<source>&amp;TTS &amp;&amp; Encoder</source>
<translation>&amp;Syntéza řeči a enkodér</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="391"/>
+ <location filename="../configurefrm.ui" line="398"/>
<source>TTS Engine</source>
<translation>Engine syntézy řeči</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="397"/>
+ <location filename="../configurefrm.ui" line="404"/>
<source>&amp;Select TTS Engine</source>
<translation>&amp;Vyberte engine syntézy řeči</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="410"/>
+ <location filename="../configurefrm.ui" line="417"/>
<source>Configure TTS Engine</source>
<translation>Nastavení enginu syntézy řeči</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="417"/>
- <location filename="../configurefrm.ui" line="468"/>
+ <location filename="../configurefrm.ui" line="424"/>
+ <location filename="../configurefrm.ui" line="479"/>
<source>Configuration invalid!</source>
<translation>Chybně nastaven!</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="434"/>
+ <location filename="../configurefrm.ui" line="441"/>
<source>Configure &amp;TTS</source>
<translation>Nastavení &amp;syntézy řeči</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="445"/>
+ <location filename="../configurefrm.ui" line="452"/>
<source>Test TTS</source>
<translation>Testovat syntézu řeči</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="452"/>
+ <location filename="../configurefrm.ui" line="463"/>
<source>&amp;Use string corrections for TTS</source>
<translation>&amp;Použít opravy vláken pro syntézu řeči</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="462"/>
+ <location filename="../configurefrm.ui" line="473"/>
<source>Encoder Engine</source>
<translation>Engine enkodéru</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="485"/>
+ <location filename="../configurefrm.ui" line="496"/>
<source>Configure &amp;Enc</source>
<translation>Nastavení &amp;enkodéru</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="496"/>
+ <location filename="../configurefrm.ui" line="507"/>
<source>encoder name</source>
<translation>jméno enkodéru</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="536"/>
+ <location filename="../configurefrm.ui" line="547"/>
<source>&amp;Ok</source>
<translation>&amp;OK</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="547"/>
+ <location filename="../configurefrm.ui" line="558"/>
<source>&amp;Cancel</source>
<translation>&amp;Zrušit</translation>
</message>
@@ -1679,7 +1797,7 @@ Prosím nastavte engine syntézy řeči.</translation>
<context>
<name>Configure</name>
<message>
- <location filename="../configure.cpp" line="589"/>
+ <location filename="../configure.cpp" line="581"/>
<source>English</source>
<comment>This is the localized language name, i.e. your language.</comment>
<translation>Čeština</translation>
@@ -1703,12 +1821,12 @@ Prosím nastavte engine syntézy řeči.</translation>
<translation>Syntéza řeči:</translation>
</message>
<message>
- <location filename="../createvoicefrm.ui" line="101"/>
+ <location filename="../createvoicefrm.ui" line="105"/>
<source>Silence threshold</source>
<translation>Práh ticha</translation>
</message>
<message>
- <location filename="../createvoicefrm.ui" line="163"/>
+ <location filename="../createvoicefrm.ui" line="167"/>
<source>Language</source>
<translation>Jazyk</translation>
</message>
@@ -1718,22 +1836,22 @@ Prosím nastavte engine syntézy řeči.</translation>
<translation>Nastavení generování</translation>
</message>
<message>
- <location filename="../createvoicefrm.ui" line="68"/>
+ <location filename="../createvoicefrm.ui" line="72"/>
<source>Change</source>
<translation>Změnit</translation>
</message>
<message>
- <location filename="../createvoicefrm.ui" line="139"/>
+ <location filename="../createvoicefrm.ui" line="143"/>
<source>&amp;Install</source>
<translation>&amp;Instalovat</translation>
</message>
<message>
- <location filename="../createvoicefrm.ui" line="150"/>
+ <location filename="../createvoicefrm.ui" line="154"/>
<source>&amp;Cancel</source>
<translation>&amp;Zrušit</translation>
</message>
<message>
- <location filename="../createvoicefrm.ui" line="88"/>
+ <location filename="../createvoicefrm.ui" line="92"/>
<source>Wavtrim Threshold</source>
<translation>Práh Wavtrimu</translation>
</message>
@@ -1741,18 +1859,18 @@ Prosím nastavte engine syntézy řeči.</translation>
<context>
<name>CreateVoiceWindow</name>
<message>
- <location filename="../createvoicewindow.cpp" line="100"/>
+ <location filename="../createvoicewindow.cpp" line="106"/>
<source>TTS error</source>
<translation>Chyba syntézy řeči</translation>
</message>
<message>
- <location filename="../createvoicewindow.cpp" line="101"/>
+ <location filename="../createvoicewindow.cpp" line="107"/>
<source>The selected TTS failed to initialize. You can&apos;t use this TTS.</source>
<translation>Spuštění vybrané syntézy řeči selhalo a nelze ji použít.</translation>
</message>
<message>
- <location filename="../createvoicewindow.cpp" line="105"/>
- <location filename="../createvoicewindow.cpp" line="108"/>
+ <location filename="../createvoicewindow.cpp" line="111"/>
+ <location filename="../createvoicewindow.cpp" line="114"/>
<source>Engine: &lt;b&gt;%1&lt;/b&gt;</source>
<translation>Engine: &lt;b&gt;%1&lt;/b&gt;</translation>
</message>
@@ -1760,32 +1878,32 @@ Prosím nastavte engine syntézy řeči.</translation>
<context>
<name>EncTtsCfgGui</name>
<message>
- <location filename="../encttscfggui.cpp" line="45"/>
+ <location filename="../encttscfggui.cpp" line="44"/>
<source>Waiting for engine...</source>
<translation>Čekání na engine...</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="95"/>
+ <location filename="../encttscfggui.cpp" line="91"/>
<source>Ok</source>
<translation>OK</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="98"/>
+ <location filename="../encttscfggui.cpp" line="94"/>
<source>Cancel</source>
<translation>Zrušit</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="197"/>
+ <location filename="../encttscfggui.cpp" line="257"/>
<source>Browse</source>
<translation>Procházet</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="205"/>
+ <location filename="../encttscfggui.cpp" line="272"/>
<source>Refresh</source>
<translation>Obnovit</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="377"/>
+ <location filename="../encttscfggui.cpp" line="263"/>
<source>Select executable</source>
<translation>Vyberte spustitelný soubor</translation>
</message>
@@ -1793,12 +1911,12 @@ Prosím nastavte engine syntézy řeči.</translation>
<context>
<name>EncoderExe</name>
<message>
- <location filename="../base/encoderexe.cpp" line="41"/>
+ <location filename="../base/encoderexe.cpp" line="37"/>
<source>Path to Encoder:</source>
<translation>Cesta k enkodéru:</translation>
</message>
<message>
- <location filename="../base/encoderexe.cpp" line="43"/>
+ <location filename="../base/encoderexe.cpp" line="39"/>
<source>Encoder options:</source>
<translation>Možnosti enkodéru:</translation>
</message>
@@ -1806,23 +1924,23 @@ Prosím nastavte engine syntézy řeči.</translation>
<context>
<name>EncoderLame</name>
<message>
- <location filename="../base/encoderlame.cpp" line="73"/>
- <location filename="../base/encoderlame.cpp" line="83"/>
+ <location filename="../base/encoderlame.cpp" line="75"/>
+ <location filename="../base/encoderlame.cpp" line="85"/>
<source>LAME</source>
<translation>LAME</translation>
</message>
<message>
- <location filename="../base/encoderlame.cpp" line="75"/>
+ <location filename="../base/encoderlame.cpp" line="77"/>
<source>Volume</source>
<translation>Hlasitost</translation>
</message>
<message>
- <location filename="../base/encoderlame.cpp" line="79"/>
+ <location filename="../base/encoderlame.cpp" line="81"/>
<source>Quality</source>
<translation>Kvalita</translation>
</message>
<message>
- <location filename="../base/encoderlame.cpp" line="83"/>
+ <location filename="../base/encoderlame.cpp" line="85"/>
<source>Could not find libmp3lame!</source>
<translation>Nenalezena knihovna libmp3lame!</translation>
</message>
@@ -1854,16 +1972,21 @@ Prosím nastavte engine syntézy řeči.</translation>
<name>InfoWidget</name>
<message>
<location filename="../gui/infowidget.cpp" line="30"/>
- <location filename="../gui/infowidget.cpp" line="107"/>
+ <location filename="../gui/infowidget.cpp" line="99"/>
<source>File</source>
<translation>Soubor</translation>
</message>
<message>
<location filename="../gui/infowidget.cpp" line="30"/>
- <location filename="../gui/infowidget.cpp" line="107"/>
+ <location filename="../gui/infowidget.cpp" line="99"/>
<source>Version</source>
<translation>Verze</translation>
</message>
+ <message>
+ <location filename="../gui/infowidget.cpp" line="47"/>
+ <source>Loading, please wait ...</source>
+ <translation>Načítám, prosím čekejte...</translation>
+ </message>
</context>
<context>
<name>InfoWidgetFrm</name>
@@ -1911,32 +2034,32 @@ Prosím nastavte engine syntézy řeči.</translation>
<translation>Rekurzivně pro adresáře</translation>
</message>
<message>
- <location filename="../installtalkfrm.ui" line="111"/>
+ <location filename="../installtalkfrm.ui" line="115"/>
<source>Change</source>
<translation>Změnit</translation>
</message>
<message>
- <location filename="../installtalkfrm.ui" line="118"/>
+ <location filename="../installtalkfrm.ui" line="122"/>
<source>Ignore files</source>
<translation>Přeskočit soubory</translation>
</message>
<message>
- <location filename="../installtalkfrm.ui" line="128"/>
+ <location filename="../installtalkfrm.ui" line="132"/>
<source>Skip existing</source>
<translation>Přeskočit existující</translation>
</message>
<message>
- <location filename="../installtalkfrm.ui" line="143"/>
+ <location filename="../installtalkfrm.ui" line="147"/>
<source>&amp;Install</source>
<translation>&amp;Instalovat</translation>
</message>
<message>
- <location filename="../installtalkfrm.ui" line="154"/>
+ <location filename="../installtalkfrm.ui" line="158"/>
<source>&amp;Cancel</source>
<translation>&amp;Zrušit</translation>
</message>
<message>
- <location filename="../installtalkfrm.ui" line="170"/>
+ <location filename="../installtalkfrm.ui" line="174"/>
<source>Select folders for Talkfile generation (Ctrl for multiselect)</source>
<translation>Vyberte složky pro vytvoření souborů s hlasem (Pro více složek použijte Ctrl)</translation>
</message>
@@ -1954,22 +2077,22 @@ Prosím nastavte engine syntézy řeči.</translation>
<context>
<name>InstallTalkWindow</name>
<message>
- <location filename="../installtalkwindow.cpp" line="96"/>
+ <location filename="../installtalkwindow.cpp" line="95"/>
<source>Empty selection</source>
<translation>Prázdný výběr</translation>
</message>
<message>
- <location filename="../installtalkwindow.cpp" line="97"/>
+ <location filename="../installtalkwindow.cpp" line="96"/>
<source>No files or folders selected. Please select files or folders first.</source>
<translation>Nebyly vybrány soubory či složky. Nejprve prosím vyberte soubory či složky.</translation>
</message>
<message>
- <location filename="../installtalkwindow.cpp" line="137"/>
+ <location filename="../installtalkwindow.cpp" line="140"/>
<source>TTS error</source>
<translation>Chyba syntézy řeči</translation>
</message>
<message>
- <location filename="../installtalkwindow.cpp" line="138"/>
+ <location filename="../installtalkwindow.cpp" line="141"/>
<source>The selected TTS failed to initialize. You can&apos;t use this TTS.</source>
<translation>Spuštění vybrané syntézy řeči selhalo a nelze ji použít.</translation>
</message>
@@ -1977,77 +2100,63 @@ Prosím nastavte engine syntézy řeči.</translation>
<context>
<name>ManualWidget</name>
<message>
- <location filename="../gui/manualwidget.cpp" line="44"/>
<source>&lt;a href=&apos;%1&apos;&gt;PDF Manual&lt;/a&gt;</source>
- <translation>&lt;a href=&apos;%1&apos;&gt;PDF příručka&lt;/a&gt;</translation>
+ <translation type="vanished">&lt;a href=&apos;%1&apos;&gt;PDF příručka&lt;/a&gt;</translation>
</message>
<message>
- <location filename="../gui/manualwidget.cpp" line="46"/>
<source>&lt;a href=&apos;%1&apos;&gt;HTML Manual (opens in browser)&lt;/a&gt;</source>
- <translation>&lt;a href=&apos;%1&apos;&gt;HTML příručka (otevře se v prohlížeči)&lt;/a&gt;</translation>
+ <translation type="vanished">&lt;a href=&apos;%1&apos;&gt;HTML příručka (otevře se v prohlížeči)&lt;/a&gt;</translation>
</message>
<message>
- <location filename="../gui/manualwidget.cpp" line="50"/>
<source>Select a device for a link to the correct manual</source>
- <translation>Vyberte zařízení pro odkaz na správnou příručku</translation>
+ <translation type="vanished">Vyberte zařízení pro odkaz na správnou příručku</translation>
</message>
<message>
- <location filename="../gui/manualwidget.cpp" line="51"/>
<source>&lt;a href=&apos;%1&apos;&gt;Manual Overview&lt;/a&gt;</source>
- <translation>&lt;a href=&apos;%1&apos;&gt;Obsah příručky&lt;/a&gt;</translation>
+ <translation type="vanished">&lt;a href=&apos;%1&apos;&gt;Obsah příručky&lt;/a&gt;</translation>
</message>
<message>
- <location filename="../gui/manualwidget.cpp" line="62"/>
<source>Confirm download</source>
- <translation>Potvrdit stažení</translation>
+ <translation type="vanished">Potvrdit stažení</translation>
</message>
<message>
- <location filename="../gui/manualwidget.cpp" line="63"/>
<source>Do you really want to download the manual? The manual will be saved to the root folder of your player.</source>
- <translation>Opravdu chcete stáhnout příručku? Bude uložena do kořenového adresáře vašeho přehrávače.</translation>
+ <translation type="vanished">Opravdu chcete stáhnout příručku? Bude uložena do kořenového adresáře vašeho přehrávače.</translation>
</message>
</context>
<context>
<name>ManualWidgetFrm</name>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="14"/>
<source>Manual</source>
- <translation>Příručka</translation>
+ <translation type="vanished">Příručka</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="20"/>
<source>Read the manual</source>
- <translation>Přečíst příručku</translation>
+ <translation type="vanished">Přečíst příručku</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="26"/>
<source>PDF manual</source>
- <translation>PDF příručka</translation>
+ <translation type="vanished">PDF příručka</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="39"/>
<source>HTML manual</source>
- <translation>HTML příručka</translation>
+ <translation type="vanished">HTML příručka</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="55"/>
<source>Download the manual</source>
- <translation>Stáhnout příručku</translation>
+ <translation type="vanished">Stáhnout příručku</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="63"/>
<source>&amp;PDF version</source>
- <translation>&amp;PDF verze</translation>
+ <translation type="vanished">&amp;PDF verze</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="70"/>
<source>&amp;HTML version (zip file)</source>
- <translation>&amp;HTML verze (zip soubor)</translation>
+ <translation type="vanished">&amp;HTML verze (zip soubor)</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="92"/>
<source>Down&amp;load</source>
- <translation>&amp;Stáhnout</translation>
+ <translation type="vanished">&amp;Stáhnout</translation>
</message>
</context>
<context>
@@ -2064,6 +2173,34 @@ Prosím nastavte engine syntézy řeči.</translation>
</message>
</context>
<context>
+ <name>PlayerBuildInfo</name>
+ <message>
+ <location filename="../base/playerbuildinfo.cpp" line="337"/>
+ <source>Stable (Retired)</source>
+ <translation>Stabilní (historická)</translation>
+ </message>
+ <message>
+ <location filename="../base/playerbuildinfo.cpp" line="340"/>
+ <source>Unusable</source>
+ <translation>Nepoužitelný</translation>
+ </message>
+ <message>
+ <location filename="../base/playerbuildinfo.cpp" line="343"/>
+ <source>Unstable</source>
+ <translation>Nestabilní</translation>
+ </message>
+ <message>
+ <location filename="../base/playerbuildinfo.cpp" line="346"/>
+ <source>Stable</source>
+ <translation>Stabilní</translation>
+ </message>
+ <message>
+ <location filename="../base/playerbuildinfo.cpp" line="349"/>
+ <source>Unknown</source>
+ <translation>Neznámý</translation>
+ </message>
+</context>
+<context>
<name>PreviewFrm</name>
<message>
<location filename="../previewfrm.ui" line="16"/>
@@ -2098,17 +2235,17 @@ Prosím nastavte engine syntézy řeči.</translation>
<context>
<name>ProgressLoggerGui</name>
<message>
- <location filename="../progressloggergui.cpp" line="104"/>
+ <location filename="../progressloggergui.cpp" line="99"/>
<source>&amp;Abort</source>
<translation>&amp;Přerušit</translation>
</message>
<message>
- <location filename="../progressloggergui.cpp" line="122"/>
+ <location filename="../progressloggergui.cpp" line="117"/>
<source>&amp;Ok</source>
<translation>&amp;OK</translation>
</message>
<message>
- <location filename="../progressloggergui.cpp" line="146"/>
+ <location filename="../progressloggergui.cpp" line="141"/>
<source>Save system trace log</source>
<translation>Uložit záznam systémového sledování</translation>
</message>
@@ -2116,59 +2253,59 @@ Prosím nastavte engine syntézy řeči.</translation>
<context>
<name>QObject</name>
<message>
- <location filename="../configure.cpp" line="625"/>
- <location filename="../main.cpp" line="91"/>
+ <location filename="../configure.cpp" line="616"/>
+ <location filename="../main.cpp" line="102"/>
<source>LTR</source>
<extracomment>This string is used to indicate the writing direction. Translate it to &quot;RTL&quot; (without quotes) for RTL languages. Anything else will get treated as LTR language.</extracomment>
<translation>LTR</translation>
</message>
<message>
- <location filename="../base/system.cpp" line="385"/>
+ <location filename="../base/system.cpp" line="333"/>
<source>(unknown vendor name) </source>
<translation>(neznámý výrobce) </translation>
</message>
<message>
- <location filename="../base/system.cpp" line="403"/>
+ <location filename="../base/system.cpp" line="351"/>
<source>(unknown product name)</source>
<translation>(neznámé zařízení)</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="84"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="107"/>
<source>Bootloader installation is almost complete. Installation &lt;b&gt;requires&lt;/b&gt; you to perform the following steps manually:</source>
<translation>Instalace zavaděče je téměř hotova. Instalace od vás &lt;b&gt;vyžaduje&lt;/b&gt; provést následující kroky ručně:</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="90"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="113"/>
<source>&lt;li&gt;Safely remove your player.&lt;/li&gt;</source>
<translation>&lt;li&gt;Bezpečně odeberte váš přehrávač.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="95"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="119"/>
<source>&lt;li&gt;Reboot your player into the original firmware.&lt;/li&gt;&lt;li&gt;Perform a firmware upgrade using the update functionality of the original firmware. Please refer to your player&apos;s manual on details.&lt;br/&gt;&lt;b&gt;Important:&lt;/b&gt; updating the firmware is a critical process that must not be interrupted. &lt;b&gt;Make sure the player is charged before starting the firmware update process.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;After the firmware has been updated reboot your player.&lt;/li&gt;</source>
<translation>&lt;li&gt;Restartujte váš přehrávač do původního firmware.&lt;/li&gt;&lt;li&gt;Aktualizujte firmware pomocí aktualizačního procesu původního firmware. Podobnosti se dočtete v návodu k vašemu přehrávači.&lt;br/&gt;&lt;b&gt;Důležité:&lt;/b&gt; aktualizace firmware je kritický proces, který nesmí být přerušen. &lt;b&gt;Ujistěte se, že je přehrávač nabitý před zahájením aktualizace.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Po aktualizaci firmware restartujte přehrávač.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="106"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="130"/>
<source>&lt;li&gt;Remove any previously inserted microSD card&lt;/li&gt;</source>
<translation>&lt;li&gt;Vyjměte jakoukoli dříve vloženou microSD kartu&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="107"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="131"/>
<source>&lt;li&gt;Disconnect your player. The player will reboot and perform an update of the original firmware. Please refer to your players manual on details.&lt;br/&gt;&lt;b&gt;Important:&lt;/b&gt; updating the firmware is a critical process that must not be interrupted. &lt;b&gt;Make sure the player is charged before disconnecting the player.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;After the firmware has been updated reboot your player.&lt;/li&gt;</source>
<translation>&lt;li&gt;Odpojte váš přehrávač. Přehrávač bude restartován a provede aktualizaci původního firmware. Podobnosti se dočtete v návodu k vašemu přehrávači.&lt;br/&gt;&lt;b&gt;Důležité:&lt;/b&gt; aktualizace firmware je kritický proces, který nesmí být přerušen. &lt;b&gt;Ujistěte se, že je přehrávač nabitý před odpojením.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Po aktualizaci firmware restartujte přehrávač.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="118"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="142"/>
<source>&lt;li&gt;Turn the player off&lt;/li&gt;&lt;li&gt;Insert the charger&lt;/li&gt;</source>
<translation>&lt;li&gt;Vypněte přehrávač&lt;/li&gt;&lt;li&gt;Připojte nabíječku&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="123"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="147"/>
<source>&lt;li&gt;Unplug USB and power adaptors&lt;/li&gt;&lt;li&gt;Hold &lt;i&gt;Power&lt;/i&gt; to turn the player off&lt;/li&gt;&lt;li&gt;Toggle the battery switch on the player&lt;/li&gt;&lt;li&gt;Hold &lt;i&gt;Power&lt;/i&gt; to boot into Rockbox&lt;/li&gt;</source>
<translation>&lt;li&gt;Odpojte USB a nabíjecí zařízení&lt;/li&gt;&lt;li&gt;Držte tlačítko&lt;i&gt;Napájení&lt;/i&gt; pro vypnutí přehrávače&lt;/li&gt;&lt;li&gt;Přepněte přepínač baterie na přehrávači&lt;/li&gt;&lt;li&gt;Držte tlačítko&lt;i&gt;Napájení&lt;/i&gt; pro spuštění Rockboxu&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="129"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="153"/>
<source>&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; You can safely install other parts first, but the above steps are &lt;b&gt;required&lt;/b&gt; to finish the installation!&lt;/p&gt;</source>
<translation>&lt;p&gt;&lt;b&gt;Poznámka:&lt;/b&gt; Můžete nejprve bezpečně instalovat zbývající části, ale výše uvedené kroky jsou &lt;b&gt;nezbytné&lt;/b&gt; pro dokončení instalace!&lt;/p&gt;</translation>
</message>
@@ -2176,7 +2313,7 @@ Prosím nastavte engine syntézy řeči.</translation>
<context>
<name>QuaZipFile</name>
<message>
- <location filename="../quazip/quazipfile.cpp" line="218"/>
+ <location filename="../quazip/quazipfile.cpp" line="251"/>
<source>ZIP/UNZIP API error %1</source>
<translation>Chyba %1 API ZIP/UNZIP</translation>
</message>
@@ -2184,200 +2321,221 @@ Prosím nastavte engine syntézy řeči.</translation>
<context>
<name>RbUtilQt</name>
<message>
- <location filename="../rbutilqt.cpp" line="245"/>
+ <location filename="../rbutilqt.cpp" line="262"/>
<source>Network error</source>
<translation>Chyba sítě</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="338"/>
+ <location filename="../rbutilqt.cpp" line="304"/>
+ <source>Libraries used</source>
+ <translation>Použité knihovny</translation>
+ </message>
+ <message>
+ <location filename="../rbutilqt.cpp" line="383"/>
<source>New installation</source>
<translation>Nová instalace</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="339"/>
+ <location filename="../rbutilqt.cpp" line="384"/>
<source>This is a new installation of Rockbox Utility, or a new version. The configuration dialog will now open to allow you to setup the program, or review your settings.</source>
<translation>Toto je nová instalace nebo verze Rockbox Utility. Nyní se otevře nastavení programu.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="346"/>
- <location filename="../rbutilqt.cpp" line="656"/>
+ <location filename="../rbutilqt.cpp" line="391"/>
+ <location filename="../rbutilqt.cpp" line="622"/>
<source>Configuration error</source>
<translation>Chyba nastavení</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="347"/>
+ <location filename="../rbutilqt.cpp" line="392"/>
<source>Your configuration is invalid. This is most likely due to a changed device path. The configuration dialog will now open to allow you to correct the problem.</source>
<translation>Vaše nastavení je neplatné. Pravděpodobně kvůli změně cesty k zařízení. Nyní se otevře okno nastavení, které vám dovolí opravit problém.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="119"/>
+ <location filename="../rbutilqt.cpp" line="104"/>
<source>Wine detected!</source>
<translation>Zjištěn běh pod Wine!</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="120"/>
+ <location filename="../rbutilqt.cpp" line="105"/>
<source>It seems you are trying to run this program under Wine. Please don&apos;t do this, running under Wine will fail. Use the native Linux binary instead.</source>
<translation>Zdá se, že se pokoušite tento program spustit skrze Wine. Prosíme nedělejte to, může dojít k chybám. Použijte raději nativní Linuxový port.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="233"/>
+ <location filename="../rbutilqt.cpp" line="211"/>
<source>Downloading build information, please wait ...</source>
<translation>Čekejte prosím, stahuji informace o sestavení ...</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="244"/>
+ <location filename="../rbutilqt.cpp" line="227"/>
+ <source>Certificate error</source>
+ <translation>Chyba certifikátu</translation>
+ </message>
+ <message>
+ <location filename="../rbutilqt.cpp" line="229"/>
+ <source>%1
+
+Issuer: %2
+Subject: %3
+Valid since: %4
+Valid until: %5
+
+Temporarily trust certificate?</source>
+ <translation>%1
+
+Vydal: %2
+Vydáno pro: %3
+Platný od: %4
+Platný do: %5
+
+Dočasně důvěřovat certifikátu?</translation>
+ </message>
+ <message>
+ <location filename="../rbutilqt.cpp" line="261"/>
<source>Can&apos;t get version information!</source>
<translation>Nelze stáhnout informace o verzi!</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="246"/>
+ <location filename="../rbutilqt.cpp" line="263"/>
<source>Can&apos;t get version information.
Network error: %1. Please check your network and proxy settings.</source>
<translation>Nelze stáhnout informace o verzi!
Chyba sítě: %1. Prosím zkontrolujte vaše nastavení sítě a proxy.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="258"/>
+ <location filename="../rbutilqt.cpp" line="275"/>
<source>Download build information finished.</source>
<translation>Informace o sestavení staženy.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="459"/>
<source>Confirm Installation</source>
- <translation>Potvrdit instalaci</translation>
+ <translation type="vanished">Potvrdit instalaci</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="596"/>
+ <location filename="../rbutilqt.cpp" line="562"/>
<source>Mount point is wrong!</source>
<translation>Připojovací bod je špatně!</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="439"/>
<source>No Rockbox installation found</source>
- <translation>Nenalezena instalace Rockboxu</translation>
+ <translation type="vanished">Nenalezena instalace Rockboxu</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="425"/>
<source>Warning</source>
- <translation>Varování</translation>
+ <translation type="vanished">Varování</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="426"/>
<source>The Application is still downloading Information about new Builds. Please try again shortly.</source>
- <translation>Aplikace stahuje informace o nových verzích. Prosím zkuste to později.</translation>
+ <translation type="vanished">Aplikace stahuje informace o nových verzích. Prosím zkuste to později.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="440"/>
<source>Could not determine the installed Rockbox version. Please install a Rockbox build before installing voice files.</source>
- <translation>Nelze zjsitit instalovanou verzi Rockboxu. Prosíme nainstalujte Rockbox a až pak hlasové soubory.</translation>
+ <translation type="vanished">Nelze zjsitit instalovanou verzi Rockboxu. Prosíme nainstalujte Rockbox a až pak hlasové soubory.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="460"/>
<source>Do you really want to install the voice file?</source>
- <translation>Opravdu chcete instalovat hlasové soubory?</translation>
+ <translation type="vanished">Opravdu chcete instalovat hlasové soubory?</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="521"/>
+ <location filename="../rbutilqt.cpp" line="493"/>
<source>Confirm Uninstallation</source>
<translation>Potvrdit odinstalování</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="522"/>
+ <location filename="../rbutilqt.cpp" line="494"/>
<source>Do you really want to uninstall the Bootloader?</source>
<translation>Opravdu chcete odinstalovat zavaděč?</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="536"/>
+ <location filename="../rbutilqt.cpp" line="506"/>
<source>No uninstall method for this target known.</source>
<translation>Pro toto zařízení není známý způsob odinstalace.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="748"/>
+ <location filename="../rbutilqt.cpp" line="713"/>
<source>New version of Rockbox Utility available.</source>
<translation>Je k dispozici aktualizace Rockbox Utility.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="751"/>
+ <location filename="../rbutilqt.cpp" line="716"/>
<source>Rockbox Utility is up to date.</source>
<translation>Rockbox Utilita je aktuální.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="582"/>
+ <location filename="../rbutilqt.cpp" line="548"/>
<source>Confirm installation</source>
<translation>Potvrdit instalaci</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="448"/>
<source>No voice file available</source>
- <translation>Soubory hlasů nejsou k dispozici</translation>
+ <translation type="vanished">Soubory hlasů nejsou k dispozici</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="449"/>
<source>The installed version of Rockbox is a development version. Pre-built voices are only available for release versions of Rockbox. Please generate a voice yourself using the &quot;Create voice file&quot; functionality.</source>
- <translation>Je instalována vývojářská verze Rockboxu. Předpřipravené hlasy jsou k dispozici jen pro stabilní vydání. Prosím vytvořte si hlas pomocí funkce &quot;Vytvoření hlasového souboru&quot;.</translation>
+ <translation type="vanished">Je instalována vývojová verze Rockboxu. Předpřipravené hlasy jsou k dispozici jen pro stabilní vydání. Prosím vytvořte si hlas pomocí funkce &quot;Vytvoření hlasového souboru&quot;.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="552"/>
+ <location filename="../rbutilqt.cpp" line="518"/>
<source>Rockbox Utility can not uninstall the bootloader on your player. Please perform a firmware update using your player vendors firmware update process.</source>
<translation>Rockbox Utilita nemůže instalovat zavaděč na váš přehrávač. Proveďte aktualizaci firmware způsobem používaným výrobcem vašeho přehrávače.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="555"/>
+ <location filename="../rbutilqt.cpp" line="521"/>
<source>Important: make sure to boot your player into the original firmware before using the vendors firmware update process.</source>
<translation>Důležité: Spusťte na vašem přehrávači původní firmware před tím, než použijete aktualizační postup vašeho výrobce.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="563"/>
+ <location filename="../rbutilqt.cpp" line="529"/>
<source>No Rockbox bootloader found.</source>
<translation>Nenalezen zavaděč Rockboxu.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="583"/>
+ <location filename="../rbutilqt.cpp" line="549"/>
<source>Do you really want to install Rockbox Utility to your player? After installation you can run it from the players hard drive.</source>
<translation>Opravdu chcete instalovat Rockbox Utilitu na váš přehrávač? Po instalaci ji můžete spustit z disku přehrávače.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="592"/>
+ <location filename="../rbutilqt.cpp" line="558"/>
<source>Installing Rockbox Utility</source>
<translation>Instaluji Rockbox Utilitu</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="610"/>
+ <location filename="../rbutilqt.cpp" line="576"/>
<source>Error installing Rockbox Utility</source>
<translation>Chyba instalace Rocxbox Utility</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="614"/>
+ <location filename="../rbutilqt.cpp" line="580"/>
<source>Installing user configuration</source>
<translation>Instalace uživatelských nastavení</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="618"/>
+ <location filename="../rbutilqt.cpp" line="584"/>
<source>Error installing user configuration</source>
<translation>Chyba instalace uživatelských nastavení</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="622"/>
+ <location filename="../rbutilqt.cpp" line="588"/>
<source>Successfully installed Rockbox Utility.</source>
<translation>Úspěšná instalace Rockbox Utility.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="657"/>
+ <location filename="../rbutilqt.cpp" line="623"/>
<source>Your configuration is invalid. Please go to the configuration dialog and make sure the selected values are correct.</source>
<translation>Vaše nastavení je neplatné. Prosím zkontrolujte nastavení, zda jsou všechny vybrané hodnoty správné.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="678"/>
+ <location filename="../rbutilqt.cpp" line="644"/>
<source>Checking for update ...</source>
<translation>Kontroluji aktualizace ...</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="743"/>
+ <location filename="../rbutilqt.cpp" line="708"/>
<source>Rockbox Utility Update available</source>
<translation>Je k dispozici aktualizace Rockbox Utility</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="744"/>
+ <location filename="../rbutilqt.cpp" line="709"/>
<source>&lt;b&gt;New Rockbox Utility version available.&lt;/b&gt;&lt;br&gt;&lt;br&gt;You are currently using version %1. Get version %2 at &lt;a href=&apos;%3&apos;&gt;%3&lt;/a&gt;</source>
<translation>&lt;b&gt;Je k dispozici nová verze Rockbox Utility&lt;/b&gt;&lt;br&gt;&lt;br&gt;Používáte verzi %1. Stáhněte si verzi %2 at &lt;a href=&apos;%3&apos;&gt;%3&lt;/a&gt;</translation>
</message>
@@ -2390,22 +2548,22 @@ Chyba sítě: %1. Prosím zkontrolujte vaše nastavení sítě a proxy.</transla
<translation type="vanished">&lt;b&gt;Je k dispozici nová verze Rockbox Utility.&lt;/b&gt; &lt;br&gt;&lt;br&gt;Stáhněte si ji zde: &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="774"/>
+ <location filename="../rbutilqt.cpp" line="739"/>
<source>Device ejected</source>
<translation>Zařízení odebráno</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="775"/>
+ <location filename="../rbutilqt.cpp" line="740"/>
<source>Device successfully ejected. You may now disconnect the player from the PC.</source>
<translation>Zařízení úspěšně odebráno. Přehrávač můžete odpojit od počítače.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="779"/>
+ <location filename="../rbutilqt.cpp" line="744"/>
<source>Ejecting failed</source>
<translation>Odebrání selhalo</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="780"/>
+ <location filename="../rbutilqt.cpp" line="745"/>
<source>Ejecting the device failed. Please make sure no programs are accessing files on the device. If ejecting still fails please use your computers eject funtionality.</source>
<translation>Odpojení zařízení selhalo. Ujistěte se, že žádný program nepracuje se zařízením. Pokud odpojení opětovně selže, použijte funkci odpojení vašeho operačního systému,.</translation>
</message>
@@ -2418,307 +2576,312 @@ Chyba sítě: %1. Prosím zkontrolujte vaše nastavení sítě a proxy.</transla
<translation>Rockbox Utilita</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="31"/>
+ <location filename="../rbutilqtfrm.ui" line="59"/>
<source>Device</source>
<translation>Zařízení</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="92"/>
+ <location filename="../rbutilqtfrm.ui" line="120"/>
<source>&amp;Change</source>
<translation>&amp;Změnit</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="163"/>
+ <location filename="../rbutilqtfrm.ui" line="166"/>
<source>Welcome</source>
<translation>Vítejte</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="160"/>
- <location filename="../rbutilqtfrm.ui" line="658"/>
+ <location filename="../rbutilqtfrm.ui" line="163"/>
+ <location filename="../rbutilqtfrm.ui" line="620"/>
<source>&amp;Installation</source>
<translation>&amp;Instalace</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="168"/>
- <location filename="../rbutilqtfrm.ui" line="450"/>
+ <location filename="../rbutilqtfrm.ui" line="171"/>
+ <location filename="../rbutilqtfrm.ui" line="413"/>
<source>&amp;Accessibility</source>
<translation>&amp;Přístupnost</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="171"/>
+ <location filename="../rbutilqtfrm.ui" line="174"/>
<source>Install accessibility add-ons</source>
<translation>Instalovat přídavky pro přístupnost</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="177"/>
<source>Install Voice files</source>
- <translation>Instalovat soubory hlasů</translation>
+ <translation type="vanished">Instalovat soubory hlasů</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="194"/>
<source>&lt;b&gt;Install Voice file&lt;/b&gt;&lt;br/&gt;Voice files are needed to make Rockbox speak the user interface. Speaking is enabled by default, so if you installed the voice file Rockbox will speak.</source>
- <translation>&lt;b&gt;Instalovat soubory hlasů&lt;/b&gt;&lt;br/&gt;Hlasové soubory jsou potřebné, aby Rockbox četl uživatelské rozhraní. Čtení je defalutně zapnuto, takže jestliže je instalujete, Rockbox bude mluvit.</translation>
+ <translation type="vanished">&lt;b&gt;Instalovat soubory hlasů&lt;/b&gt;&lt;br/&gt;Hlasové soubory jsou potřebné, aby Rockbox četl uživatelské rozhraní. Čtení je defalutně zapnuto, takže jestliže je instalujete, Rockbox bude mluvit.</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="204"/>
+ <location filename="../rbutilqtfrm.ui" line="180"/>
<source>Install Talk files</source>
<translation>Instalovat .talk soubory</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="221"/>
+ <location filename="../rbutilqtfrm.ui" line="197"/>
<source>&lt;b&gt;Create Talk Files&lt;/b&gt;&lt;br/&gt;Talkfiles are needed to let Rockbox speak File and Foldernames</source>
<translation>&lt;b&gt;Instalovat .talk soubory&lt;/b&gt;&lt;br/&gt;Sobory jsou potřebné, aby Rockbox mohl číst názvy souborů a adresářů</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="254"/>
+ <location filename="../rbutilqtfrm.ui" line="230"/>
<source>Create Voice files</source>
<translation>Vytvořit soubory hlasů</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="271"/>
+ <location filename="../rbutilqtfrm.ui" line="247"/>
<source>&lt;b&gt;Create Voice file&lt;/b&gt;&lt;br/&gt;Voice files are needed to make Rockbox speak the user interface. Speaking is enabled by default, so
if you installed the voice file Rockbox will speak.</source>
<translation>&lt;b&gt;Vytvořit soubory hlasů&lt;/b&gt;&lt;br/&gt;Hlasové soubory jsou potřebné, aby Rockbox četl uživatelské rozhraní. Čtení je defalutně zapnuto, takže jestliže je instalujete, Rockbox bude mluvit.</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="458"/>
+ <location filename="../rbutilqtfrm.ui" line="420"/>
<source>&amp;Uninstallation</source>
<translation>&amp;Odinstalace</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="286"/>
- <location filename="../rbutilqtfrm.ui" line="319"/>
+ <location filename="../rbutilqtfrm.ui" line="262"/>
+ <location filename="../rbutilqtfrm.ui" line="295"/>
<source>Uninstall Rockbox</source>
<translation>Odinstalovat Rockbox</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="121"/>
+ <location filename="../rbutilqtfrm.ui" line="149"/>
<source>mountpoint unknown or invalid</source>
<translation>Bod připojení neznámý nebo nesprávný</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="114"/>
+ <location filename="../rbutilqtfrm.ui" line="142"/>
<source>Mountpoint:</source>
<translation>Přípojný bod:</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="72"/>
+ <location filename="../rbutilqtfrm.ui" line="100"/>
<source>device unknown or invalid</source>
<translation>Neznámé nebo nevalidní zařízení</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="65"/>
+ <location filename="../rbutilqtfrm.ui" line="93"/>
<source>Device:</source>
<translation>Zařízení:</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="283"/>
+ <location filename="../rbutilqtfrm.ui" line="259"/>
<source>Backup &amp;&amp; &amp;Uninstallation</source>
<translation>Zálohování a &amp;odinstalace</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="292"/>
+ <location filename="../rbutilqtfrm.ui" line="268"/>
<source>Uninstall Bootloader</source>
<translation>Odinstalovat zavaděč</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="309"/>
+ <location filename="../rbutilqtfrm.ui" line="285"/>
<source>&lt;b&gt;Remove the bootloader&lt;/b&gt;&lt;br/&gt;After removing the bootloader you won&apos;t be able to start Rockbox.</source>
<translation>&lt;b&gt;Odstranění zavaděče&lt;/b&gt;&lt;br/&gt;Po odstranění zavaděče nebudete schopni spustit Rockbox.</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="336"/>
+ <location filename="../rbutilqtfrm.ui" line="312"/>
<source>&lt;b&gt;Uninstall Rockbox from your audio player.&lt;/b&gt;&lt;br/&gt;This will leave the bootloader in place (you need to remove it manually).</source>
<translation>&lt;b&gt;Odinstalovat Rockbox z vašeho audio přehrávače&lt;/b&gt;&lt;br/&gt;Ponechá zavaděč na místě (musíte ho odstranit ručně).</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="349"/>
+ <location filename="../rbutilqtfrm.ui" line="325"/>
<source>Backup</source>
<translation>Záloha</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="366"/>
+ <location filename="../rbutilqtfrm.ui" line="342"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Backup current installation.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Create a backup by archiving the contents of the Rockbox installation folder.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Zálohovat současnou instalaci.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Vytvoření zálohy archivací instalačního adresáře Rockboxu.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="393"/>
<source>&amp;Manual</source>
- <translation>&amp;Příručka</translation>
+ <translation type="vanished">&amp;Příručka</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="396"/>
<source>View and download the manual</source>
- <translation>Prohlédnout a stáhnout příručku</translation>
+ <translation type="vanished">Prohlédnout a stáhnout příručku</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="401"/>
+ <location filename="../rbutilqtfrm.ui" line="369"/>
<source>Inf&amp;o</source>
<translation>Inf&amp;o</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="419"/>
+ <location filename="../rbutilqtfrm.ui" line="387"/>
<source>&amp;File</source>
<translation>&amp;Soubor</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="432"/>
<source>&amp;Troubleshoot</source>
- <translation>&amp;Řešení problémů</translation>
+ <translation type="vanished">&amp;Řešení problémů</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="446"/>
+ <location filename="../rbutilqtfrm.ui" line="409"/>
<source>Action&amp;s</source>
<translation>&amp;Akce</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="474"/>
+ <location filename="../rbutilqtfrm.ui" line="436"/>
<source>Empty local download cache</source>
<translation>Vyprázdnit lokální vyrovnávací paměť stahování</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="479"/>
+ <location filename="../rbutilqtfrm.ui" line="441"/>
<source>Install Rockbox Utility on player</source>
<translation>Instalovat Rockbox Utilitu na váš přehrávač</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="484"/>
+ <location filename="../rbutilqtfrm.ui" line="446"/>
<source>&amp;Configure</source>
<translation>&amp;Nastavení</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="489"/>
+ <location filename="../rbutilqtfrm.ui" line="451"/>
<source>E&amp;xit</source>
<translation>U&amp;končit</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="492"/>
+ <location filename="../rbutilqtfrm.ui" line="454"/>
<source>Ctrl+Q</source>
<translation>Ctrl+Q</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="497"/>
+ <location filename="../rbutilqtfrm.ui" line="459"/>
<source>&amp;About</source>
<translation>&amp;O aplikaci</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="502"/>
+ <location filename="../rbutilqtfrm.ui" line="464"/>
<source>About &amp;Qt</source>
<translation>O aplikaci &amp;Qt</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="428"/>
- <location filename="../rbutilqtfrm.ui" line="507"/>
+ <location filename="../rbutilqtfrm.ui" line="396"/>
+ <location filename="../rbutilqtfrm.ui" line="469"/>
<source>&amp;Help</source>
<translation>&amp;Nápověda</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="103"/>
+ <location filename="../rbutilqtfrm.ui" line="43"/>
+ <source>Welcome to Rockbox Utility, the installation and housekeeping tool for Rockbox.</source>
+ <translation>Vítá Vás Rockbox Utilita, nástroj pro instalaci a údržbu Rockboxu.</translation>
+ </message>
+ <message>
+ <location filename="../rbutilqtfrm.ui" line="46"/>
+ <source>Rockbox Logo</source>
+ <translation>Logo Rockboxu</translation>
+ </message>
+ <message>
+ <location filename="../rbutilqtfrm.ui" line="131"/>
<source>&amp;Eject</source>
<translation>&amp;Odpojit</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="512"/>
+ <location filename="../rbutilqtfrm.ui" line="474"/>
<source>Info</source>
<translation>Informace</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="521"/>
+ <location filename="../rbutilqtfrm.ui" line="483"/>
<source>&amp;Complete Installation</source>
<translation>&amp;Kompletní instalace</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="530"/>
+ <location filename="../rbutilqtfrm.ui" line="492"/>
<source>&amp;Minimal Installation</source>
<translation>&amp;Minimální instalace</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="539"/>
+ <location filename="../rbutilqtfrm.ui" line="501"/>
<source>Install &amp;Bootloader</source>
<translation>Instalovat &amp;zavaděč</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="548"/>
+ <location filename="../rbutilqtfrm.ui" line="510"/>
<source>Install &amp;Rockbox</source>
<translation>Instalovat &amp;Rockbox</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="557"/>
+ <location filename="../rbutilqtfrm.ui" line="519"/>
<source>Install &amp;Fonts Package</source>
<translation>Instalovat balík &amp;fontů</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="566"/>
+ <location filename="../rbutilqtfrm.ui" line="528"/>
<source>Install &amp;Themes</source>
<translation>Instalovat &amp;témata</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="575"/>
+ <location filename="../rbutilqtfrm.ui" line="537"/>
<source>Install &amp;Game Files</source>
<translation>Instalovat &amp;herní soubory</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="584"/>
+ <location filename="../rbutilqtfrm.ui" line="546"/>
<source>&amp;Install Voice File</source>
<translation>&amp;Instalovat soubory hlasů</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="593"/>
+ <location filename="../rbutilqtfrm.ui" line="555"/>
<source>Create &amp;Talk Files</source>
<translation>Instalovat .&amp;talk soubory</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="602"/>
+ <location filename="../rbutilqtfrm.ui" line="564"/>
<source>Remove &amp;bootloader</source>
<translation>Odstranit &amp;zavaděč</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="611"/>
+ <location filename="../rbutilqtfrm.ui" line="573"/>
<source>Uninstall &amp;Rockbox</source>
<translation>Odinstalovat &amp;Rockbox</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="616"/>
+ <location filename="../rbutilqtfrm.ui" line="578"/>
<source>Read PDF manual</source>
<translation>Přečíst PDF příručku</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="621"/>
+ <location filename="../rbutilqtfrm.ui" line="583"/>
<source>Read HTML manual</source>
<translation>Přečíst HTML příručku</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="626"/>
+ <location filename="../rbutilqtfrm.ui" line="588"/>
<source>Download PDF manual</source>
<translation>Stáhnout PDF příručku</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="631"/>
+ <location filename="../rbutilqtfrm.ui" line="593"/>
<source>Download HTML manual (zip)</source>
<translation>Stáhnout HTML příručku (zip)</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="640"/>
+ <location filename="../rbutilqtfrm.ui" line="602"/>
<source>Create &amp;Voice File</source>
<translation>Vytvořit &amp;soubor hlasů</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="643"/>
+ <location filename="../rbutilqtfrm.ui" line="605"/>
<source>Create Voice File</source>
<translation>Vytvořit soubor hlasů</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="648"/>
+ <location filename="../rbutilqtfrm.ui" line="610"/>
<source>&amp;System Info</source>
<translation>&amp;Informace o systému</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="653"/>
+ <location filename="../rbutilqtfrm.ui" line="615"/>
<source>System &amp;Trace</source>
<translation>Sledování &amp;sytému</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="663"/>
+ <location filename="../rbutilqtfrm.ui" line="625"/>
<source>Show &amp;Changelog</source>
<translation>Ukázat &amp;přehled změn</translation>
</message>
@@ -2751,204 +2914,255 @@ Chyba sítě: %1. Prosím zkontrolujte vaše nastavení sítě a proxy.</transla
<translation>&amp;Zavaděč</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="80"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="151"/>
+ <source>Some plugins require additional data files.</source>
+ <translation>Některé doplňky potřebují dodatečné datové soubory.</translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="188"/>
+ <source>Install prerendered voice file.</source>
+ <translation>Instalace sestavených hlasových souborů.</translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="195"/>
+ <source>Plugin Data</source>
+ <translation>Doplňkové soubory</translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="222"/>
+ <source>&amp;Manual</source>
+ <translation>&amp;Příručka</translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="233"/>
+ <source>&amp;Voice File</source>
+ <translation>&amp;Soubor hlasů</translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="253"/>
<source>The main Rockbox firmware.</source>
<translation>Hlavní firmware Rockboxu.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="90"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="115"/>
<source>Fonts</source>
<translation>Fonty</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="104"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="74"/>
<source>&amp;Rockbox</source>
<translation>&amp;Rockbox</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="124"/>
<source>Some game plugins require additional files.</source>
- <translation>Některé herní moduly vyžadují dodatečné soubory.</translation>
+ <translation type="vanished">Některé herní moduly vyžadují dodatečné soubory.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="140"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="178"/>
<source>Additional fonts for the User Interface.</source>
<translation>Dodatečné fonty pro uživatelské prostředí.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="156"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="135"/>
<source>The bootloader is required for starting Rockbox. Only necessary for first time install.</source>
<translation>Rockbox potřebuje ke spuštění zavaděč. Je zapotřebí jen při první instalaci.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="166"/>
<source>Game Files</source>
- <translation>Herní soubory</translation>
+ <translation type="vanished">Herní soubory</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="177"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="161"/>
<source>Customize</source>
<translation>Vybrat</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="188"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="104"/>
<source>Themes</source>
<translation>Témata</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="205"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="94"/>
<source>Themes allow adjusting the user interface of Rockbox. Use &quot;Customize&quot; to select themes.</source>
<translation>Témata vám umožní změnit podobu Rockboxu. Zvolte si je pomocí &quot;Vybrat&quot;.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="250"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="263"/>
+ <source>Save a copy of the manual on the player.</source>
+ <translation>Uložit kopii manuálu do přehrávače.</translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="292"/>
<source>&amp;Install</source>
<translation>&amp;Instalovat</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="67"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="78"/>
<source>This is the latest stable release available.</source>
<translation>Tohle je poslední stabilní vydání.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="70"/>
<source>The development version is updated on every code change. Last update was on %1</source>
- <translation>Vývojářská verze je aktualizována při každé změně kódu. Poslední aktualizace proběhla %1</translation>
+ <translation type="vanished">Vývojová verze je aktualizována při každé změně kódu. Poslední aktualizace proběhla %1</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="74"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="88"/>
<source>This will eventually become the next Rockbox version. Install it to help testing.</source>
<translation>Toto bude v budoucnosti další stabilní verze Rockboxu, isntalací pomůžete jejímu testování.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="100"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="127"/>
<source>Stable Release (Version %1)</source>
<translation>Stabilní vydání (Verze %1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="104"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="131"/>
<source>Development Version (Revison %1)</source>
- <translation>Vývojářská verze (Revize %1)</translation>
+ <translation>Vývojová verze (Revize %1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="108"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="129"/>
<source>Release Candidate (Revison %1)</source>
<translation>Kandidát pro vydání (Revize %1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="131"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="83"/>
+ <source>The development version is updated on every code change.</source>
+ <translation>Vývojová verze je aktualizována při každé změně zdrojového kódu.</translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="93"/>
+ <source>Daily updated development version.</source>
+ <translation>Každodenně aktualizovaná vývojová verze.</translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="100"/>
+ <source>Not available for the selected version</source>
+ <translation>Není dostupný pro vybranou verzi</translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="130"/>
+ <source>Daily Build (%1)</source>
+ <translation>Denní sestavení (%1)</translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="158"/>
<source>The selected player doesn&apos;t need a bootloader.</source>
<translation>Vybraný přehrávač nepotřebuje zavaděč.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="136"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="163"/>
<source>The bootloader is required for starting Rockbox. Installation of the bootloader is only necessary on first time installation.</source>
<translation>Rockbox potřebuje ke spuštění zavaděč. Jeho instalace je zapotřebí jen při první instalaci.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="183"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="236"/>
<source>Mountpoint is wrong</source>
<translation>Špatný připojovací bod</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="239"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="294"/>
<source>No install method known.</source>
<translation>Není známý žádný způsob instalace.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="268"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="318"/>
<source>Bootloader detected</source>
<translation>Zavaděč nalezen</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="269"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="319"/>
<source>Bootloader already installed. Do you want to reinstall the bootloader?</source>
<translation>Zavaděč je již instalován. Opravdu chcete přeinstalovat zavaděč?</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="273"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="323"/>
<source>Bootloader installation skipped</source>
<translation>Instalace zavaděče přeskočena</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="286"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="337"/>
<source>Create Bootloader backup</source>
<translation>Vytváří se záloha zavaděče</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="287"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="338"/>
<source>You can create a backup of the original bootloader file. Press &quot;Yes&quot; to select an output folder on your computer to save the file to. The file will get placed in a new folder &quot;%1&quot; created below the selected folder.
Press &quot;No&quot; to skip this step.</source>
<translation>Můžete vytvořit zálohu původního souboru zavaděče. Stiskněte &quot;Ano&quot; pro výběr adresáře na vašem počítači, kam se má tento soubor uložit. Soubor bude umístěn do nového podadresáře &quot;%1&quot; vytvořeného v tomto adresáři.
Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="294"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="345"/>
<source>Browse backup folder</source>
<translation>Vybrat zálohovací adresář</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="306"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="357"/>
<source>Prerequisites</source>
<translation>Předpoklady</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="311"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="362"/>
<source>Bootloader installation aborted</source>
<translation>Instalace zavaděče přerušena</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="321"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="372"/>
<source>Bootloader files (%1)</source>
<translation>Soubory zavaděče (%1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="323"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="374"/>
<source>All files (*)</source>
<translation>Všechny soubory (*)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="325"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="376"/>
<source>Select firmware file</source>
<translation>Vyberte soubor firmware</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="327"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="378"/>
<source>Error opening firmware file</source>
<translation>Chyba otevírání souboru firmware</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="333"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="384"/>
<source>Error reading firmware file</source>
<translation>Chyba čtení souboru firmware</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="343"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="394"/>
<source>Backup error</source>
<translation>Chyba zálohování</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="344"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="395"/>
<source>Could not create backup file. Continue?</source>
<translation>Nelze vytvořit soubor se zálohou. Pokračovat?</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="368"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="419"/>
<source>Manual steps required</source>
<translation>Nutné ruční kroky</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="518"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="640"/>
+ <source>Your installation doesn&apos;t require any plugin data files, skipping.</source>
+ <translation>Vaše instalace nepotřebuje žádné dodatečné soubory, přeskakuji.</translation>
+ </message>
+ <message>
<source>Your installation doesn&apos;t require any game files, skipping.</source>
- <translation>Vaše instalace nepotřebuje žádné herní soubory, přeskakuji.</translation>
+ <translation type="vanished">Vaše instalace nepotřebuje žádné herní soubory, přeskakuji.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="171"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="224"/>
<source>Continue with installation?</source>
<translation>Pokračovat s instalací?</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="172"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="225"/>
<source>Really continue?</source>
<translation>Opravdu pokračovat?</translation>
</message>
@@ -2964,24 +3178,20 @@ Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
<context>
<name>ServerInfo</name>
<message>
- <location filename="../base/serverinfo.cpp" line="117"/>
<source>Unknown</source>
- <translation>Neznámý</translation>
+ <translation type="vanished">Neznámý</translation>
</message>
<message>
- <location filename="../base/serverinfo.cpp" line="121"/>
<source>Unusable</source>
- <translation>Nepoužitelný</translation>
+ <translation type="vanished">Nepoužitelný</translation>
</message>
<message>
- <location filename="../base/serverinfo.cpp" line="124"/>
<source>Unstable</source>
- <translation>Nestabilní</translation>
+ <translation type="vanished">Nestabilní</translation>
</message>
<message>
- <location filename="../base/serverinfo.cpp" line="127"/>
<source>Stable</source>
- <translation>Stabilní</translation>
+ <translation type="vanished">Stabilní</translation>
</message>
</context>
<context>
@@ -3029,62 +3239,66 @@ Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
<context>
<name>Sysinfo</name>
<message>
- <location filename="../sysinfo.cpp" line="45"/>
+ <location filename="../sysinfo.cpp" line="46"/>
<source>&lt;b&gt;OS&lt;/b&gt;&lt;br/&gt;</source>
<translation>&lt;b&gt;Operační systém&lt;/b&gt;&lt;br/&gt;</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="46"/>
+ <location filename="../sysinfo.cpp" line="47"/>
<source>&lt;b&gt;Username&lt;/b&gt;&lt;br/&gt;%1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Uživatelské jméno&lt;/b&gt;&lt;br/&gt;%1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="48"/>
+ <location filename="../sysinfo.cpp" line="49"/>
<source>&lt;b&gt;Permissions&lt;/b&gt;&lt;br/&gt;%1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Oprávnění&lt;/b&gt;&lt;br/&gt;%1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="50"/>
+ <location filename="../sysinfo.cpp" line="51"/>
<source>&lt;b&gt;Attached USB devices&lt;/b&gt;&lt;br/&gt;</source>
<translation>&lt;b&gt;Připojená USB zařízení&lt;/b&gt;&lt;br/&gt;</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="54"/>
+ <location filename="../sysinfo.cpp" line="55"/>
<source>VID: %1 PID: %2, %3</source>
<translation>VID: %1 PID: %2, %3</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="63"/>
+ <location filename="../sysinfo.cpp" line="64"/>
<source>Filesystem</source>
<translation>Souborový systém</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="66"/>
+ <location filename="../sysinfo.cpp" line="67"/>
<source>Mountpoint</source>
<translation>Přípojný bod</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="66"/>
+ <location filename="../sysinfo.cpp" line="67"/>
<source>Label</source>
<translation>Popisek</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="67"/>
+ <location filename="../sysinfo.cpp" line="68"/>
<source>Free</source>
<translation>Volné</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="67"/>
+ <location filename="../sysinfo.cpp" line="68"/>
<source>Total</source>
<translation>Celkem</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="68"/>
+ <location filename="../sysinfo.cpp" line="69"/>
+ <source>Type</source>
+ <translation>Typ</translation>
+ </message>
+ <message>
<source>Cluster Size</source>
- <translation>Velikost oddílu</translation>
+ <translation type="vanished">Velikost oddílu</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="70"/>
+ <location filename="../sysinfo.cpp" line="71"/>
<source>&lt;tr&gt;&lt;td&gt;%1&lt;/td&gt;&lt;td&gt;%4&lt;/td&gt;&lt;td&gt;%2 GiB&lt;/td&gt;&lt;td&gt;%3 GiB&lt;/td&gt;&lt;td&gt;%5&lt;/td&gt;&lt;/tr&gt;</source>
<translation>&lt;tr&gt;&lt;td&gt;%1&lt;/td&gt;&lt;td&gt;%4&lt;/td&gt;&lt;td&gt;%2 GiB&lt;/td&gt;&lt;td&gt;%3 GiB&lt;/td&gt;&lt;td&gt;%5&lt;/td&gt;&lt;/tr&gt;</translation>
</message>
@@ -3102,7 +3316,7 @@ Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
<translation>&amp;Obnovit</translation>
</message>
<message>
- <location filename="../sysinfofrm.ui" line="45"/>
+ <location filename="../sysinfofrm.ui" line="46"/>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
</message>
@@ -3110,28 +3324,27 @@ Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
<context>
<name>System</name>
<message>
- <location filename="../base/system.cpp" line="121"/>
+ <location filename="../base/system.cpp" line="117"/>
<source>Guest</source>
<translation>Host</translation>
</message>
<message>
- <location filename="../base/system.cpp" line="124"/>
+ <location filename="../base/system.cpp" line="120"/>
<source>Admin</source>
<translation>Administrátor</translation>
</message>
<message>
- <location filename="../base/system.cpp" line="127"/>
+ <location filename="../base/system.cpp" line="123"/>
<source>User</source>
<translation>Uživatel</translation>
</message>
<message>
- <location filename="../base/system.cpp" line="130"/>
+ <location filename="../base/system.cpp" line="126"/>
<source>Error</source>
<translation>Chyba</translation>
</message>
<message>
- <location filename="../base/system.cpp" line="278"/>
- <location filename="../base/system.cpp" line="323"/>
+ <location filename="../base/system.cpp" line="273"/>
<source>(no description available)</source>
<translation>(žádný popis není k dispozici)</translation>
</message>
@@ -3139,42 +3352,52 @@ Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
<context>
<name>TTSBase</name>
<message>
- <location filename="../base/ttsbase.cpp" line="45"/>
+ <location filename="../base/ttsbase.cpp" line="47"/>
<source>Espeak TTS Engine</source>
<translation>Syntéza řeči Espeak</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="47"/>
+ <location filename="../base/ttsbase.cpp" line="48"/>
+ <source>Espeak-ng TTS Engine</source>
+ <translation>Syntéza řeči Espeak-ng</translation>
+ </message>
+ <message>
+ <location filename="../base/ttsbase.cpp" line="49"/>
+ <source>Mimic TTS Engine</source>
+ <translation>Syntéza řeči Mimic</translation>
+ </message>
+ <message>
+ <location filename="../base/ttsbase.cpp" line="51"/>
<source>Flite TTS Engine</source>
<translation>Syntéza řeči Flite</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="48"/>
+ <location filename="../base/ttsbase.cpp" line="52"/>
<source>Swift TTS Engine</source>
<translation>Syntéza řeči Swift</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="51"/>
+ <location filename="../base/ttsbase.cpp" line="55"/>
<source>SAPI4 TTS Engine</source>
<translation>Syntéza řeči SAPI4</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="53"/>
+ <location filename="../base/ttsbase.cpp" line="57"/>
<source>SAPI5 TTS Engine</source>
<translation>Syntéza řeči SAPI5</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="54"/>
+ <location filename="../base/ttsbase.cpp" line="58"/>
<source>MS Speech Platform</source>
<translation>Systéza řeči MS Speech</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="57"/>
+ <location filename="../base/ttsbase.cpp" line="61"/>
<source>Festival TTS Engine</source>
<translation>Syntéza řeči Festival</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="60"/>
+ <location filename="../base/ttsbase.cpp" line="64"/>
<source>OS X System Engine</source>
<translation>Systémový engine OS X</translation>
</message>
@@ -3238,11 +3461,16 @@ Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
<translation>Hlas:</translation>
</message>
<message>
- <location filename="../base/ttsfestival.cpp" line="67"/>
+ <location filename="../base/ttsfestival.cpp" line="69"/>
<source>Voice description:</source>
<translation>Popis hlasu:</translation>
</message>
<message>
+ <location filename="../base/ttsfestival.cpp" line="173"/>
+ <source>Festival could not be started</source>
+ <translation>Festival nemohl být spuštěn</translation>
+ </message>
+ <message>
<location filename="../base/ttsfestival.cpp" line="207"/>
<source>engine could not voice string</source>
<translation>engine nemohl namluvit řetězec</translation>
@@ -3256,32 +3484,32 @@ Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
<context>
<name>TTSSapi</name>
<message>
- <location filename="../base/ttssapi.cpp" line="49"/>
+ <location filename="../base/ttssapi.cpp" line="46"/>
<source>Language:</source>
<translation>Jazyk:</translation>
</message>
<message>
- <location filename="../base/ttssapi.cpp" line="56"/>
+ <location filename="../base/ttssapi.cpp" line="53"/>
<source>Voice:</source>
<translation>Hlas:</translation>
</message>
<message>
- <location filename="../base/ttssapi.cpp" line="68"/>
+ <location filename="../base/ttssapi.cpp" line="65"/>
<source>Speed:</source>
<translation>Rychlost:</translation>
</message>
<message>
- <location filename="../base/ttssapi.cpp" line="71"/>
+ <location filename="../base/ttssapi.cpp" line="68"/>
<source>Options:</source>
<translation>Možnosti:</translation>
</message>
<message>
- <location filename="../base/ttssapi.cpp" line="115"/>
+ <location filename="../base/ttssapi.cpp" line="112"/>
<source>Could not copy the SAPI script</source>
<translation>Nepodařilo se zkopírovat SAPI skript</translation>
</message>
<message>
- <location filename="../base/ttssapi.cpp" line="133"/>
+ <location filename="../base/ttssapi.cpp" line="130"/>
<source>Could not start SAPI process</source>
<translation>Nepodařilo se spustit proces SAPI</translation>
</message>
@@ -3304,32 +3532,32 @@ Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
<translation>Vytváření .talk souboru přerušeno</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="68"/>
+ <location filename="../base/talkfile.cpp" line="66"/>
<source>Copying Talkfiles...</source>
<translation>Kopírují se .talk soubory...</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="80"/>
+ <location filename="../base/talkfile.cpp" line="78"/>
<source>Finished creating Talk files</source>
<translation>Vytváření .talk souboru dokončeno</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="240"/>
+ <location filename="../base/talkfile.cpp" line="242"/>
<source>File copy aborted</source>
<translation>Kopírování souboru přerušeno</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="259"/>
+ <location filename="../base/talkfile.cpp" line="261"/>
<source>Copying of %1 to %2 failed</source>
<translation>Kopírování od %1 do %2 selhalo</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="280"/>
+ <location filename="../base/talkfile.cpp" line="283"/>
<source>Cleaning up...</source>
<translation>Čištění...</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="291"/>
+ <location filename="../base/talkfile.cpp" line="294"/>
<source>Finished</source>
<translation>Dokončeno</translation>
</message>
@@ -3337,18 +3565,18 @@ Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
<context>
<name>TalkGenerator</name>
<message>
- <location filename="../base/talkgenerator.cpp" line="39"/>
+ <location filename="../base/talkgenerator.cpp" line="38"/>
<source>Starting TTS Engine</source>
<translation>Spouští se engine syntézy řeči</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="44"/>
- <location filename="../base/talkgenerator.cpp" line="51"/>
+ <location filename="../base/talkgenerator.cpp" line="43"/>
+ <location filename="../base/talkgenerator.cpp" line="50"/>
<source>Init of TTS engine failed</source>
<translation>Inicializace enginu syntézy řeči selhala</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="58"/>
+ <location filename="../base/talkgenerator.cpp" line="57"/>
<source>Starting Encoder Engine</source>
<translation>Spouští engine enkodéru</translation>
</message>
@@ -3373,18 +3601,18 @@ Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
<translation>Ozvučování přerušeno</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="162"/>
- <location filename="../base/talkgenerator.cpp" line="167"/>
+ <location filename="../base/talkgenerator.cpp" line="163"/>
+ <location filename="../base/talkgenerator.cpp" line="168"/>
<source>Voicing of %1 failed: %2</source>
<translation>Ozvučování %1 selhalo: %2</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="211"/>
+ <location filename="../base/talkgenerator.cpp" line="212"/>
<source>Encoding aborted</source>
<translation>Kódování přerušeno</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="239"/>
+ <location filename="../base/talkgenerator.cpp" line="240"/>
<source>Encoding of %1 failed</source>
<translation>Kódování %1 selhalo</translation>
</message>
@@ -3422,7 +3650,7 @@ Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
<translation>&amp;Instalovat</translation>
</message>
<message>
- <location filename="../themesinstallfrm.ui" line="125"/>
+ <location filename="../themesinstallfrm.ui" line="126"/>
<source>&amp;Cancel</source>
<translation>&amp;Zrušit</translation>
</message>
@@ -3430,36 +3658,36 @@ Stiskněte &quot;Ne&quot; pro přeskočení tohoto kroku.</translation>
<context>
<name>ThemesInstallWindow</name>
<message>
- <location filename="../themesinstallwindow.cpp" line="40"/>
+ <location filename="../themesinstallwindow.cpp" line="41"/>
<source>no theme selected</source>
<translation>není vybráno žádné téma</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="41"/>
+ <location filename="../themesinstallwindow.cpp" line="42"/>
<source>no selection</source>
<translation>žádný výběr</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="125"/>
+ <location filename="../themesinstallwindow.cpp" line="122"/>
<source>Network error: %1.
Please check your network and proxy settings.</source>
<translation>Chyba připojení: %1.
Prosím zkontrolujte nastavení sítě a proxy.</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="138"/>
+ <location filename="../themesinstallwindow.cpp" line="135"/>
<source>the following error occured:
%1</source>
<translation>došlo k následující chybě:
%1</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="144"/>
+ <location filename="../themesinstallwindow.cpp" line="141"/>
<source>done.</source>
<translation>hotovo.</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="181"/>
+ <location filename="../themesinstallwindow.cpp" line="178"/>
<source>Information</source>
<translation>Informace</translation>
</message>
@@ -3473,70 +3701,70 @@ Prosím zkontrolujte nastavení sítě a proxy.</translation>
</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="211"/>
+ <location filename="../themesinstallwindow.cpp" line="214"/>
<source>fetching details for %1</source>
<translation>načítám podrobnosti o %1</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="214"/>
+ <location filename="../themesinstallwindow.cpp" line="217"/>
<source>fetching preview ...</source>
<translation>načítám náhled ...</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="227"/>
+ <location filename="../themesinstallwindow.cpp" line="230"/>
<source>&lt;b&gt;Author:&lt;/b&gt; %1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Autor:&lt;/b&gt; %1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="228"/>
- <location filename="../themesinstallwindow.cpp" line="230"/>
+ <location filename="../themesinstallwindow.cpp" line="231"/>
+ <location filename="../themesinstallwindow.cpp" line="233"/>
<source>unknown</source>
<translation>neznámý</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="229"/>
+ <location filename="../themesinstallwindow.cpp" line="232"/>
<source>&lt;b&gt;Version:&lt;/b&gt; %1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Verze:&lt;/b&gt; %1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="231"/>
+ <location filename="../themesinstallwindow.cpp" line="234"/>
<source>&lt;b&gt;Description:&lt;/b&gt; %1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Popis:&lt;/b&gt; %1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="232"/>
+ <location filename="../themesinstallwindow.cpp" line="235"/>
<source>no description</source>
<translation>žádný popis</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="248"/>
+ <location filename="../themesinstallwindow.cpp" line="251"/>
<source>Retrieving theme preview failed.
HTTP response code: %1</source>
<translation>Stahování náhledu tématu selhalo.
Kód HTTP odpovědi: %1</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="260"/>
+ <location filename="../themesinstallwindow.cpp" line="262"/>
<source>no theme preview</source>
<translation>žádný náhled tématu</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="289"/>
+ <location filename="../themesinstallwindow.cpp" line="290"/>
<source>Select</source>
<translation>Vybrat</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="296"/>
+ <location filename="../themesinstallwindow.cpp" line="297"/>
<source>getting themes information ...</source>
<translation>stahuji informace o tématu ...</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="326"/>
+ <location filename="../themesinstallwindow.cpp" line="325"/>
<source>No themes selected, skipping</source>
<translation>Nevybráno žádné téma, přeskakuji</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="356"/>
+ <location filename="../themesinstallwindow.cpp" line="354"/>
<source>Mount point is wrong!</source>
<translation>Připojovací bod je špatně!</translation>
</message>
@@ -3584,7 +3812,7 @@ Kód HTTP odpovědi: %1</translation>
<translation>&amp;Odinstalovat</translation>
</message>
<message>
- <location filename="../uninstallfrm.ui" line="138"/>
+ <location filename="../uninstallfrm.ui" line="139"/>
<source>&amp;Cancel</source>
<translation>&amp;Zrušit</translation>
</message>
@@ -3608,12 +3836,12 @@ Kód HTTP odpovědi: %1</translation>
<translation>Odinstalace %1...</translation>
</message>
<message>
- <location filename="../base/uninstall.cpp" line="80"/>
+ <location filename="../base/uninstall.cpp" line="81"/>
<source>Could not delete %1</source>
<translation>%1 nejde smazat</translation>
</message>
<message>
- <location filename="../base/uninstall.cpp" line="109"/>
+ <location filename="../base/uninstall.cpp" line="115"/>
<source>Uninstallation finished</source>
<translation>Odinstalace dokončena</translation>
</message>
@@ -3621,19 +3849,19 @@ Kód HTTP odpovědi: %1</translation>
<context>
<name>Utils</name>
<message>
- <location filename="../base/utils.cpp" line="322"/>
+ <location filename="../base/utils.cpp" line="375"/>
<source>&lt;li&gt;Permissions insufficient for bootloader installation.
Administrator priviledges are necessary.&lt;/li&gt;</source>
<translation>&lt;li&gt;Nedostatečná oprávnění pro instalaci zavaděče.
Jsou nutná administrátorská práva.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/utils.cpp" line="334"/>
+ <location filename="../base/utils.cpp" line="387"/>
<source>&lt;li&gt;Target mismatch detected.&lt;br/&gt;Installed target: %1&lt;br/&gt;Selected target: %2.&lt;/li&gt;</source>
<translation>&lt;li&gt;Zjištěn chybný cíl.&lt;br/&gt;Instalováno na: %1&lt;br/&gt;Vybraný cíl: %2.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/utils.cpp" line="341"/>
+ <location filename="../base/utils.cpp" line="396"/>
<source>Problem detected:</source>
<translation>Zjištěn problém:</translation>
</message>
@@ -3666,72 +3894,72 @@ Jsou nutná administrátorská práva.&lt;/li&gt;</translation>
<translation>Nepodařilo se získat řetězce z instalace, stahuji</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="171"/>
+ <location filename="../base/voicefile.cpp" line="172"/>
<source>Downloading voice info...</source>
<translation>Stahuji informace o hlasu...</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="184"/>
+ <location filename="../base/voicefile.cpp" line="185"/>
<source>Download error: received HTTP error %1.</source>
<translation>Chyba stahování: HTTP chyba %1.</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="191"/>
+ <location filename="../base/voicefile.cpp" line="192"/>
<source>Cached file used.</source>
<translation>Použit cachovaný soubor.</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="194"/>
+ <location filename="../base/voicefile.cpp" line="195"/>
<source>Download error: %1</source>
<translation>Chyba stahování: %1</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="199"/>
+ <location filename="../base/voicefile.cpp" line="200"/>
<source>Download finished.</source>
<translation>Stahování dokončena.</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="212"/>
+ <location filename="../base/voicefile.cpp" line="213"/>
<source>failed to open downloaded file</source>
<translation>otevření staženého souboru selhalo</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="218"/>
+ <location filename="../base/voicefile.cpp" line="219"/>
<source>Reading strings...</source>
<translation>Čtení řetězců...</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="271"/>
+ <location filename="../base/voicefile.cpp" line="276"/>
<source>The downloaded file was empty!</source>
<translation>Stažený soubor byl prázdný!</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="297"/>
+ <location filename="../base/voicefile.cpp" line="302"/>
<source>Creating voicefiles...</source>
<translation>Vytváří se hlasový soubor...</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="302"/>
+ <location filename="../base/voicefile.cpp" line="307"/>
<source>Error opening downloaded file</source>
<translation>Chyba otevírání staženého souboru</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="313"/>
+ <location filename="../base/voicefile.cpp" line="318"/>
<source>Error opening output file</source>
<translation>Chyba při otevírání výstupního souboru</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="333"/>
+ <location filename="../base/voicefile.cpp" line="338"/>
<source>successfully created.</source>
<translation>úspěšně vytvořeno.</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="342"/>
+ <location filename="../base/voicefile.cpp" line="347"/>
<source>Cleaning up...</source>
<translation>Čištění...</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="353"/>
+ <location filename="../base/voicefile.cpp" line="358"/>
<source>Finished</source>
<translation>Dokončeno</translation>
</message>
@@ -3739,67 +3967,77 @@ Jsou nutná administrátorská práva.&lt;/li&gt;</translation>
<context>
<name>ZipInstaller</name>
<message>
- <location filename="../base/zipinstaller.cpp" line="60"/>
+ <location filename="../base/zipinstaller.cpp" line="59"/>
<source>done.</source>
<translation>hotovo.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="80"/>
+ <location filename="../base/zipinstaller.cpp" line="78"/>
<source>Downloading file %1.%2</source>
<translation>Stahuji soubor %1.%2</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="115"/>
<source>Download error: received HTTP error %1.</source>
- <translation>Chyba stahování: HTTP chyba %1.</translation>
+ <translation type="vanished">Chyba stahování: HTTP chyba %1.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="121"/>
<source>Cached file used.</source>
- <translation>Použit cachovaný soubor.</translation>
+ <translation type="vanished">Použit cachovaný soubor.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="123"/>
+ <location filename="../base/zipinstaller.cpp" line="120"/>
<source>Download error: %1</source>
<translation>Chyba stahování: %1</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="127"/>
+ <location filename="../base/zipinstaller.cpp" line="128"/>
<source>Download finished.</source>
<translation>Stahování dokončeno.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="133"/>
+ <location filename="../base/zipinstaller.cpp" line="135"/>
<source>Extracting file.</source>
<translation>Rozbaluji soubor.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="153"/>
+ <location filename="../base/zipinstaller.cpp" line="156"/>
<source>Extraction failed!</source>
<translation>Rozbalení selhalo!</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="146"/>
+ <location filename="../base/zipinstaller.cpp" line="149"/>
<source>Not enough disk space! Aborting.</source>
<translation>Není dost místa na disku! Přerušuji.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="68"/>
+ <location filename="../base/zipinstaller.cpp" line="67"/>
<source>Package installation finished successfully.</source>
<translation>Instalace balíčku úspěšně dokončena.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="162"/>
+ <location filename="../base/zipinstaller.cpp" line="113"/>
+ <source>Download error: received HTTP error %1
+%2</source>
+ <translation>Chyba stahování: nastala HTTP chyba %1
+%2</translation>
+ </message>
+ <message>
+ <location filename="../base/zipinstaller.cpp" line="125"/>
+ <source>Download finished (cache used).</source>
+ <translation>Stahování dokončeno (použita vyrovnávací paměť).</translation>
+ </message>
+ <message>
+ <location filename="../base/zipinstaller.cpp" line="168"/>
<source>Installing file.</source>
<translation>Instaluji soubor.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="173"/>
+ <location filename="../base/zipinstaller.cpp" line="180"/>
<source>Installing file failed.</source>
<translation>Instalace souboru selhala.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="186"/>
+ <location filename="../base/zipinstaller.cpp" line="193"/>
<source>Creating installation log</source>
<translation>Vytváření instalačního výpisu</translation>
</message>
@@ -3851,8 +4089,12 @@ Jsou nutná administrátorská práva.&lt;/li&gt;</translation>
</message>
<message>
<location filename="../aboutbox.ui" line="132"/>
+ <source>L&amp;ibraries</source>
+ <translation>K&amp;nihovny</translation>
+ </message>
+ <message>
<source>&amp;Speex License</source>
- <translation>Licence &amp;Speex</translation>
+ <translation type="vanished">Licence &amp;Speex</translation>
</message>
<message>
<location filename="../aboutbox.ui" line="158"/>
diff --git a/utils/rbutilqt/lang/rbutil_de.ts b/utils/rbutilqt/lang/rbutil_de.ts
index 26ef691d3a..78fa7eec87 100644
--- a/utils/rbutilqt/lang/rbutil_de.ts
+++ b/utils/rbutilqt/lang/rbutil_de.ts
@@ -40,42 +40,42 @@
<translation>&amp;Abbrechen</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="70"/>
+ <location filename="../gui/backupdialog.cpp" line="69"/>
<source>Installation size: calculating ...</source>
<translation>Installationsgröße: berechne ...</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="89"/>
+ <location filename="../gui/backupdialog.cpp" line="88"/>
<source>Select Backup Filename</source>
<translation>Dateiname für Sicherung auswählen</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="109"/>
+ <location filename="../gui/backupdialog.cpp" line="108"/>
<source>Installation size: %L1 %2</source>
<translation>Installationsgröße: %L1 %2</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="116"/>
+ <location filename="../gui/backupdialog.cpp" line="115"/>
<source>File exists</source>
<translation>Datei existiert</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="117"/>
+ <location filename="../gui/backupdialog.cpp" line="116"/>
<source>The selected backup file already exists. Overwrite?</source>
<translation>Ausgewählte Sicherungsdatei bereits vorhanden. Überschreiben?</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="125"/>
+ <location filename="../gui/backupdialog.cpp" line="124"/>
<source>Starting backup ...</source>
<translation>Starte Sicherung ...</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="144"/>
+ <location filename="../gui/backupdialog.cpp" line="143"/>
<source>Backup successful.</source>
<translation>Sicherung erfolgreich.</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="147"/>
+ <location filename="../gui/backupdialog.cpp" line="146"/>
<source>Backup failed!</source>
<translation>Sicherung fehlgeschlagen!</translation>
</message>
@@ -180,92 +180,92 @@
<context>
<name>BootloaderInstallBase</name>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="78"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="69"/>
<source>Download error: received HTTP error %1.</source>
<translation>Fehler beim Herunterladen: HTTP Fehler %1.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="84"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="75"/>
<source>Download error: %1</source>
<translation>Fehler beim Herunterladen: %1</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="90"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="81"/>
<source>Download finished (cache used).</source>
<translation>Download abgeschlossen (Cache verwendet).</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="92"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="83"/>
<source>Download finished.</source>
<translation>Download abgeschlossen.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="120"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="112"/>
<source>Creating backup of original firmware file.</source>
<translation>Erzeuge Sicherungskopie der Original-Firmware.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="122"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="114"/>
<source>Creating backup folder failed</source>
<translation>Erzeugen des Sicherungskopie-Ordners fehlgeschlagen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="128"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="120"/>
<source>Creating backup copy failed.</source>
<translation>Erzeugen der Sicherungskopie fehlgeschlagen.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="131"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="123"/>
<source>Backup created.</source>
<translation>Sicherungskopie erzeugt.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="144"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="140"/>
<source>Creating installation log</source>
<translation>Erzeuge Installationslog</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="242"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="245"/>
<source>Zip file format detected</source>
<translation>Zip-Format erkannt</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="254"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="257"/>
<source>CAB file format detected</source>
<translation>CAB-Format erkannt</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="275"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="278"/>
<source>Extracting firmware %1 from archive</source>
<translation>Entpacke Firmware %1 aus Archiv</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="282"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="285"/>
<source>Error extracting firmware from archive</source>
<translation>Fehler beim Extrahieren der Firmware</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="291"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="294"/>
<source>Could not find firmware in archive</source>
<translation>Keine Firmware im Archiv gefunden</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="166"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="162"/>
<source>Waiting for system to remount player</source>
<translation>Warte bis das Gerät wieder eingehängt ist</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="196"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="192"/>
<source>Player remounted</source>
<translation>Gerät wieder eingehängt</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="201"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="197"/>
<source>Timeout on remount</source>
<translation>Zeitüberschreitung beim Warten</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="156"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="152"/>
<source>Installation log created</source>
<translation>Installationslog erzeugt</translation>
</message>
@@ -602,27 +602,27 @@
<translation>Patche Firmware ...</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="137"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="136"/>
<source>Patching the original firmware failed</source>
<translation>Modifizieren der Firmware-Datei fehlgeschlagen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="143"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="142"/>
<source>Succesfully patched firmware file</source>
<translation>Firmware-Datei erfolgreich modifiziert</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="158"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="157"/>
<source>Bootloader successful installed</source>
<translation>Bootloader erfolgreich installiert</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="164"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="163"/>
<source>Patched bootloader could not be installed</source>
<translation>Modifizierter Bootloader konnte nicht installiert werden</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="175"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="174"/>
<source>To uninstall, perform a normal upgrade with an unmodified original firmware.</source>
<translation>Zum deinstallieren ein Upgrade mit einer unveränderten Originalfirmware-Datei durchführen.</translation>
</message>
@@ -630,112 +630,111 @@
<context>
<name>BootloaderInstallIpod</name>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="49"/>
<source>Error: can&apos;t allocate buffer memory!</source>
- <translation>Fehler: kann Speicher nicht allokieren!</translation>
+ <translation type="vanished">Fehler: kann Speicher nicht allokieren!</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="80"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="72"/>
<source>Downloading bootloader file</source>
<translation>Lade Bootloader-Datei herunter</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="64"/>
- <location filename="../base/bootloaderinstallipod.cpp" line="151"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="56"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="143"/>
<source>Failed to read firmware directory</source>
<translation>Konnte Firmwareverzeichnis nicht lesen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="69"/>
- <location filename="../base/bootloaderinstallipod.cpp" line="156"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="61"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="148"/>
<source>Unknown version number in firmware (%1)</source>
<translation>Unbekannte Versionsnummer in Firmware (%1)</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="75"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="67"/>
<source>Warning: This is a MacPod, Rockbox only runs on WinPods.
See http://www.rockbox.org/wiki/IpodConversionToFAT32</source>
<translation>Warnung: Dies ist ein MacPod, Rockbox läuft nur auf WinPods.
Siehe http://www.rockbox.org/wiki/IpodConversionToFAT32</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="94"/>
- <location filename="../base/bootloaderinstallipod.cpp" line="163"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="86"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="155"/>
<source>Could not open Ipod in R/W mode</source>
<translation>Kann Ipod nicht im R/W-Modus öffnen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="104"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="96"/>
<source>Successfull added bootloader</source>
<translation>Bootloader erfolgreich hinzugefügt</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="115"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="107"/>
<source>Failed to add bootloader</source>
<translation>Konnte Bootloader nicht hinzufügen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="127"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="119"/>
<source>Bootloader Installation complete.</source>
<translation>Bootloader-Installation vollständig.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="132"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="124"/>
<source>Writing log aborted</source>
<translation>Schreiben der Log-Datei abgebrochen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="169"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="161"/>
<source>No bootloader detected.</source>
<translation>Kein Bootloader erkannt.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="229"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="241"/>
<source>Error: could not retrieve device name</source>
<translation>Fehler: konnte Gerätenamen nicht ermitteln</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="245"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="257"/>
<source>Error: no mountpoint specified!</source>
<translation>Fehler: kein Einhängepunkt angegeben!</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="250"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="262"/>
<source>Could not open Ipod: permission denied</source>
<translation>Konnte Ipod nicht öffnen: Zugriff verweigert</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="254"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="266"/>
<source>Could not open Ipod</source>
<translation>Konnte Ipod nicht öffnen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="265"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="277"/>
<source>No firmware partition on disk</source>
<translation>Keine Firmware-Partition auf dem Laufwerk</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="175"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="167"/>
<source>Successfully removed bootloader</source>
<translation>Bootloader erfolgreich entfernt</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="183"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="175"/>
<source>Removing bootloader failed.</source>
<translation>Entfernen des Bootloaders fehlgeschlagen.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="90"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="82"/>
<source>Installing Rockbox bootloader</source>
<translation>Installiere Rockbox Bootloader</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="142"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="134"/>
<source>Uninstalling bootloader</source>
<translation>Entferne Bootloader</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="259"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="271"/>
<source>Error reading partition table - possibly not an Ipod</source>
<translation>Fehler beim Lesen der Partitionstabelle - möglicherweise kein Ipod</translation>
</message>
@@ -1037,35 +1036,32 @@ Konnte Gerät nicht wieder einhängen, bitte manuall vornehmen. Wenn der iPod ni
<context>
<name>BootloaderInstallSansa</name>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="50"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="54"/>
<source>Error: can&apos;t allocate buffer memory!</source>
<translation>Fehler: kann Speicher nicht allokieren!</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="55"/>
<source>Searching for Sansa</source>
- <translation>Suche nach Sansa</translation>
+ <translation type="vanished">Suche nach Sansa</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="59"/>
<source>Permission for disc access denied!
This is required to install the bootloader</source>
- <translation>Direkter Laufwerkszugriff verweigert!
+ <translation type="vanished">Direkter Laufwerkszugriff verweigert!
Der Zugriff ist notwendig, um den Bootloader zu installieren</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="66"/>
<source>No Sansa detected!</source>
- <translation>Kein Sansa gefunden!</translation>
+ <translation type="vanished">Kein Sansa gefunden!</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="79"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="68"/>
<source>Downloading bootloader file</source>
<translation>Lade Bootloader-Datei herunter</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="71"/>
- <location filename="../base/bootloaderinstallsansa.cpp" line="179"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="60"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="164"/>
<source>OLD ROCKBOX INSTALLATION DETECTED, ABORTING.
You must reinstall the original Sansa firmware before running
sansapatcher for the first time.
@@ -1078,83 +1074,83 @@ Siehe http://www.rockbox.org/wiki/SansaE200Install
</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="102"/>
- <location filename="../base/bootloaderinstallsansa.cpp" line="189"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="87"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="174"/>
<source>Could not open Sansa in R/W mode</source>
<translation>Konnte Sansa nicht im R/W-Modus öffnen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="129"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="114"/>
<source>Successfully installed bootloader</source>
<translation>Bootloader erfolgreich installiert</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="140"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="125"/>
<source>Failed to install bootloader</source>
<translation>Bootloader-Installation fehlgeschlagen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="153"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="138"/>
<source>Bootloader Installation complete.</source>
<translation>Bootloader-Installation vollständig.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="158"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="143"/>
<source>Writing log aborted</source>
<translation>Schreiben der Log-Datei abgebrochen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="239"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="244"/>
<source>Error: could not retrieve device name</source>
<translation>Fehler: konnte Gerätenamen nicht ermitteln</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="255"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="260"/>
<source>Can&apos;t find Sansa</source>
<translation>Konnte Sansa nicht finden</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="260"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="265"/>
<source>Could not open Sansa</source>
<translation>Konnte Sansa nicht öffnen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="265"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="270"/>
<source>Could not read partition table</source>
<translation>Konnte Partitionstabelle nicht lesen</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="272"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="277"/>
<source>Disk is not a Sansa (Error %1), aborting.</source>
<translation>Laufwerk ist kein Sansa (Fehler: %1), breche ab.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="195"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="180"/>
<source>Successfully removed bootloader</source>
<translation>Bootloader erfolgreich entfernt</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="203"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="188"/>
<source>Removing bootloader failed.</source>
<translation>Entfernen des Bootloaders fehlgeschlagen.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="94"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="83"/>
<source>Installing Rockbox bootloader</source>
<translation>Installiere Rockbox Bootloader</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="170"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="155"/>
<source>Uninstalling bootloader</source>
<translation>Entferne Bootloader</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="111"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="96"/>
<source>Checking downloaded bootloader</source>
<translation>Prüfe heruntergeladenen Bootloader</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="119"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="104"/>
<source>Bootloader mismatch! Aborting.</source>
<translation>Fehler im Bootloader! Abbruch.</translation>
</message>
@@ -1787,32 +1783,32 @@ Bitte TTS-System konfigurieren.</translation>
<context>
<name>EncTtsCfgGui</name>
<message>
- <location filename="../encttscfggui.cpp" line="45"/>
+ <location filename="../encttscfggui.cpp" line="44"/>
<source>Waiting for engine...</source>
<translation>Warte auf Engine ...</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="95"/>
+ <location filename="../encttscfggui.cpp" line="91"/>
<source>Ok</source>
<translation>Ok</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="98"/>
+ <location filename="../encttscfggui.cpp" line="94"/>
<source>Cancel</source>
<translation>Abbrechen</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="197"/>
+ <location filename="../encttscfggui.cpp" line="257"/>
<source>Browse</source>
<translation>Durchsuchen</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="205"/>
+ <location filename="../encttscfggui.cpp" line="272"/>
<source>Refresh</source>
<translation>Aktualisieren</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="378"/>
+ <location filename="../encttscfggui.cpp" line="263"/>
<source>Select executable</source>
<translation>Ausführbare Datei auswählen</translation>
</message>
@@ -1881,16 +1877,21 @@ Bitte TTS-System konfigurieren.</translation>
<name>InfoWidget</name>
<message>
<location filename="../gui/infowidget.cpp" line="30"/>
- <location filename="../gui/infowidget.cpp" line="107"/>
+ <location filename="../gui/infowidget.cpp" line="99"/>
<source>File</source>
<translation>Datei</translation>
</message>
<message>
<location filename="../gui/infowidget.cpp" line="30"/>
- <location filename="../gui/infowidget.cpp" line="107"/>
+ <location filename="../gui/infowidget.cpp" line="99"/>
<source>Version</source>
<translation>Version</translation>
</message>
+ <message>
+ <location filename="../gui/infowidget.cpp" line="47"/>
+ <source>Loading, please wait ...</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InfoWidgetFrm</name>
@@ -2017,27 +2018,27 @@ Bitte TTS-System konfigurieren.</translation>
<context>
<name>PlayerBuildInfo</name>
<message>
- <location filename="../base/playerbuildinfo.cpp" line="327"/>
+ <location filename="../base/playerbuildinfo.cpp" line="337"/>
<source>Stable (Retired)</source>
<translation>Stabil (Final)</translation>
</message>
<message>
- <location filename="../base/playerbuildinfo.cpp" line="330"/>
+ <location filename="../base/playerbuildinfo.cpp" line="340"/>
<source>Unusable</source>
<translation>Unbenutzbar</translation>
</message>
<message>
- <location filename="../base/playerbuildinfo.cpp" line="333"/>
+ <location filename="../base/playerbuildinfo.cpp" line="343"/>
<source>Unstable</source>
<translation>Instabil</translation>
</message>
<message>
- <location filename="../base/playerbuildinfo.cpp" line="336"/>
+ <location filename="../base/playerbuildinfo.cpp" line="346"/>
<source>Stable</source>
<translation>Stabil</translation>
</message>
<message>
- <location filename="../base/playerbuildinfo.cpp" line="339"/>
+ <location filename="../base/playerbuildinfo.cpp" line="349"/>
<source>Unknown</source>
<translation>Unbekannt</translation>
</message>
@@ -2077,17 +2078,17 @@ Bitte TTS-System konfigurieren.</translation>
<context>
<name>ProgressLoggerGui</name>
<message>
- <location filename="../progressloggergui.cpp" line="120"/>
+ <location filename="../progressloggergui.cpp" line="117"/>
<source>&amp;Ok</source>
<translation>&amp;Ok</translation>
</message>
<message>
- <location filename="../progressloggergui.cpp" line="100"/>
+ <location filename="../progressloggergui.cpp" line="99"/>
<source>&amp;Abort</source>
<translation>&amp;Abbrechen</translation>
</message>
<message>
- <location filename="../progressloggergui.cpp" line="146"/>
+ <location filename="../progressloggergui.cpp" line="141"/>
<source>Save system trace log</source>
<translation>System-Trace Log speichern</translation>
</message>
@@ -2096,7 +2097,7 @@ Bitte TTS-System konfigurieren.</translation>
<name>QObject</name>
<message>
<location filename="../configure.cpp" line="616"/>
- <location filename="../main.cpp" line="97"/>
+ <location filename="../main.cpp" line="102"/>
<source>LTR</source>
<extracomment>This string is used to indicate the writing direction. Translate it to &quot;RTL&quot; (without quotes) for RTL languages. Anything else will get treated as LTR language.</extracomment>
<translation>LTR</translation>
@@ -2112,50 +2113,94 @@ Bitte TTS-System konfigurieren.</translation>
<translation>(Unbekannter Produktname)</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="87"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="107"/>
<source>Bootloader installation is almost complete. Installation &lt;b&gt;requires&lt;/b&gt; you to perform the following steps manually:</source>
<translation>Installation des Bootloader ist fast abgeschlossen. Zum Abschluss der Installation ist es &lt;b&gt;notwendig&lt;/b&gt;, die folgenden Schritte manuell auszuführen:</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="93"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="113"/>
<source>&lt;li&gt;Safely remove your player.&lt;/li&gt;</source>
<translation>&lt;li&gt;Gerät sicher entfernen.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="99"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="119"/>
<source>&lt;li&gt;Reboot your player into the original firmware.&lt;/li&gt;&lt;li&gt;Perform a firmware upgrade using the update functionality of the original firmware. Please refer to your player&apos;s manual on details.&lt;br/&gt;&lt;b&gt;Important:&lt;/b&gt; updating the firmware is a critical process that must not be interrupted. &lt;b&gt;Make sure the player is charged before starting the firmware update process.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;After the firmware has been updated reboot your player.&lt;/li&gt;</source>
<translation>&lt;li&gt;Gerät mit der Original-Firmware starten.&lt;/li&gt;&lt;li&gt;Ein Firmware-Update mit der Update-Funktion der Original-Firmware entsprechend der Anleitung des Geräts durchführen.&lt;/li&gt;&lt;b&gt;Wichtig:&lt;/b&gt;Das Firmware-Update ist ein kritischer Prozess, der nicht unterbrochen werden darf. &lt;b&gt;Bitte darauf achten, dass der Akku vor dem Starten des Updates geladen ist.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Nach Abschluß des Updates das Gerät neu starten.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="110"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="130"/>
<source>&lt;li&gt;Remove any previously inserted microSD card&lt;/li&gt;</source>
<translation>&lt;li&gt;Eine eventuell eingelegte microSD-Karte entfernen&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="111"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="131"/>
<source>&lt;li&gt;Disconnect your player. The player will reboot and perform an update of the original firmware. Please refer to your players manual on details.&lt;br/&gt;&lt;b&gt;Important:&lt;/b&gt; updating the firmware is a critical process that must not be interrupted. &lt;b&gt;Make sure the player is charged before disconnecting the player.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;After the firmware has been updated reboot your player.&lt;/li&gt;</source>
<translation>&lt;li&gt;Das Gerät entfernen. Es wird einen Neustart und ein Update der Original-Firmware durchführen. Für Details bitte das Handbuch des Gerätes beachten.&lt;br/&gt;&lt;b&gt;Wichtig:&lt;/b&gt;Das Firmware-Update ist ein kritischer Prozess, der nicht unterbrochen werden darf. &lt;b&gt;Unbedingt vor dem Trennen darauf achten dass das Gerät aufgeladen ist.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Nach Abschluß des Updates das Gerät neu starten.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="122"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="142"/>
<source>&lt;li&gt;Turn the player off&lt;/li&gt;&lt;li&gt;Insert the charger&lt;/li&gt;</source>
<translation>&lt;li&gt;Gerät ausschalten&lt;/li&gt;&lt;li&gt;Ladegerät anstecken&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="127"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="147"/>
<source>&lt;li&gt;Unplug USB and power adaptors&lt;/li&gt;&lt;li&gt;Hold &lt;i&gt;Power&lt;/i&gt; to turn the player off&lt;/li&gt;&lt;li&gt;Toggle the battery switch on the player&lt;/li&gt;&lt;li&gt;Hold &lt;i&gt;Power&lt;/i&gt; to boot into Rockbox&lt;/li&gt;</source>
<translation>&lt;li&gt;USB und Stromkabel abziehen&lt;/li&gt;&lt;li&gt;&lt;i&gt;Power&lt;/i&gt; gedrückt halten, um das Gerät auszuschalten&lt;/li&gt;&lt;li&gt;Batterieschalter am Gerät umlegen&lt;/li&gt;&lt;li&gt;&lt;i&gt;Power&lt;/i&gt; halten, um Rockbox zu booten&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="133"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="153"/>
<source>&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; You can safely install other parts first, but the above steps are &lt;b&gt;required&lt;/b&gt; to finish the installation!&lt;/p&gt;</source>
<translation>&lt;p&gt;&lt;b&gt;Hinweis:&lt;/b&gt; andere Teile von Rockbox können problemlos vorher installiert werden, aber die genannten Schritte sind &lt;b&gt;notwendig&lt;/b&gt;, um die Installation abzuschließen!&lt;/p&gt;</translation>
</message>
</context>
<context>
+ <name>QuaGzipFile</name>
+ <message>
+ <location filename="../quazip/quagzipfile.cpp" line="60"/>
+ <location filename="../quazip-1.2/quazip/quagzipfile.cpp" line="60"/>
+ <source>QIODevice::Append is not supported for GZIP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../quazip/quagzipfile.cpp" line="66"/>
+ <location filename="../quazip-1.2/quazip/quagzipfile.cpp" line="66"/>
+ <source>Opening gzip for both reading and writing is not supported</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../quazip/quagzipfile.cpp" line="74"/>
+ <location filename="../quazip-1.2/quazip/quagzipfile.cpp" line="74"/>
+ <source>You can open a gzip either for reading or for writing. Which is it?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../quazip/quagzipfile.cpp" line="80"/>
+ <location filename="../quazip-1.2/quazip/quagzipfile.cpp" line="80"/>
+ <source>Could not gzopen() file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QuaZIODevice</name>
+ <message>
+ <location filename="../quazip/quaziodevice.cpp" line="188"/>
+ <location filename="../quazip-1.2/quazip/quaziodevice.cpp" line="188"/>
+ <source>QIODevice::Append is not supported for QuaZIODevice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../quazip/quaziodevice.cpp" line="193"/>
+ <location filename="../quazip-1.2/quazip/quaziodevice.cpp" line="193"/>
+ <source>QIODevice::ReadWrite is not supported for QuaZIODevice</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QuaZipFile</name>
<message>
<location filename="../quazip/quazipfile.cpp" line="251"/>
+ <location filename="../quazip-1.2/quazip/quazipfile.cpp" line="251"/>
+ <location filename="../quazip_/quazipfile.cpp" line="251"/>
<source>ZIP/UNZIP API error %1</source>
<translation>ZIP / Unzip API Fehler %1</translation>
</message>
@@ -2163,160 +2208,184 @@ Bitte TTS-System konfigurieren.</translation>
<context>
<name>RbUtilQt</name>
<message>
- <location filename="../rbutilqt.cpp" line="457"/>
+ <location filename="../rbutilqt.cpp" line="493"/>
<source>Confirm Uninstallation</source>
<translation>Entfernen bestätigen</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="458"/>
+ <location filename="../rbutilqt.cpp" line="494"/>
<source>Do you really want to uninstall the Bootloader?</source>
<translation>Bootloader wirklich entfernen?</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="472"/>
+ <location filename="../rbutilqt.cpp" line="506"/>
<source>No uninstall method for this target known.</source>
<translation>Keine Deinstallationsmethode für dieses Gerät verfügbar.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="499"/>
+ <location filename="../rbutilqt.cpp" line="529"/>
<source>No Rockbox bootloader found.</source>
<translation>Kein Rockbox-Bootloader gefunden.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="518"/>
+ <location filename="../rbutilqt.cpp" line="548"/>
<source>Confirm installation</source>
<translation>Installation bestätigen</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="519"/>
+ <location filename="../rbutilqt.cpp" line="549"/>
<source>Do you really want to install Rockbox Utility to your player? After installation you can run it from the players hard drive.</source>
<translation>Rockbox Utility wirklich auf dem Gerät installieren? Nach der Installation kann es von dem Laufwerk des Geräts ausgeführt werden.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="528"/>
+ <location filename="../rbutilqt.cpp" line="558"/>
<source>Installing Rockbox Utility</source>
<translation>Installiere Rockbox Utility</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="679"/>
+ <location filename="../rbutilqt.cpp" line="708"/>
<source>Rockbox Utility Update available</source>
<translation>Update von Rockbox Utility verfügbar</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="680"/>
+ <location filename="../rbutilqt.cpp" line="709"/>
<source>&lt;b&gt;New Rockbox Utility version available.&lt;/b&gt;&lt;br&gt;&lt;br&gt;You are currently using version %1. Get version %2 at &lt;a href=&apos;%3&apos;&gt;%3&lt;/a&gt;</source>
<translation>&lt;b&gt;Neue Version von Rockbox Utility verfügbar.&lt;/b&gt;&lt;br&gt;&lt;br&gt;Aktuell verwendete Version ist %1. Version %2 ist verfügbar unter &lt;a href=&apos;%3&apos;&gt;%3&lt;/a&gt;</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="684"/>
+ <location filename="../rbutilqt.cpp" line="713"/>
<source>New version of Rockbox Utility available.</source>
<translation>Neue Version von Rockbox Utility verfügbar.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="687"/>
+ <location filename="../rbutilqt.cpp" line="716"/>
<source>Rockbox Utility is up to date.</source>
<translation>Rockbox Utility ist aktuell.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="710"/>
+ <location filename="../rbutilqt.cpp" line="739"/>
<source>Device ejected</source>
<translation>Gerät ausgeworfen</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="711"/>
+ <location filename="../rbutilqt.cpp" line="740"/>
<source>Device successfully ejected. You may now disconnect the player from the PC.</source>
<translation>Gerät erfolgreich ausgeworfen. Es kann jetzt vom PC getrennt werden.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="715"/>
+ <location filename="../rbutilqt.cpp" line="744"/>
<source>Ejecting failed</source>
<translation>Auswerfen fehlgeschlagen</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="716"/>
+ <location filename="../rbutilqt.cpp" line="745"/>
<source>Ejecting the device failed. Please make sure no programs are accessing files on the device. If ejecting still fails please use your computers eject funtionality.</source>
<translation>Auswerfen fehlgeschlagen. Bitte sicherstellen dass keine anderen Programme auf Dateien auf dem Gerät zugreifen. Falls das Auswerfen dann immer noch fehltschlägt bitte die Auswerf-Funktion des Computers benutzen.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="532"/>
+ <location filename="../rbutilqt.cpp" line="562"/>
<source>Mount point is wrong!</source>
<translation>Falscher Einhängepunkt!</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="488"/>
+ <location filename="../rbutilqt.cpp" line="227"/>
+ <source>Certificate error</source>
+ <translation>Zertifikatsfehler</translation>
+ </message>
+ <message>
+ <location filename="../rbutilqt.cpp" line="229"/>
+ <source>%1
+
+Issuer: %2
+Subject: %3
+Valid since: %4
+Valid until: %5
+
+Temporarily trust certificate?</source>
+ <translation>%1
+
+Aussteller: %2
+Eigentümer: %3
+Gültig seit: %4
+Gültig bis: %5
+
+Zertifikat temporär akzeptieren?</translation>
+ </message>
+ <message>
+ <location filename="../rbutilqt.cpp" line="518"/>
<source>Rockbox Utility can not uninstall the bootloader on your player. Please perform a firmware update using your player vendors firmware update process.</source>
<translation>Rockbox Utility kann den Bootloader auf dem Gerät nicht deinstallieren. Bitte ein Firmware-Update mit Hilfe des Update-Verfahrens des Herstellers durchführen.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="491"/>
+ <location filename="../rbutilqt.cpp" line="521"/>
<source>Important: make sure to boot your player into the original firmware before using the vendors firmware update process.</source>
<translation>Wichtig: bitte darauf achten das Gerät vor dem Update in die Herstellerfirmware zu booten.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="546"/>
+ <location filename="../rbutilqt.cpp" line="576"/>
<source>Error installing Rockbox Utility</source>
<translation>Fehler beim installieren von Rockbox Utility</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="550"/>
+ <location filename="../rbutilqt.cpp" line="580"/>
<source>Installing user configuration</source>
<translation>Installiere Benutzerkonfiguration</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="554"/>
+ <location filename="../rbutilqt.cpp" line="584"/>
<source>Error installing user configuration</source>
<translation>Fehler beim installieren der Benutzerkonfiguration</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="558"/>
+ <location filename="../rbutilqt.cpp" line="588"/>
<source>Successfully installed Rockbox Utility.</source>
<translation>Rockbox Utility erfolgreich installiert.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="353"/>
- <location filename="../rbutilqt.cpp" line="592"/>
+ <location filename="../rbutilqt.cpp" line="391"/>
+ <location filename="../rbutilqt.cpp" line="622"/>
<source>Configuration error</source>
<translation>Konfigurationsfehler</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="593"/>
+ <location filename="../rbutilqt.cpp" line="623"/>
<source>Your configuration is invalid. Please go to the configuration dialog and make sure the selected values are correct.</source>
<translation>Die Konfiguration ist ungültig. Bitte im Konfigurationsdialog sicherstellen, dass die Einstellungen korrekt sind.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="346"/>
+ <location filename="../rbutilqt.cpp" line="384"/>
<source>This is a new installation of Rockbox Utility, or a new version. The configuration dialog will now open to allow you to setup the program, or review your settings.</source>
<translation>Dies ist eine neue Installation oder eine neue Version von Rockbox Utility. Der Konfigurationsdialog wird nun automatisch geöffnet, um das Programm zu konfigurieren oder die Einstellungen zu prüfen.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="105"/>
+ <location filename="../rbutilqt.cpp" line="104"/>
<source>Wine detected!</source>
<translation>Wine entdeckt!</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="106"/>
+ <location filename="../rbutilqt.cpp" line="105"/>
<source>It seems you are trying to run this program under Wine. Please don&apos;t do this, running under Wine will fail. Use the native Linux binary instead.</source>
<translation>Es scheint so, als ob dieses Programm mit Wine ausgeführt wird. Dies wird fehlschlagen. Unter Linux bitte die native Linux-Version verwenden.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="224"/>
+ <location filename="../rbutilqt.cpp" line="263"/>
<source>Can&apos;t get version information.
Network error: %1. Please check your network and proxy settings.</source>
<translation>Kann Versions-Informationen nicht laden.
Netzwerkfehler: %1. Bitte Netzwerk- und Proxy-Einstellungen überprüfen.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="345"/>
+ <location filename="../rbutilqt.cpp" line="383"/>
<source>New installation</source>
<translation>Neue Installation</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="354"/>
+ <location filename="../rbutilqt.cpp" line="392"/>
<source>Your configuration is invalid. This is most likely due to a changed device path. The configuration dialog will now open to allow you to correct the problem.</source>
<translation>Die Konfiguration ist ungültig. Dies kommt wahrscheinlich von einem geänderten Gerätepfad. Der Konfigurationsdialog wird geöffnet, damit das Problem korrigiert werden kann.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="223"/>
+ <location filename="../rbutilqt.cpp" line="262"/>
<source>Network error</source>
<translation>Netzwerkfehler</translation>
</message>
@@ -2326,22 +2395,22 @@ Netzwerkfehler: %1. Bitte Netzwerk- und Proxy-Einstellungen überprüfen.</trans
<translation>Lade Informationen über Builds, bitte warten ...</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="222"/>
+ <location filename="../rbutilqt.cpp" line="261"/>
<source>Can&apos;t get version information!</source>
<translation>Konnte Versionsinformationen nicht ermitteln!</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="236"/>
+ <location filename="../rbutilqt.cpp" line="275"/>
<source>Download build information finished.</source>
<translation>Informationen über Builds heruntergeladen.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="265"/>
+ <location filename="../rbutilqt.cpp" line="304"/>
<source>Libraries used</source>
<translation>Verwendete Bibliotheken</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="614"/>
+ <location filename="../rbutilqt.cpp" line="644"/>
<source>Checking for update ...</source>
<translation>Prüfe auf Update ...</translation>
</message>
@@ -2354,282 +2423,292 @@ Netzwerkfehler: %1. Bitte Netzwerk- und Proxy-Einstellungen überprüfen.</trans
<translation>Rockbox Utility</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="169"/>
- <location filename="../rbutilqtfrm.ui" line="626"/>
+ <location filename="../rbutilqtfrm.ui" line="163"/>
+ <location filename="../rbutilqtfrm.ui" line="620"/>
<source>&amp;Installation</source>
<translation>&amp;Installation</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="426"/>
+ <location filename="../rbutilqtfrm.ui" line="420"/>
<source>&amp;Uninstallation</source>
<translation>Ent&amp;fernen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="393"/>
+ <location filename="../rbutilqtfrm.ui" line="387"/>
<source>&amp;File</source>
<translation>&amp;Datei</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="465"/>
+ <location filename="../rbutilqtfrm.ui" line="459"/>
<source>&amp;About</source>
<translation>Ü&amp;ber</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="442"/>
+ <location filename="../rbutilqtfrm.ui" line="436"/>
<source>Empty local download cache</source>
<translation>Download-Cache löschen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="155"/>
+ <location filename="../rbutilqtfrm.ui" line="149"/>
<source>mountpoint unknown or invalid</source>
<translation>unbekannt oder ungültig</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="148"/>
+ <location filename="../rbutilqtfrm.ui" line="142"/>
<source>Mountpoint:</source>
<translation>Einhängepunkt:</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="106"/>
+ <location filename="../rbutilqtfrm.ui" line="100"/>
<source>device unknown or invalid</source>
<translation>unbekannt oder ungültig</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="99"/>
+ <location filename="../rbutilqtfrm.ui" line="93"/>
<source>Device:</source>
<translation>Gerät:</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="447"/>
+ <location filename="../rbutilqtfrm.ui" line="441"/>
<source>Install Rockbox Utility on player</source>
<translation>Rockbox Utility auf dem Gerät installieren</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="452"/>
+ <location filename="../rbutilqtfrm.ui" line="446"/>
<source>&amp;Configure</source>
<translation>&amp;Konfigurieren</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="457"/>
+ <location filename="../rbutilqtfrm.ui" line="451"/>
<source>E&amp;xit</source>
<translation>&amp;Beenden</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="460"/>
+ <location filename="../rbutilqtfrm.ui" line="454"/>
<source>Ctrl+Q</source>
<translation>Ctrl+Q</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="470"/>
+ <location filename="../rbutilqtfrm.ui" line="464"/>
<source>About &amp;Qt</source>
<translation>Über &amp;Qt</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="274"/>
+ <location filename="../rbutilqtfrm.ui" line="268"/>
<source>Uninstall Bootloader</source>
<translation>Bootloader entfernen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="268"/>
- <location filename="../rbutilqtfrm.ui" line="301"/>
+ <location filename="../rbutilqtfrm.ui" line="262"/>
+ <location filename="../rbutilqtfrm.ui" line="295"/>
<source>Uninstall Rockbox</source>
<translation>Rockbox entfernen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="65"/>
+ <location filename="../rbutilqtfrm.ui" line="59"/>
<source>Device</source>
<translation>Gerät</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="126"/>
+ <location filename="../rbutilqtfrm.ui" line="120"/>
<source>&amp;Change</source>
<translation>Ä&amp;ndern</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="172"/>
+ <location filename="../rbutilqtfrm.ui" line="166"/>
<source>Welcome</source>
<translation>Willkommen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="177"/>
- <location filename="../rbutilqtfrm.ui" line="419"/>
+ <location filename="../rbutilqtfrm.ui" line="171"/>
+ <location filename="../rbutilqtfrm.ui" line="413"/>
<source>&amp;Accessibility</source>
<translation>&amp;Zugänglichkeit</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="180"/>
+ <location filename="../rbutilqtfrm.ui" line="174"/>
<source>Install accessibility add-ons</source>
<translation>Installiere Zugänglichkeits-Erweiterungen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="186"/>
+ <location filename="../rbutilqtfrm.ui" line="180"/>
<source>Install Talk files</source>
<translation>Talk-Dateien installieren</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="375"/>
+ <location filename="../rbutilqtfrm.ui" line="369"/>
<source>Inf&amp;o</source>
<translation>Inf&amp;o</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="402"/>
- <location filename="../rbutilqtfrm.ui" line="475"/>
+ <location filename="../rbutilqtfrm.ui" line="396"/>
+ <location filename="../rbutilqtfrm.ui" line="469"/>
<source>&amp;Help</source>
<translation>&amp;Hilfe</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="415"/>
+ <location filename="../rbutilqtfrm.ui" line="409"/>
<source>Action&amp;s</source>
<translation>A&amp;ktionen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="480"/>
+ <location filename="../rbutilqtfrm.ui" line="474"/>
<source>Info</source>
<translation>Info</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="584"/>
+ <location filename="../rbutilqtfrm.ui" line="578"/>
<source>Read PDF manual</source>
<translation>Lese Anleitung im PDF-Format</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="589"/>
+ <location filename="../rbutilqtfrm.ui" line="583"/>
<source>Read HTML manual</source>
<translation>Lese Anleitung im HTML-Format</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="594"/>
+ <location filename="../rbutilqtfrm.ui" line="588"/>
<source>Download PDF manual</source>
<translation>Lade Anleitung im PDF-Format herunter</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="599"/>
+ <location filename="../rbutilqtfrm.ui" line="593"/>
<source>Download HTML manual (zip)</source>
<translation>Lade Anleitung im HTML-Format herunter</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="236"/>
+ <location filename="../rbutilqtfrm.ui" line="230"/>
<source>Create Voice files</source>
<translation>Erstelle Sprachdateien</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="611"/>
+ <location filename="../rbutilqtfrm.ui" line="605"/>
<source>Create Voice File</source>
<translation>Erstelle Sprachdatei</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="137"/>
+ <location filename="../rbutilqtfrm.ui" line="131"/>
<source>&amp;Eject</source>
<translation>Ausw&amp;erfen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="203"/>
+ <location filename="../rbutilqtfrm.ui" line="43"/>
+ <source>Welcome to Rockbox Utility, the installation and housekeeping tool for Rockbox.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../rbutilqtfrm.ui" line="46"/>
+ <source>Rockbox Logo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../rbutilqtfrm.ui" line="197"/>
<source>&lt;b&gt;Create Talk Files&lt;/b&gt;&lt;br/&gt;Talkfiles are needed to let Rockbox speak File and Foldernames</source>
<translation>&lt;b&gt;Erstelle Talk Dateien&lt;/b&gt;&lt;br/&gt;Talkdateien werden benötigt, damit Rockbox Dateien und Ordner vorlesen kann</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="253"/>
+ <location filename="../rbutilqtfrm.ui" line="247"/>
<source>&lt;b&gt;Create Voice file&lt;/b&gt;&lt;br/&gt;Voice files are needed to make Rockbox speak the user interface. Speaking is enabled by default, so
if you installed the voice file Rockbox will speak.</source>
<translation>&lt;b&gt;Erzeuge Sprachdatei&lt;/b&gt;&lt;br&gt; Sprachdateien werden benötigt, damit Rockbox seine Benutzeroberfläche vorlesen kann. Sprachausgabe ist Standardmäßig angeschaltet. Sobald Sie eine Sprachdatei installieren, wird Rockbox sprechen.</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="265"/>
+ <location filename="../rbutilqtfrm.ui" line="259"/>
<source>Backup &amp;&amp; &amp;Uninstallation</source>
<translation>Sicherung &amp;&amp; &amp;Deinstallation</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="291"/>
+ <location filename="../rbutilqtfrm.ui" line="285"/>
<source>&lt;b&gt;Remove the bootloader&lt;/b&gt;&lt;br/&gt;After removing the bootloader you won&apos;t be able to start Rockbox.</source>
<translation>&lt;b&gt;Entferne Bootloader&lt;/b&gt;&lt;br/&gt;Nach dem Entfernen des Bootloaders kann Rockbox nicht mehr gestartet werden.</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="318"/>
+ <location filename="../rbutilqtfrm.ui" line="312"/>
<source>&lt;b&gt;Uninstall Rockbox from your audio player.&lt;/b&gt;&lt;br/&gt;This will leave the bootloader in place (you need to remove it manually).</source>
<translation>&lt;b&gt;Entferne Rockbox vom Gerät&lt;/b&gt;&lt;br/&gt;Dies wird den Bootloader intakt lassen (er muss manuell entfernt werden).</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="331"/>
+ <location filename="../rbutilqtfrm.ui" line="325"/>
<source>Backup</source>
<translation>Sicherung</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="348"/>
+ <location filename="../rbutilqtfrm.ui" line="342"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Backup current installation.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Create a backup by archiving the contents of the Rockbox installation folder.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Sicherung erstellen.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Sicherungskopie der aktuellen Installation durch Archivieren des Inhaltes des Rockbox-Ordners erstellen.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="507"/>
+ <location filename="../rbutilqtfrm.ui" line="501"/>
<source>Install &amp;Bootloader</source>
<translation>Installiere &amp;Bootloader</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="516"/>
+ <location filename="../rbutilqtfrm.ui" line="510"/>
<source>Install &amp;Rockbox</source>
<translation>Installiere &amp;Rockbox</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="525"/>
+ <location filename="../rbutilqtfrm.ui" line="519"/>
<source>Install &amp;Fonts Package</source>
<translation>Installiere &amp;Schriften-Paket</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="534"/>
+ <location filename="../rbutilqtfrm.ui" line="528"/>
<source>Install &amp;Themes</source>
<translation>Installiere &amp;Themen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="543"/>
+ <location filename="../rbutilqtfrm.ui" line="537"/>
<source>Install &amp;Game Files</source>
<translation>Installiere &amp;Spiele-Dateien</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="552"/>
+ <location filename="../rbutilqtfrm.ui" line="546"/>
<source>&amp;Install Voice File</source>
<translation>&amp;Installiere Sprachdateien</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="561"/>
+ <location filename="../rbutilqtfrm.ui" line="555"/>
<source>Create &amp;Talk Files</source>
<translation>Erstelle &amp;Talk-Dateien</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="570"/>
+ <location filename="../rbutilqtfrm.ui" line="564"/>
<source>Remove &amp;bootloader</source>
<translation>&amp;Bootloader entfernen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="579"/>
+ <location filename="../rbutilqtfrm.ui" line="573"/>
<source>Uninstall &amp;Rockbox</source>
<translation>&amp;Rockbox entfernen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="608"/>
+ <location filename="../rbutilqtfrm.ui" line="602"/>
<source>Create &amp;Voice File</source>
<translation>&amp;Sprachdateien erzeugen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="616"/>
+ <location filename="../rbutilqtfrm.ui" line="610"/>
<source>&amp;System Info</source>
<translation>&amp;Systeminfo</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="631"/>
+ <location filename="../rbutilqtfrm.ui" line="625"/>
<source>Show &amp;Changelog</source>
<translation>Änderungshistorie an&amp;zeigen</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="489"/>
+ <location filename="../rbutilqtfrm.ui" line="483"/>
<source>&amp;Complete Installation</source>
<translation>&amp;Vollständige Installation</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="498"/>
+ <location filename="../rbutilqtfrm.ui" line="492"/>
<source>&amp;Minimal Installation</source>
<translation>&amp;Minimale Installation</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="621"/>
+ <location filename="../rbutilqtfrm.ui" line="615"/>
<source>System &amp;Trace</source>
<translation>System &amp;Trace</translation>
</message>
@@ -2737,164 +2816,164 @@ Netzwerkfehler: %1. Bitte Netzwerk- und Proxy-Einstellungen überprüfen.</trans
<translation>&amp;Installieren</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="77"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="78"/>
<source>This is the latest stable release available.</source>
<translation>Dies ist die letzte stabile Version.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="87"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="88"/>
<source>This will eventually become the next Rockbox version. Install it to help testing.</source>
<translation>Dies wird die Basis der nächsten Rockbox-Version. Um testen zu helfen, diese Version installieren.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="120"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="127"/>
<source>Stable Release (Version %1)</source>
<translation>Stabiles Release (Version %1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="124"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="131"/>
<source>Development Version (Revison %1)</source>
<translation>Entwicklungsversion (Revision %1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="122"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="129"/>
<source>Release Candidate (Revison %1)</source>
<translation>Release-Kandidat (Revision %1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="82"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="83"/>
<source>The development version is updated on every code change.</source>
<translation>Die Entwicklungsversion wird bei jeder Code-Änderung aktualisiert.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="92"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="93"/>
<source>Daily updated development version.</source>
<translation>Täglich aktuelisierte Entwicklungsversion.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="99"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="100"/>
<source>Not available for the selected version</source>
<translation>Für ausgewählte Version nicht verfügbar</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="123"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="130"/>
<source>Daily Build (%1)</source>
<translation>Tägliche Version (%1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="151"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="158"/>
<source>The selected player doesn&apos;t need a bootloader.</source>
<translation>Das ausgewählte Gerät benötigt keinen Bootloader.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="156"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="163"/>
<source>The bootloader is required for starting Rockbox. Installation of the bootloader is only necessary on first time installation.</source>
<translation>Der Bootloader ist notwendig, um Rockbox zu starten. Die Installation ist nur einmalig notwendig.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="231"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="236"/>
<source>Mountpoint is wrong</source>
<translation>Einhängepunkt ist falsch</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="290"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="294"/>
<source>No install method known.</source>
<translation>Keine Installationsmethode bekannt.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="323"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="319"/>
<source>Bootloader detected</source>
<translation>Bootloader erkannt</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="324"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="320"/>
<source>Bootloader already installed. Do you want to reinstall the bootloader?</source>
<translation>Bootloader ist bereits installiert. Soll der Bootloader neu installiert werden?</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="328"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="324"/>
<source>Bootloader installation skipped</source>
<translation>Bootloader-Installation übersprungen</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="342"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="338"/>
<source>Create Bootloader backup</source>
<translation>Erzeuge Sicherungskopie vom Bootloader</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="343"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="339"/>
<source>You can create a backup of the original bootloader file. Press &quot;Yes&quot; to select an output folder on your computer to save the file to. The file will get placed in a new folder &quot;%1&quot; created below the selected folder.
Press &quot;No&quot; to skip this step.</source>
<translation>Es kann eine Sicherungskopie der originalen Bootloader-Datei erstellt werden. &quot;Ja&quot;, um einen Zielordner auf dem Computer auszuwählen. Die Datei wird in einem neuen Unterordner &quot;%1&quot; im gewählten Ordner abgelegt.
&quot;Nein&quot;, um diesen Schritt zu überspringen.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="350"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="346"/>
<source>Browse backup folder</source>
<translation>Ordner für Sicherungskopie suchen</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="362"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="358"/>
<source>Prerequisites</source>
<translation>Voraussetzungen</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="367"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="363"/>
<source>Bootloader installation aborted</source>
<translation>Bootloader-Installation abgebrochen</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="377"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="373"/>
<source>Bootloader files (%1)</source>
<translation>Bootloader-Dateien (%1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="379"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="375"/>
<source>All files (*)</source>
<translation>Alle Dateien (*)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="381"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="377"/>
<source>Select firmware file</source>
<translation>Firmware-Datei auswählen</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="383"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="379"/>
<source>Error opening firmware file</source>
<translation>Fehler beim Öffnen der Firmware-Datei</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="389"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="385"/>
<source>Error reading firmware file</source>
<translation>Fehler beim Lesen der Firmware-Datei</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="399"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="395"/>
<source>Backup error</source>
<translation>Sicherungskopie-Fehler</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="400"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="396"/>
<source>Could not create backup file. Continue?</source>
<translation>Konnte Sicherungskopie-Datei nicht erzeugen. Fortfahren?</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="424"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="420"/>
<source>Manual steps required</source>
<translation>Manuelle Schritte erforderlich</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="671"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="641"/>
<source>Your installation doesn&apos;t require any plugin data files, skipping.</source>
<translation>Installation benötigt keine zusätzlichen Dateien, überspringe.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="219"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="224"/>
<source>Continue with installation?</source>
<translation>Mit Installation fortfahren?</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="220"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="225"/>
<source>Really continue?</source>
<translation>Wirklich fortfahren?</translation>
</message>
@@ -2944,62 +3023,62 @@ Press &quot;No&quot; to skip this step.</source>
<context>
<name>Sysinfo</name>
<message>
- <location filename="../sysinfo.cpp" line="45"/>
+ <location filename="../sysinfo.cpp" line="46"/>
<source>&lt;b&gt;OS&lt;/b&gt;&lt;br/&gt;</source>
<translation>&lt;b&gt;Betriebssystem&lt;/b&gt;&lt;br/&gt;</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="46"/>
+ <location filename="../sysinfo.cpp" line="47"/>
<source>&lt;b&gt;Username&lt;/b&gt;&lt;br/&gt;%1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Benutzername&lt;/b&gt;&lt;br/&gt;%1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="48"/>
+ <location filename="../sysinfo.cpp" line="49"/>
<source>&lt;b&gt;Permissions&lt;/b&gt;&lt;br/&gt;%1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Berechtigungen&lt;/b&gt;&lt;br/&gt;%1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="50"/>
+ <location filename="../sysinfo.cpp" line="51"/>
<source>&lt;b&gt;Attached USB devices&lt;/b&gt;&lt;br/&gt;</source>
<translation>&lt;b&gt;Angeschlossene USB-Geräte&lt;/b&gt;&lt;br/&gt;</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="54"/>
+ <location filename="../sysinfo.cpp" line="55"/>
<source>VID: %1 PID: %2, %3</source>
<translation>VID: %1 PID: %2, %3</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="63"/>
+ <location filename="../sysinfo.cpp" line="64"/>
<source>Filesystem</source>
<translation>Dateisystem</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="66"/>
+ <location filename="../sysinfo.cpp" line="67"/>
<source>Mountpoint</source>
<translation>Einhängepunkt</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="66"/>
+ <location filename="../sysinfo.cpp" line="67"/>
<source>Label</source>
<translation>Bezeichnung</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="67"/>
+ <location filename="../sysinfo.cpp" line="68"/>
<source>Free</source>
<translation>Frei</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="67"/>
+ <location filename="../sysinfo.cpp" line="68"/>
<source>Total</source>
<translation>Gesamt</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="68"/>
+ <location filename="../sysinfo.cpp" line="69"/>
<source>Type</source>
<translation>Typ</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="70"/>
+ <location filename="../sysinfo.cpp" line="71"/>
<source>&lt;tr&gt;&lt;td&gt;%1&lt;/td&gt;&lt;td&gt;%4&lt;/td&gt;&lt;td&gt;%2 GiB&lt;/td&gt;&lt;td&gt;%3 GiB&lt;/td&gt;&lt;td&gt;%5&lt;/td&gt;&lt;/tr&gt;</source>
<translation>&lt;tr&gt;&lt;td&gt;%1&lt;/td&gt;&lt;td&gt;%4&lt;/td&gt;&lt;td&gt;%2 GiB&lt;/td&gt;&lt;td&gt;%3 GiB&lt;/td&gt;&lt;td&gt;%5&lt;/td&gt;&lt;/tr&gt;</translation>
</message>
@@ -3152,12 +3231,12 @@ Press &quot;No&quot; to skip this step.</source>
<context>
<name>TTSFestival</name>
<message>
- <location filename="../base/ttsfestival.cpp" line="210"/>
+ <location filename="../base/ttsfestival.cpp" line="207"/>
<source>engine could not voice string</source>
<translation>Konnte String nicht sprechen</translation>
</message>
<message>
- <location filename="../base/ttsfestival.cpp" line="293"/>
+ <location filename="../base/ttsfestival.cpp" line="290"/>
<source>No description available</source>
<translation>keine Beschreibung verfügbar</translation>
</message>
@@ -3176,6 +3255,11 @@ Press &quot;No&quot; to skip this step.</source>
<source>Voice description:</source>
<translation>Stimmenbeschreibung:</translation>
</message>
+ <message>
+ <location filename="../base/ttsfestival.cpp" line="173"/>
+ <source>Festival could not be started</source>
+ <translation>Festival konnte nicht gestartet werden</translation>
+ </message>
</context>
<context>
<name>TTSSapi</name>
@@ -3228,7 +3312,7 @@ Press &quot;No&quot; to skip this step.</source>
<translation>Lese Dateiliste...</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="257"/>
+ <location filename="../base/talkfile.cpp" line="261"/>
<source>Copying of %1 to %2 failed</source>
<translation>Kopieren von %1 nach %2 fehlgeschlagen</translation>
</message>
@@ -3243,17 +3327,17 @@ Press &quot;No&quot; to skip this step.</source>
<translation>Starte Erzeugung von Sprachdateien für Ordner %1</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="238"/>
+ <location filename="../base/talkfile.cpp" line="242"/>
<source>File copy aborted</source>
<translation>Kopieren abgebrochen</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="278"/>
+ <location filename="../base/talkfile.cpp" line="283"/>
<source>Cleaning up...</source>
<translation>Räume auf ...</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="289"/>
+ <location filename="../base/talkfile.cpp" line="294"/>
<source>Finished</source>
<translation>Fertig</translation>
</message>
@@ -3261,54 +3345,54 @@ Press &quot;No&quot; to skip this step.</source>
<context>
<name>TalkGenerator</name>
<message>
- <location filename="../base/talkgenerator.cpp" line="39"/>
+ <location filename="../base/talkgenerator.cpp" line="38"/>
<source>Starting TTS Engine</source>
<translation>Starte TTS-System</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="44"/>
- <location filename="../base/talkgenerator.cpp" line="51"/>
+ <location filename="../base/talkgenerator.cpp" line="43"/>
+ <location filename="../base/talkgenerator.cpp" line="50"/>
<source>Init of TTS engine failed</source>
<translation>Initalisierung des TTS-Systems fehlgeschlagen</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="58"/>
+ <location filename="../base/talkgenerator.cpp" line="57"/>
<source>Starting Encoder Engine</source>
<translation>Starte Encoder</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="63"/>
+ <location filename="../base/talkgenerator.cpp" line="62"/>
<source>Init of Encoder engine failed</source>
<translation>Starten des Encoders fehlgeschlagen</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="73"/>
+ <location filename="../base/talkgenerator.cpp" line="72"/>
<source>Voicing entries...</source>
<translation>Spreche Einträge ...</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="88"/>
+ <location filename="../base/talkgenerator.cpp" line="87"/>
<source>Encoding files...</source>
<translation>Kodiere Dateien ...</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="127"/>
+ <location filename="../base/talkgenerator.cpp" line="126"/>
<source>Voicing aborted</source>
<translation>Sprechen abgebrochen</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="164"/>
- <location filename="../base/talkgenerator.cpp" line="169"/>
+ <location filename="../base/talkgenerator.cpp" line="163"/>
+ <location filename="../base/talkgenerator.cpp" line="168"/>
<source>Voicing of %1 failed: %2</source>
<translation>Sprechen von %1 fehlgeschlagen: %2</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="213"/>
+ <location filename="../base/talkgenerator.cpp" line="212"/>
<source>Encoding aborted</source>
<translation>Kodieren abgebrochen</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="241"/>
+ <location filename="../base/talkgenerator.cpp" line="240"/>
<source>Encoding of %1 failed</source>
<translation>Kodieren of %1 ist fehlgeschlagen</translation>
</message>
@@ -3359,82 +3443,82 @@ Press &quot;No&quot; to skip this step.</source>
<translation>Kein Theme ausgewählt</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="128"/>
+ <location filename="../themesinstallwindow.cpp" line="122"/>
<source>Network error: %1.
Please check your network and proxy settings.</source>
<translation>Netzwerkfehler: %1
Bitte Netzwerk- und Proxyeinstellungen überprüfen.</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="141"/>
+ <location filename="../themesinstallwindow.cpp" line="135"/>
<source>the following error occured:
%1</source>
<translation>Der folgende Fehler ist aufgetreten:
%1</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="147"/>
+ <location filename="../themesinstallwindow.cpp" line="141"/>
<source>done.</source>
<translation>Abgeschlossen.</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="216"/>
+ <location filename="../themesinstallwindow.cpp" line="214"/>
<source>fetching details for %1</source>
<translation>lade Details für %1</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="219"/>
+ <location filename="../themesinstallwindow.cpp" line="217"/>
<source>fetching preview ...</source>
<translation>lade Vorschau ...</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="232"/>
+ <location filename="../themesinstallwindow.cpp" line="230"/>
<source>&lt;b&gt;Author:&lt;/b&gt; %1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Autor:&lt;/b&gt; %1&lt;hr/&gt;</translation>
</message>
<message>
+ <location filename="../themesinstallwindow.cpp" line="231"/>
<location filename="../themesinstallwindow.cpp" line="233"/>
- <location filename="../themesinstallwindow.cpp" line="235"/>
<source>unknown</source>
<translation>unbekannt</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="234"/>
+ <location filename="../themesinstallwindow.cpp" line="232"/>
<source>&lt;b&gt;Version:&lt;/b&gt; %1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Version:&lt;/b&gt; %1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="237"/>
+ <location filename="../themesinstallwindow.cpp" line="235"/>
<source>no description</source>
<translation>Keine Beschreibung vorhanden</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="265"/>
+ <location filename="../themesinstallwindow.cpp" line="262"/>
<source>no theme preview</source>
<translation>Keine Themevorschau vorhanden</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="294"/>
+ <location filename="../themesinstallwindow.cpp" line="290"/>
<source>Select</source>
<translation>Auswählen</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="301"/>
+ <location filename="../themesinstallwindow.cpp" line="297"/>
<source>getting themes information ...</source>
<translation>lade Theme-Informationen ...</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="331"/>
+ <location filename="../themesinstallwindow.cpp" line="325"/>
<source>No themes selected, skipping</source>
<translation>Keine Themen ausgewählt, überspringe</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="360"/>
+ <location filename="../themesinstallwindow.cpp" line="354"/>
<source>Mount point is wrong!</source>
<translation>Einhängepunkt ungültig!</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="236"/>
+ <location filename="../themesinstallwindow.cpp" line="234"/>
<source>&lt;b&gt;Description:&lt;/b&gt; %1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Beschreibung:&lt;/b&gt; %1&lt;hr/&gt;</translation>
</message>
@@ -3444,12 +3528,12 @@ Bitte Netzwerk- und Proxyeinstellungen überprüfen.</translation>
<translation>keine Auswahl</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="184"/>
+ <location filename="../themesinstallwindow.cpp" line="178"/>
<source>Information</source>
<translation>Information</translation>
</message>
<message numerus="yes">
- <location filename="../themesinstallwindow.cpp" line="202"/>
+ <location filename="../themesinstallwindow.cpp" line="198"/>
<source>Download size %L1 kiB (%n item(s))</source>
<translation>
<numerusform>Download-Größe %L1 kiB (%n Element)</numerusform>
@@ -3457,7 +3541,7 @@ Bitte Netzwerk- und Proxyeinstellungen überprüfen.</translation>
</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="253"/>
+ <location filename="../themesinstallwindow.cpp" line="251"/>
<source>Retrieving theme preview failed.
HTTP response code: %1</source>
<translation>Laden der Vorschau fehlgeschlagen.
@@ -3531,12 +3615,12 @@ HTTP Antwortcode: %1</translation>
<translation>Entferne %1 ...</translation>
</message>
<message>
- <location filename="../base/uninstall.cpp" line="80"/>
+ <location filename="../base/uninstall.cpp" line="81"/>
<source>Could not delete %1</source>
<translation>Konnte %1 nicht löschen</translation>
</message>
<message>
- <location filename="../base/uninstall.cpp" line="109"/>
+ <location filename="../base/uninstall.cpp" line="115"/>
<source>Uninstallation finished</source>
<translation>Entfernen erfolgreich</translation>
</message>
@@ -3544,19 +3628,19 @@ HTTP Antwortcode: %1</translation>
<context>
<name>Utils</name>
<message>
- <location filename="../base/utils.cpp" line="374"/>
+ <location filename="../base/utils.cpp" line="375"/>
<source>&lt;li&gt;Permissions insufficient for bootloader installation.
Administrator priviledges are necessary.&lt;/li&gt;</source>
<translation>&lt;li&gt;Bereichtigung für Bootloader-Installation nicht ausreichend.
Administratorrechte sind notwendig.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/utils.cpp" line="386"/>
+ <location filename="../base/utils.cpp" line="387"/>
<source>&lt;li&gt;Target mismatch detected.&lt;br/&gt;Installed target: %1&lt;br/&gt;Selected target: %2.&lt;/li&gt;</source>
<translation>&lt;li&gt;Abweichendes Gerät entdeckt.&lt;br/&gt;Installiertes Gerät: %1&lt;br/&gt;Ausgewähltes Gerät: %2&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/utils.cpp" line="395"/>
+ <location filename="../base/utils.cpp" line="396"/>
<source>Problem detected:</source>
<translation>Problem gefunden:</translation>
</message>
@@ -3672,44 +3756,48 @@ Administratorrechte sind notwendig.&lt;/li&gt;</translation>
<translation>Herunterladen von Datei %1.%2</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="122"/>
+ <location filename="../base/zipinstaller.cpp" line="120"/>
<source>Download error: %1</source>
<translation>Downloadfehler: %1</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="126"/>
+ <location filename="../base/zipinstaller.cpp" line="125"/>
+ <source>Download finished (cache used).</source>
+ <translation type="unfinished">Download abgeschlossen (Cache verwendet).</translation>
+ </message>
+ <message>
+ <location filename="../base/zipinstaller.cpp" line="128"/>
<source>Download finished.</source>
<translation>Download abgeschlossen.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="132"/>
+ <location filename="../base/zipinstaller.cpp" line="135"/>
<source>Extracting file.</source>
<translation>Extrahiere Datei.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="153"/>
+ <location filename="../base/zipinstaller.cpp" line="156"/>
<source>Extraction failed!</source>
<translation>Extrahieren fehlgeschlagen!</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="165"/>
+ <location filename="../base/zipinstaller.cpp" line="168"/>
<source>Installing file.</source>
<translation>Installiere Datei.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="177"/>
+ <location filename="../base/zipinstaller.cpp" line="180"/>
<source>Installing file failed.</source>
<translation>Dateiinstallation fehlgeschlagen.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="190"/>
+ <location filename="../base/zipinstaller.cpp" line="193"/>
<source>Creating installation log</source>
<translation>Erstelle Installationslog</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="120"/>
<source>Cached file used.</source>
- <translation>Datei aus Cache verwendet.</translation>
+ <translation type="vanished">Datei aus Cache verwendet.</translation>
</message>
<message>
<location filename="../base/zipinstaller.cpp" line="67"/>
@@ -3724,7 +3812,7 @@ Administratorrechte sind notwendig.&lt;/li&gt;</translation>
%2</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="146"/>
+ <location filename="../base/zipinstaller.cpp" line="149"/>
<source>Not enough disk space! Aborting.</source>
<translation>Nicht genügend Speicherplatz verfügbar! Abbruch.</translation>
</message>
diff --git a/utils/rbutilqt/lang/rbutil_fr.ts b/utils/rbutilqt/lang/rbutil_fr.ts
index f2104e1666..c8234737e6 100644
--- a/utils/rbutilqt/lang/rbutil_fr.ts
+++ b/utils/rbutilqt/lang/rbutil_fr.ts
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0" language="fr">
+<TS version="2.1" language="fr">
<context>
<name>BackupDialog</name>
<message>
@@ -40,42 +40,42 @@
<translation>&amp;Annuler</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="70"/>
+ <location filename="../gui/backupdialog.cpp" line="69"/>
<source>Installation size: calculating ...</source>
<translation>Taille de l&apos;installation: calcul en cours...</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="89"/>
+ <location filename="../gui/backupdialog.cpp" line="88"/>
<source>Select Backup Filename</source>
<translation>Sélectionnez un fichier de sauvegarde</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="109"/>
+ <location filename="../gui/backupdialog.cpp" line="108"/>
<source>Installation size: %L1 %2</source>
<translation>Taille de l&apos;installation: %L1 %2</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="116"/>
+ <location filename="../gui/backupdialog.cpp" line="115"/>
<source>File exists</source>
<translation>Fichier existant</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="117"/>
+ <location filename="../gui/backupdialog.cpp" line="116"/>
<source>The selected backup file already exists. Overwrite?</source>
<translation>Le fichier sélectionné existe déjà. Voulez-vous vraiment l&apos;écraser ?</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="125"/>
+ <location filename="../gui/backupdialog.cpp" line="124"/>
<source>Starting backup ...</source>
<translation>Démarrage de la sauvegarde ...</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="144"/>
+ <location filename="../gui/backupdialog.cpp" line="143"/>
<source>Backup successful.</source>
<translation>Sauvegarde effectuée avec succès.</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="147"/>
+ <location filename="../gui/backupdialog.cpp" line="146"/>
<source>Backup failed!</source>
<translation>La sauvegarde a échoué !</translation>
</message>
@@ -134,94 +134,142 @@
</message>
</context>
<context>
+ <name>BootloaderInstallBSPatch</name>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="65"/>
+ <source>Bootloader installation requires you to provide the correct verrsion of the original firmware file. This file will be patched with the Rockbox bootloader and installed to your player. You need to download this file yourself due to legal reasons. Please refer to the &lt;a href=&apos;http://www.rockbox.org/wiki/&apos;&gt;rockbox wiki&lt;/a&gt; pages on how to obtain this file.&lt;br/&gt;Press Ok to continue and browse your computer for the firmware file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="84"/>
+ <source>Could not read original firmware file</source>
+ <translation type="unfinished">Impossible de lire le fichier du firmware original</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="90"/>
+ <source>Downloading bootloader file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="99"/>
+ <source>Patching file...</source>
+ <translation type="unfinished">Modification du firmware...</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="124"/>
+ <source>Patching the original firmware failed</source>
+ <translation type="unfinished">Erreur lors de la modification du firmware</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="130"/>
+ <source>Succesfully patched firmware file</source>
+ <translation type="unfinished">Le firmware a été modifié avec succès</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="145"/>
+ <source>Bootloader successful installed</source>
+ <translation type="unfinished">Le bootloader a été installé avec succès</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="151"/>
+ <source>Patched bootloader could not be installed</source>
+ <translation type="unfinished">L&apos;installation du bootloader modifié a échouée</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="161"/>
+ <source>To uninstall, perform a normal upgrade with an unmodified original firmware.</source>
+ <translation type="unfinished">Pour le désinstaller, faites une mise à jour normale avec un firmware non modifié.</translation>
+ </message>
+</context>
+<context>
<name>BootloaderInstallBase</name>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="78"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="69"/>
<source>Download error: received HTTP error %1.</source>
<translation>Erreur lors du téléchargement: erreur HTTP %1.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="84"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="75"/>
<source>Download error: %1</source>
<translation>Erreur lors du téléchargement : %1</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="90"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="81"/>
<source>Download finished (cache used).</source>
<translation>Téléchargement terminé (la version du cache a été utilisée).</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="92"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="83"/>
<source>Download finished.</source>
<translation>Téléchargement terminé.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="113"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="112"/>
<source>Creating backup of original firmware file.</source>
<translation>Création d&apos;une sauvegarde du firmware original.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="115"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="114"/>
<source>Creating backup folder failed</source>
<translation>La création du dossier de sauvegarde a échoué</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="121"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="120"/>
<source>Creating backup copy failed.</source>
<translation>La création de la sauvegarde a échoué.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="124"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="123"/>
<source>Backup created.</source>
<translation>Sauvegarde effectuée.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="137"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="140"/>
<source>Creating installation log</source>
<translation>Création du journal d&apos;installation</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="226"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="245"/>
<source>Zip file format detected</source>
<translation>Fichier au format zip détecté</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="238"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="257"/>
<source>CAB file format detected</source>
<translation>Format de fichier CAB détecté</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="259"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="278"/>
<source>Extracting firmware %1 from archive</source>
<translation>Extraction du firmware %1 depuis l&apos;archive</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="266"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="285"/>
<source>Error extracting firmware from archive</source>
<translation>Erreur lors de l&apos;extraction du firmware depuis l&apos;archive</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="275"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="294"/>
<source>Could not find firmware in archive</source>
<translation>Impossible de trouver le firmware original dans l&apos;archive</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="159"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="162"/>
<source>Waiting for system to remount player</source>
<translation>Attend que le système ait remonté le lecteur</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="189"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="192"/>
<source>Player remounted</source>
<translation>Le lecteur audio a été remonté</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="194"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="197"/>
<source>Timeout on remount</source>
<translation>Le délai d&apos;attente lors du remontage a expiré</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="149"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="152"/>
<source>Installation log created</source>
<translation>Le journal d&apos;installation a été crée</translation>
</message>
@@ -485,47 +533,47 @@
<translation>Désinstallation impossible, seules les infos d&apos;installation sont supprimées</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhex.cpp" line="258"/>
+ <location filename="../base/bootloaderinstallhex.cpp" line="259"/>
<source>Can&apos;t open input file</source>
<translation>Impossible d&apos;ouvrir le fichier d&apos;entrée</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhex.cpp" line="259"/>
+ <location filename="../base/bootloaderinstallhex.cpp" line="260"/>
<source>Can&apos;t open output file</source>
<translation>Impossible d&apos;ouvrir le fichier de sortie</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhex.cpp" line="260"/>
+ <location filename="../base/bootloaderinstallhex.cpp" line="261"/>
<source>invalid file: header length wrong</source>
<translation>fichier invalide: longueur de l&apos;en-tête incorrecte</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhex.cpp" line="261"/>
+ <location filename="../base/bootloaderinstallhex.cpp" line="262"/>
<source>invalid file: unrecognized header</source>
<translation>fichier invalide: en-tête non reconnue</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhex.cpp" line="262"/>
+ <location filename="../base/bootloaderinstallhex.cpp" line="263"/>
<source>invalid file: &quot;length&quot; field wrong</source>
<translation>fichier invalide: champ &quot;longueur&quot; erroné</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhex.cpp" line="263"/>
+ <location filename="../base/bootloaderinstallhex.cpp" line="264"/>
<source>invalid file: &quot;length2&quot; field wrong</source>
<translation>fichier invalide: champ &quot;longueur2&quot; erroné</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhex.cpp" line="264"/>
+ <location filename="../base/bootloaderinstallhex.cpp" line="265"/>
<source>invalid file: internal checksum error</source>
<translation>fichier invalide: erreur interne de somme de contrôle</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhex.cpp" line="265"/>
+ <location filename="../base/bootloaderinstallhex.cpp" line="266"/>
<source>invalid file: &quot;length3&quot; field wrong</source>
<translation>fichier invalide: champ &quot;longueur3&quot; erroné</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhex.cpp" line="266"/>
+ <location filename="../base/bootloaderinstallhex.cpp" line="267"/>
<source>unknown</source>
<translation>inconnue</translation>
</message>
@@ -558,27 +606,27 @@
<translation>Modification du firmware...</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="137"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="136"/>
<source>Patching the original firmware failed</source>
<translation>Erreur lors de la modification du firmware</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="143"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="142"/>
<source>Succesfully patched firmware file</source>
<translation>Le firmware a été modifié avec succès</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="158"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="157"/>
<source>Bootloader successful installed</source>
<translation>Le bootloader a été installé avec succès</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="164"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="163"/>
<source>Patched bootloader could not be installed</source>
<translation>L&apos;installation du bootloader modifié a échouée</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallimx.cpp" line="175"/>
+ <location filename="../base/bootloaderinstallimx.cpp" line="174"/>
<source>To uninstall, perform a normal upgrade with an unmodified original firmware.</source>
<translation>Pour le désinstaller, faites une mise à jour normale avec un firmware non modifié.</translation>
</message>
@@ -586,29 +634,28 @@
<context>
<name>BootloaderInstallIpod</name>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="49"/>
<source>Error: can&apos;t allocate buffer memory!</source>
- <translation>Erreur: impossible d&apos;allouer de la mémoire !</translation>
+ <translation type="vanished">Erreur: impossible d&apos;allouer de la mémoire !</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="80"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="72"/>
<source>Downloading bootloader file</source>
<translation>Téléchargement du fichier bootloader</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="64"/>
- <location filename="../base/bootloaderinstallipod.cpp" line="151"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="56"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="143"/>
<source>Failed to read firmware directory</source>
<translation>La lecture du dossier du firmware a échoué</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="69"/>
- <location filename="../base/bootloaderinstallipod.cpp" line="156"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="61"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="148"/>
<source>Unknown version number in firmware (%1)</source>
<translation>Numéro de version inconnu dans le firmware (%1)</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="75"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="67"/>
<source>Warning: This is a MacPod, Rockbox only runs on WinPods.
See http://www.rockbox.org/wiki/IpodConversionToFAT32</source>
<translatorcomment>C&apos;est techniquement incorrect mais je ne sais pas trop comment le dire sinon.</translatorcomment>
@@ -616,83 +663,83 @@ See http://www.rockbox.org/wiki/IpodConversionToFAT32</source>
Veuillez vous référer à http://www.rockbox.org/wiki/IpodConversionToFAT32</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="94"/>
- <location filename="../base/bootloaderinstallipod.cpp" line="163"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="86"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="155"/>
<source>Could not open Ipod in R/W mode</source>
<translation>Impossible d&apos;accéder à l&apos;Ipod en lecture et écriture</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="104"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="96"/>
<source>Successfull added bootloader</source>
<translation>Le bootloader a été ajouté avec succès</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="115"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="107"/>
<source>Failed to add bootloader</source>
<translation>L&apos;ajout du bootloader a échoué</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="127"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="119"/>
<source>Bootloader Installation complete.</source>
<translation>L&apos;installation du bootloader est terminée.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="132"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="124"/>
<source>Writing log aborted</source>
<translation>L&apos;écriture de l&apos;historique a été interrompue</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="169"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="161"/>
<source>No bootloader detected.</source>
<translation>Aucun bootloader détecté.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="175"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="167"/>
<source>Successfully removed bootloader</source>
<translation>Le bootloader a été supprimé avec succès</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="182"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="175"/>
<source>Removing bootloader failed.</source>
<translation>La suppression du bootloader a échoué.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="228"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="241"/>
<source>Error: could not retrieve device name</source>
<translation>Erreur: impossible de récupérer le nom du périphérique</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="244"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="257"/>
<source>Error: no mountpoint specified!</source>
<translation>Erreur: aucun point de montage n&apos;a été spécifié !</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="249"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="262"/>
<source>Could not open Ipod: permission denied</source>
<translation>Impossible d&apos;accéder à l&apos;Ipod: accès refusé</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="253"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="266"/>
<source>Could not open Ipod</source>
<translation>Impossible d&apos;accéder à l&apos;Ipod</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="264"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="277"/>
<source>No firmware partition on disk</source>
<translation>La partition du firmware n&apos;est pas présente sur le disque</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="90"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="82"/>
<source>Installing Rockbox bootloader</source>
<translation>Installation du bootloader de Rockbox</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="142"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="134"/>
<source>Uninstalling bootloader</source>
<translation>Suppression du bootloader</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallipod.cpp" line="258"/>
+ <location filename="../base/bootloaderinstallipod.cpp" line="271"/>
<source>Error reading partition table - possibly not an Ipod</source>
<translation>Erreur lors de la lecteur de la table des partitions; ce lecteur audio n&apos;est peut-être pas un Ipod</translation>
</message>
@@ -736,17 +783,17 @@ Veuillez vous référer à http://www.rockbox.org/wiki/IpodConversionToFAT32</tr
<translation>Le bootloader de Rockbox n&apos;a pas été trouvé</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallmi4.cpp" line="98"/>
+ <location filename="../base/bootloaderinstallmi4.cpp" line="99"/>
<source>Checking for original firmware file</source>
<translation>Vérification du firmware original</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallmi4.cpp" line="103"/>
+ <location filename="../base/bootloaderinstallmi4.cpp" line="104"/>
<source>Error finding original firmware file</source>
<translation>Erreur lors de la recherche du firmware original</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallmi4.cpp" line="113"/>
+ <location filename="../base/bootloaderinstallmi4.cpp" line="115"/>
<source>Rockbox bootloader successful removed</source>
<translation>Le bootloader de Rockbox a été supprimé avec succès</translation>
</message>
@@ -830,37 +877,184 @@ Veuillez vous référer à http://www.rockbox.org/wiki/IpodConversionToFAT32</tr
</message>
</context>
<context>
+ <name>BootloaderInstallS5l</name>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="61"/>
+ <source>Could not find mounted iPod.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="68"/>
+ <source>Downloading bootloader file...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="113"/>
+ <source>Could not make DFU image.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="119"/>
+ <source>Ejecting iPod...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="141"/>
+ <source>Action required:
+
+Please make sure no programs are accessing files on the device. If ejecting still fails please use your computers eject functionality.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="151"/>
+ <source>Device successfully ejected.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="171"/>
+ <source>Action required:
+
+Quit iTunes application.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="179"/>
+ <source>iTunes closed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="192"/>
+ <source>Could not suspend iTunesHelper. Stop it using the Task Manager, and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="201"/>
+ <source>Waiting for HDD spin-down...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="217"/>
+ <source>Waiting for DFU mode...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="218"/>
+ <source>Action required:
+
+Press and hold SELECT+MENU buttons, after about 12 seconds a new action will require you to release the buttons, DO IT QUICKLY, otherwise the process could fail.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="241"/>
+ <source>DFU mode detected.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="243"/>
+ <source>Action required:
+
+Release SELECT+MENU buttons and wait...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="268"/>
+ <source>Device is not in DFU mode. It seems that the previous required action failed, please try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="275"/>
+ <source>Transfering DFU image...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="285"/>
+ <source>No valid DFU USB driver found.
+
+Install iTunes (or the Apple Device Driver) and try again.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="294"/>
+ <source>Could not transfer DFU image.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="299"/>
+ <source>DFU transfer completed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="302"/>
+ <source>Restarting iPod, waiting for remount...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="321"/>
+ <source>Action required:
+
+Could not remount the device, try to do it manually. If the iPod didn&apos;t restart, force a reset by pressing SELECT+MENU buttons for about 5 seconds. If the problem could not be solved then click &apos;Abort&apos; to cancel.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="333"/>
+ <source>Device remounted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="336"/>
+ <source>Bootloader successfully installed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="338"/>
+ <source>Bootloader successfully uninstalled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="350"/>
+ <source>Could not resume iTunesHelper.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="368"/>
+ <source>Install aborted by user.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstalls5l.cpp" line="370"/>
+ <source>Uninstall aborted by user.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>BootloaderInstallSansa</name>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="50"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="54"/>
<source>Error: can&apos;t allocate buffer memory!</source>
<translation>Erreur: impossible d&apos;allouer de la mémoire !</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="55"/>
<source>Searching for Sansa</source>
- <translation>Recherche de lecteurs Sansa</translation>
+ <translation type="vanished">Recherche de lecteurs Sansa</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="59"/>
<source>Permission for disc access denied!
This is required to install the bootloader</source>
- <translation>L&apos;accès au disque a été refusé !
+ <translation type="vanished">L&apos;accès au disque a été refusé !
Ceci est nécessaire à l&apos;installation du bootloader</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="66"/>
<source>No Sansa detected!</source>
- <translation>Aucun lecteur Sansa n&apos;a été détecté !</translation>
+ <translation type="vanished">Aucun lecteur Sansa n&apos;a été détecté !</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="79"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="68"/>
<source>Downloading bootloader file</source>
<translation>Téléchargement du bootloader</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="71"/>
- <location filename="../base/bootloaderinstallsansa.cpp" line="179"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="60"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="164"/>
<source>OLD ROCKBOX INSTALLATION DETECTED, ABORTING.
You must reinstall the original Sansa firmware before running
sansapatcher for the first time.
@@ -873,83 +1067,83 @@ Veuillez vous référer à http://www.rockbox.org/wiki/SansaE200Install
</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="102"/>
- <location filename="../base/bootloaderinstallsansa.cpp" line="189"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="87"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="174"/>
<source>Could not open Sansa in R/W mode</source>
<translation>Impossible d&apos;accéder au lecteur Sansa en lecture et écriture</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="129"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="114"/>
<source>Successfully installed bootloader</source>
<translation>Le bootloader a été installé avec succès</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="140"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="125"/>
<source>Failed to install bootloader</source>
<translation>L&apos;installation du bootloader a échoué</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="153"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="138"/>
<source>Bootloader Installation complete.</source>
<translation>L&apos;installation du bootloader est terminée.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="158"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="143"/>
<source>Writing log aborted</source>
<translation>L&apos;écriture de l&apos;historique a été interrompue</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="238"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="244"/>
<source>Error: could not retrieve device name</source>
<translation>Erreur: impossible de récupérer le nom du périphérique</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="254"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="260"/>
<source>Can&apos;t find Sansa</source>
<translation>Impossible de trouver un lecteur Sansa</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="259"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="265"/>
<source>Could not open Sansa</source>
<translation>Impossible d&apos;accéder au lecteur Sansa</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="264"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="270"/>
<source>Could not read partition table</source>
<translation>Impossible de lire la table des partitions</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="271"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="277"/>
<source>Disk is not a Sansa (Error %1), aborting.</source>
<translation>Le disque n&apos;est pas à un lecteur Sansa (Erreur %1); abandon.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="195"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="180"/>
<source>Successfully removed bootloader</source>
<translation>Le bootloader a été supprimé avec succès</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="202"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="188"/>
<source>Removing bootloader failed.</source>
<translation>La suppression du bootloader a échoué.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="94"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="83"/>
<source>Installing Rockbox bootloader</source>
<translation>Installation du bootloader de Rockbox</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="111"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="96"/>
<source>Checking downloaded bootloader</source>
<translation>Vérification du bootloader téléchargé</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="119"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="104"/>
<source>Bootloader mismatch! Aborting.</source>
<translation>Le bootloader ne correspond pas ! Abandon.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallsansa.cpp" line="170"/>
+ <location filename="../base/bootloaderinstallsansa.cpp" line="155"/>
<source>Uninstalling bootloader</source>
<translation>Suppression du bootloader</translation>
</message>
@@ -1029,41 +1223,41 @@ Veuillez vous référer à http://www.rockbox.org/wiki/SansaE200Install
<context>
<name>Config</name>
<message>
- <location filename="../configure.cpp" line="340"/>
+ <location filename="../configure.cpp" line="328"/>
<source>Showing disabled targets</source>
<translation>Afficher les cibles d&apos;installation désactivées</translation>
</message>
<message>
- <location filename="../configure.cpp" line="341"/>
+ <location filename="../configure.cpp" line="329"/>
<source>You just enabled showing targets that are marked disabled. Disabled targets are not recommended to end users. Please use this option only if you know what you are doing.</source>
<translation>Vous venez d&apos;activer l&apos;affichage des cibles d&apos;installations indiquées comme inactives. Cette option n&apos;est pas recommandée pour l&apos;utilisateur final. Vous êtes encouragé à utiliser celle-ci uniquement si vous savez ce que vous faites.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="529"/>
+ <location filename="../configure.cpp" line="523"/>
<source>Proxy Detection</source>
<translation>Détection du proxy</translation>
</message>
<message>
- <location filename="../configure.cpp" line="530"/>
+ <location filename="../configure.cpp" line="524"/>
<source>The System Proxy settings are invalid!
Rockbox Utility can&apos;t work with this proxy settings. Make sure the system proxy is set correctly. Note that &quot;proxy auto-config (PAC)&quot; scripts are not supported by Rockbox Utility. If your system uses this you need to use manual proxy settings.</source>
<translation>Les paramètres système Proxy sont non valides !
L&apos;Utilitaire Rockbox ne peut pas fonctionner avec ces réglages proxy. Vérifier que le proxy soit correctement paramétré. Notez que les scripts &quot;proxy auto-config (PAC)&quot; ne sont pas supportés. Si votre système en utilise vous devez effectuer un paramétrage manuel.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="643"/>
+ <location filename="../configure.cpp" line="634"/>
<source>Set Cache Path</source>
<translation>Sélectionner le chemin vers le cache</translation>
</message>
<message>
- <location filename="../configure.cpp" line="788"/>
+ <location filename="../configure.cpp" line="782"/>
<source>%1 &quot;MacPod&quot; found!
Rockbox needs a FAT formatted Ipod (so-called &quot;WinPod&quot;) to run. </source>
<translation>%1 &quot;MacPod&quot; détecté !
Rockbox ne peut fonctionner que sur un Ipod utilisant le système de fichier FAT (aussi appelé un &quot;WinPod&quot;).</translation>
</message>
<message>
- <location filename="../configure.cpp" line="780"/>
+ <location filename="../configure.cpp" line="773"/>
<source>%1 in MTP mode found!
You need to change your player to MSC mode for installation. </source>
<translatorcomment>Pour effectuer l&apos;installation, il est nécessaire de mettre votre lecteur audio en mode MSC </translatorcomment>
@@ -1075,7 +1269,7 @@ Pour effectuer l&apos;installation, il est nécessaire de mettre votre lecteur a
<translation type="obsolete">Cette installation échouera tant que vous n&apos;aurez pas modifié cela!</translation>
</message>
<message>
- <location filename="../configure.cpp" line="774"/>
+ <location filename="../configure.cpp" line="766"/>
<source>Detected an unsupported player:
%1
Sorry, Rockbox doesn&apos;t run on your player.</source>
@@ -1088,149 +1282,149 @@ Désolé, Rockbox ne fonctionne pas sur votre lecteur audio.</translation>
<translation type="obsolete">Erreur fatale: le lecteur audio est incompatible</translation>
</message>
<message>
- <location filename="../configure.cpp" line="858"/>
+ <location filename="../configure.cpp" line="853"/>
<source>Autodetection</source>
<translation>Autodétection</translation>
</message>
<message>
- <location filename="../configure.cpp" line="859"/>
+ <location filename="../configure.cpp" line="854"/>
<source>Could not detect a Mountpoint.
Select your Mountpoint manually.</source>
<translation>Impossible de détecter un point de montage.
Veuillez sélectionner manuellement le point de montage.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="764"/>
+ <location filename="../configure.cpp" line="756"/>
<source>Could not detect a device.
Select your device and Mountpoint manually.</source>
<translation>Impossible de détecter le périphérique.
Veuillez sélectionner manuellement le type de périphérique et le point de montage.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="448"/>
- <location filename="../configure.cpp" line="914"/>
+ <location filename="../configure.cpp" line="438"/>
+ <location filename="../configure.cpp" line="904"/>
<source>TTS error</source>
<translation>Erreur TTS</translation>
</message>
<message>
- <location filename="../configure.cpp" line="449"/>
- <location filename="../configure.cpp" line="915"/>
+ <location filename="../configure.cpp" line="439"/>
+ <location filename="../configure.cpp" line="905"/>
<source>The selected TTS failed to initialize. You can&apos;t use this TTS.</source>
<translation>L&apos;initialisation du TTS sélectionné a échoué. Vous ne pouvez pas utiliser ce TTS. </translation>
</message>
<message>
- <location filename="../configure.cpp" line="665"/>
+ <location filename="../configure.cpp" line="656"/>
<source>%1 (%2 GiB of %3 GiB free)</source>
<translation>%1 (%2 GiB libres sur %3 GiB)</translation>
</message>
<message>
- <location filename="../configure.cpp" line="739"/>
+ <location filename="../configure.cpp" line="730"/>
<source>Multiple devices have been detected. Please disconnect all players but one and try again.</source>
<translation>Plusieurs périphériques ont été détectés. Veuillez déconnecter tous les lecteurs sauf un et essayer à nouveau s&apos;il vous plait.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="742"/>
+ <location filename="../configure.cpp" line="733"/>
<source>Detected devices:</source>
<translation>Périphériques détectés:</translation>
</message>
<message>
- <location filename="../configure.cpp" line="747"/>
+ <location filename="../configure.cpp" line="738"/>
<source>(unknown)</source>
<translation>(inconnu)</translation>
</message>
<message>
- <location filename="../configure.cpp" line="749"/>
+ <location filename="../configure.cpp" line="740"/>
<source>%1 at %2</source>
<translation>%1 à %2</translation>
</message>
<message>
- <location filename="../configure.cpp" line="755"/>
+ <location filename="../configure.cpp" line="747"/>
<source>Note: detecting connected devices might be ambiguous. You might have less devices connected than listed. In this case it might not be possible to detect your player unambiguously.</source>
<translation>Note: la détection des périphériques connectés n&apos;est pas toujours fiable. Il peut y avoir moins de périphériques connectés qu&apos;indiqué. Dans ce cas, détecter votre lecteur de manière parfaitement fiable peut s&apos;avérer impossible. </translation>
</message>
<message>
- <location filename="../configure.cpp" line="759"/>
- <location filename="../configure.cpp" line="763"/>
- <location filename="../configure.cpp" line="805"/>
+ <location filename="../configure.cpp" line="751"/>
+ <location filename="../configure.cpp" line="755"/>
+ <location filename="../configure.cpp" line="800"/>
<source>Device Detection</source>
<translation>Détection de périphérique</translation>
</message>
<message>
- <location filename="../configure.cpp" line="794"/>
+ <location filename="../configure.cpp" line="789"/>
<source>The player contains an incompatible filesystem.
Make sure you selected the correct mountpoint and the player is set up to use a filesystem compatible with Rockbox.</source>
<translation>Le lecteur contient un système de fichier incompatible.
Vérifiez que vous avez sélectionné le bon point de montage et que le baladeur est paramétré pour utiliser un système de fichier compatible avec Rockbox.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="802"/>
+ <location filename="../configure.cpp" line="797"/>
<source>An unknown error occured during player detection.</source>
<translation>Une erreur inconnue s&apos;est produite pendant la détection du lecteur.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="869"/>
+ <location filename="../configure.cpp" line="864"/>
<source>Really delete cache?</source>
<translation>Supprimer le cache ?</translation>
</message>
<message>
- <location filename="../configure.cpp" line="870"/>
+ <location filename="../configure.cpp" line="865"/>
<source>Do you really want to delete the cache? Make absolutely sure this setting is correct as it will remove &lt;b&gt;all&lt;/b&gt; files in this folder!</source>
<translation>Voulez-vous supprimer le cache ? Vérifier bien que ce paramètre est correct car il supprimera &lt;b&gt;tous&lt;/b&gt; les fichiers de ce répertoire !</translation>
</message>
<message>
- <location filename="../configure.cpp" line="878"/>
+ <location filename="../configure.cpp" line="873"/>
<source>Path wrong!</source>
<translation>Chemin incorrect !</translation>
</message>
<message>
- <location filename="../configure.cpp" line="879"/>
+ <location filename="../configure.cpp" line="874"/>
<source>The cache path is invalid. Aborting.</source>
<translation>Le chemin du cache est invalide. Annulation.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="921"/>
+ <location filename="../configure.cpp" line="911"/>
<source>TTS configuration invalid</source>
<translation>La configuration du moteur TTS est incorrecte</translation>
</message>
<message>
- <location filename="../configure.cpp" line="922"/>
+ <location filename="../configure.cpp" line="912"/>
<source>TTS configuration invalid.
Please configure TTS engine.</source>
<translation>La configuration du moteur TTS est incorrecte.
Veuillez configurer le moteur TTS.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="927"/>
+ <location filename="../configure.cpp" line="917"/>
<source>Could not start TTS engine.</source>
<translation>Impossible lancer le moteur TTS.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="928"/>
+ <location filename="../configure.cpp" line="918"/>
<source>Could not start TTS engine.
</source>
<translation>Impossible lancer le moteur TTS.
</translation>
</message>
<message>
- <location filename="../configure.cpp" line="929"/>
- <location filename="../configure.cpp" line="948"/>
+ <location filename="../configure.cpp" line="919"/>
+ <location filename="../configure.cpp" line="938"/>
<source>
Please configure TTS engine.</source>
<translation>
Veuillez configurer le moteur TTS.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="943"/>
+ <location filename="../configure.cpp" line="933"/>
<source>Rockbox Utility Voice Test</source>
<translation>Test de la synthèse vocale de l&apos;utilitaire Rockbox</translation>
</message>
<message>
- <location filename="../configure.cpp" line="946"/>
+ <location filename="../configure.cpp" line="936"/>
<source>Could not voice test string.</source>
<translation>Impossible de synthétiser la phrase de test.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="947"/>
+ <location filename="../configure.cpp" line="937"/>
<source>Could not voice test string.
</source>
<translation>Impossible de synthétiser la phrase de test.</translation>
@@ -1240,64 +1434,64 @@ Veuillez configurer le moteur TTS.</translation>
<translation type="obsolete">Erreur fatale</translation>
</message>
<message>
- <location filename="../configure.cpp" line="322"/>
+ <location filename="../configure.cpp" line="310"/>
<source>Current cache size is %L1 kiB.</source>
<translation>La taille actuelle du cache est %L1 ko.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="455"/>
- <location filename="../configure.cpp" line="485"/>
+ <location filename="../configure.cpp" line="445"/>
+ <location filename="../configure.cpp" line="479"/>
<source>Configuration OK</source>
<translation>La configuration est correcte</translation>
</message>
<message>
- <location filename="../configure.cpp" line="461"/>
- <location filename="../configure.cpp" line="490"/>
+ <location filename="../configure.cpp" line="455"/>
+ <location filename="../configure.cpp" line="484"/>
<source>Configuration INVALID</source>
<translation>La configuration est incorrecte</translation>
</message>
<message>
- <location filename="../configure.cpp" line="130"/>
+ <location filename="../configure.cpp" line="125"/>
<source>The following errors occurred:</source>
<translation>Les erreurs suivantes sont survenues:</translation>
</message>
<message>
- <location filename="../configure.cpp" line="175"/>
+ <location filename="../configure.cpp" line="170"/>
<source>No mountpoint given</source>
<translation>Aucun point de montage spécifié</translation>
</message>
<message>
- <location filename="../configure.cpp" line="179"/>
+ <location filename="../configure.cpp" line="174"/>
<source>Mountpoint does not exist</source>
<translation>Le point de montage n&apos;existe pas</translation>
</message>
<message>
- <location filename="../configure.cpp" line="183"/>
+ <location filename="../configure.cpp" line="178"/>
<source>Mountpoint is not a directory.</source>
<translation>Le point de montage n&apos;est pas un dossier.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="187"/>
+ <location filename="../configure.cpp" line="182"/>
<source>Mountpoint is not writeable</source>
<translation>Le point de montage n&apos;est pas accessible en écriture</translation>
</message>
<message>
- <location filename="../configure.cpp" line="202"/>
+ <location filename="../configure.cpp" line="197"/>
<source>No player selected</source>
<translation>Aucun lecteur audio sélectionné</translation>
</message>
<message>
- <location filename="../configure.cpp" line="209"/>
+ <location filename="../configure.cpp" line="204"/>
<source>Cache path not writeable. Leave path empty to default to systems temporary path.</source>
<translation>Le chemin vers le cache n&apos;est pas accessible en écriture. Vous pouvez laisser le chemin vide pour utiliser le dossier temporaire par défaut de votre système.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="228"/>
+ <location filename="../configure.cpp" line="223"/>
<source>You need to fix the above errors before you can continue.</source>
<translation>Vous devez corriger les erreurs suivantes avant de pouvoir continuer.</translation>
</message>
<message>
- <location filename="../configure.cpp" line="231"/>
+ <location filename="../configure.cpp" line="226"/>
<source>Configuration error</source>
<translation>Erreur de configuration</translation>
</message>
@@ -1325,7 +1519,7 @@ Veuillez configurer le moteur TTS.</translation>
<translation>Sélectionnez votre périphérique dans le &amp;Système de fichiers</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="319"/>
+ <location filename="../configurefrm.ui" line="326"/>
<source>&amp;Browse</source>
<translation>&amp;Parcourir</translation>
</message>
@@ -1390,42 +1584,42 @@ Veuillez configurer le moteur TTS.</translation>
<translation>Montrer</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="260"/>
+ <location filename="../configurefrm.ui" line="267"/>
<source>&amp;Language</source>
<translation>&amp;Langue</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="274"/>
+ <location filename="../configurefrm.ui" line="281"/>
<source>Cac&amp;he</source>
<translation>&amp;Cache</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="277"/>
+ <location filename="../configurefrm.ui" line="284"/>
<source>Download cache settings</source>
<translation>Paramètres du cache de téléchargement</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="283"/>
+ <location filename="../configurefrm.ui" line="290"/>
<source>Rockbox Utility uses a local download cache to save network traffic. You can change the path to the cache and use it as local repository by enabling Offline mode.</source>
<translation>L&apos;utilitaire Rockbox utilise un cache local de téléchargement pour économiser de la bande passante. Vous pouvez modifier le chemin du cache et l&apos;utiliser comme dépôt local en activant le mode hors-ligne.</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="293"/>
+ <location filename="../configurefrm.ui" line="300"/>
<source>Current cache size is %1</source>
<translation>La taille actuelle du cache est %1</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="302"/>
+ <location filename="../configurefrm.ui" line="309"/>
<source>P&amp;ath</source>
<translation>&amp;Chemin</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="312"/>
+ <location filename="../configurefrm.ui" line="319"/>
<source>Entering an invalid folder will reset the path to the systems temporary path.</source>
<translation>Entrer un répertoire invalide remettra la valeur du chemin à celle du répertoire temporaire du système.</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="334"/>
+ <location filename="../configurefrm.ui" line="341"/>
<source>Disable local &amp;download cache</source>
<translation>Désactiver le cache local de &amp;téléchargement</translation>
</message>
@@ -1441,52 +1635,52 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<translation type="obsolete">Mode &amp;hors-ligne</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="369"/>
+ <location filename="../configurefrm.ui" line="376"/>
<source>Clean cache &amp;now</source>
<translation>Nettoyer le cache &amp;maintenant</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="385"/>
+ <location filename="../configurefrm.ui" line="392"/>
<source>&amp;TTS &amp;&amp; Encoder</source>
<translation>&amp;TTS &amp;&amp; Encodeur</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="391"/>
+ <location filename="../configurefrm.ui" line="398"/>
<source>TTS Engine</source>
<translation>Moteur TTS</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="397"/>
+ <location filename="../configurefrm.ui" line="404"/>
<source>&amp;Select TTS Engine</source>
<translation>&amp;Choisir un moteur TTS</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="445"/>
+ <location filename="../configurefrm.ui" line="452"/>
<source>Test TTS</source>
<translation>Tester le moteur</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="452"/>
+ <location filename="../configurefrm.ui" line="463"/>
<source>&amp;Use string corrections for TTS</source>
<translation>&amp;Utiliser la correction des phrases pour TTS</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="462"/>
+ <location filename="../configurefrm.ui" line="473"/>
<source>Encoder Engine</source>
<translation>Moteur d&apos;encodage</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="536"/>
+ <location filename="../configurefrm.ui" line="547"/>
<source>&amp;Ok</source>
<translation>&amp;OK</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="547"/>
+ <location filename="../configurefrm.ui" line="558"/>
<source>&amp;Cancel</source>
<translation>&amp;Annuler</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="410"/>
+ <location filename="../configurefrm.ui" line="417"/>
<source>Configure TTS Engine</source>
<translation>Configurer le moteur TTS</translation>
</message>
@@ -1501,23 +1695,23 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<translation>Utiliser les &amp;valeurs système</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="417"/>
- <location filename="../configurefrm.ui" line="468"/>
+ <location filename="../configurefrm.ui" line="424"/>
+ <location filename="../configurefrm.ui" line="479"/>
<source>Configuration invalid!</source>
<translation>Configuration invalide !</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="434"/>
+ <location filename="../configurefrm.ui" line="441"/>
<source>Configure &amp;TTS</source>
<translation>Configurer le moteur &amp;TTS</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="485"/>
+ <location filename="../configurefrm.ui" line="496"/>
<source>Configure &amp;Enc</source>
<translation>Configurer l&apos;&amp;encodage</translation>
</message>
<message>
- <location filename="../configurefrm.ui" line="496"/>
+ <location filename="../configurefrm.ui" line="507"/>
<source>encoder name</source>
<translation>nom de l&apos;encodeur</translation>
</message>
@@ -1525,7 +1719,7 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<context>
<name>Configure</name>
<message>
- <location filename="../configure.cpp" line="589"/>
+ <location filename="../configure.cpp" line="581"/>
<source>English</source>
<comment>This is the localized language name, i.e. your language.</comment>
<translation>Français</translation>
@@ -1549,12 +1743,12 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<translation>TTS:</translation>
</message>
<message>
- <location filename="../createvoicefrm.ui" line="101"/>
+ <location filename="../createvoicefrm.ui" line="105"/>
<source>Silence threshold</source>
<translation>Seuil de silence</translation>
</message>
<message>
- <location filename="../createvoicefrm.ui" line="163"/>
+ <location filename="../createvoicefrm.ui" line="167"/>
<source>Language</source>
<translation>Langue</translation>
</message>
@@ -1564,22 +1758,22 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<translation>Paramètres de génération</translation>
</message>
<message>
- <location filename="../createvoicefrm.ui" line="68"/>
+ <location filename="../createvoicefrm.ui" line="72"/>
<source>Change</source>
<translation>Modifier</translation>
</message>
<message>
- <location filename="../createvoicefrm.ui" line="139"/>
+ <location filename="../createvoicefrm.ui" line="143"/>
<source>&amp;Install</source>
<translation>&amp;Installer</translation>
</message>
<message>
- <location filename="../createvoicefrm.ui" line="150"/>
+ <location filename="../createvoicefrm.ui" line="154"/>
<source>&amp;Cancel</source>
<translation>&amp;Annuler</translation>
</message>
<message>
- <location filename="../createvoicefrm.ui" line="88"/>
+ <location filename="../createvoicefrm.ui" line="92"/>
<source>Wavtrim Threshold</source>
<translation>Seuil pour Wavtrim</translation>
</message>
@@ -1587,18 +1781,18 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<context>
<name>CreateVoiceWindow</name>
<message>
- <location filename="../createvoicewindow.cpp" line="100"/>
+ <location filename="../createvoicewindow.cpp" line="106"/>
<source>TTS error</source>
<translation>Erreur TTS</translation>
</message>
<message>
- <location filename="../createvoicewindow.cpp" line="101"/>
+ <location filename="../createvoicewindow.cpp" line="107"/>
<source>The selected TTS failed to initialize. You can&apos;t use this TTS.</source>
<translation>L&apos;initialisation du TTS sélectionné a échoué. Vous ne pouvez pas utiliser ce TTS.</translation>
</message>
<message>
- <location filename="../createvoicewindow.cpp" line="105"/>
- <location filename="../createvoicewindow.cpp" line="108"/>
+ <location filename="../createvoicewindow.cpp" line="111"/>
+ <location filename="../createvoicewindow.cpp" line="114"/>
<source>Engine: &lt;b&gt;%1&lt;/b&gt;</source>
<translation>Moteur: &lt;b&gt;%1&lt;/b&gt;</translation>
</message>
@@ -1606,32 +1800,32 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<context>
<name>EncTtsCfgGui</name>
<message>
- <location filename="../encttscfggui.cpp" line="45"/>
+ <location filename="../encttscfggui.cpp" line="44"/>
<source>Waiting for engine...</source>
<translation>En attente du moteur d&apos;encodage...</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="95"/>
+ <location filename="../encttscfggui.cpp" line="91"/>
<source>Ok</source>
<translation>Ok</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="98"/>
+ <location filename="../encttscfggui.cpp" line="94"/>
<source>Cancel</source>
<translation>Annuler</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="197"/>
+ <location filename="../encttscfggui.cpp" line="257"/>
<source>Browse</source>
<translation>Parcourir</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="205"/>
+ <location filename="../encttscfggui.cpp" line="272"/>
<source>Refresh</source>
<translation>Rafraîchir</translation>
</message>
<message>
- <location filename="../encttscfggui.cpp" line="377"/>
+ <location filename="../encttscfggui.cpp" line="263"/>
<source>Select executable</source>
<translation>Sélectionner l&apos;exécutable</translation>
</message>
@@ -1639,12 +1833,12 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<context>
<name>EncoderExe</name>
<message>
- <location filename="../base/encoderexe.cpp" line="41"/>
+ <location filename="../base/encoderexe.cpp" line="37"/>
<source>Path to Encoder:</source>
<translation>Chemin vers le moteur d&apos;encodage:</translation>
</message>
<message>
- <location filename="../base/encoderexe.cpp" line="43"/>
+ <location filename="../base/encoderexe.cpp" line="39"/>
<source>Encoder options:</source>
<translation>Options du moteur d&apos;encodage:</translation>
</message>
@@ -1652,23 +1846,23 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<context>
<name>EncoderLame</name>
<message>
- <location filename="../base/encoderlame.cpp" line="73"/>
- <location filename="../base/encoderlame.cpp" line="83"/>
+ <location filename="../base/encoderlame.cpp" line="75"/>
+ <location filename="../base/encoderlame.cpp" line="85"/>
<source>LAME</source>
<translation>LAME</translation>
</message>
<message>
- <location filename="../base/encoderlame.cpp" line="75"/>
+ <location filename="../base/encoderlame.cpp" line="77"/>
<source>Volume</source>
<translation>Volume</translation>
</message>
<message>
- <location filename="../base/encoderlame.cpp" line="79"/>
+ <location filename="../base/encoderlame.cpp" line="81"/>
<source>Quality</source>
<translation>Qualité</translation>
</message>
<message>
- <location filename="../base/encoderlame.cpp" line="83"/>
+ <location filename="../base/encoderlame.cpp" line="85"/>
<source>Could not find libmp3lame!</source>
<translation>Impossible de trouver libmp3lame !</translation>
</message>
@@ -1700,16 +1894,21 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<name>InfoWidget</name>
<message>
<location filename="../gui/infowidget.cpp" line="30"/>
- <location filename="../gui/infowidget.cpp" line="107"/>
+ <location filename="../gui/infowidget.cpp" line="99"/>
<source>File</source>
<translation>Fichier</translation>
</message>
<message>
<location filename="../gui/infowidget.cpp" line="30"/>
- <location filename="../gui/infowidget.cpp" line="107"/>
+ <location filename="../gui/infowidget.cpp" line="99"/>
<source>Version</source>
<translation>Version</translation>
</message>
+ <message>
+ <location filename="../gui/infowidget.cpp" line="47"/>
+ <source>Loading, please wait ...</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>InfoWidgetFrm</name>
@@ -1752,12 +1951,12 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<translation>Suppression des extensions</translation>
</message>
<message>
- <location filename="../installtalkfrm.ui" line="154"/>
+ <location filename="../installtalkfrm.ui" line="158"/>
<source>&amp;Cancel</source>
<translation>&amp;Annuler</translation>
</message>
<message>
- <location filename="../installtalkfrm.ui" line="143"/>
+ <location filename="../installtalkfrm.ui" line="147"/>
<source>&amp;Install</source>
<translation>&amp;Installer</translation>
</message>
@@ -1777,22 +1976,22 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<translation>Explorer l&apos;arborescence</translation>
</message>
<message>
- <location filename="../installtalkfrm.ui" line="111"/>
+ <location filename="../installtalkfrm.ui" line="115"/>
<source>Change</source>
<translation>Modifier</translation>
</message>
<message>
- <location filename="../installtalkfrm.ui" line="118"/>
+ <location filename="../installtalkfrm.ui" line="122"/>
<source>Ignore files</source>
<translation>Ignorer les fichiers</translation>
</message>
<message>
- <location filename="../installtalkfrm.ui" line="128"/>
+ <location filename="../installtalkfrm.ui" line="132"/>
<source>Skip existing</source>
<translation>Ignorer les existants</translation>
</message>
<message>
- <location filename="../installtalkfrm.ui" line="170"/>
+ <location filename="../installtalkfrm.ui" line="174"/>
<source>Select folders for Talkfile generation (Ctrl for multiselect)</source>
<translation>Sélectionnez les dossiers pour la génération des fichiers de voix (Ctrl pour en sélectionner plusieurs)</translation>
</message>
@@ -1804,22 +2003,22 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<translation type="obsolete">&lt;b&gt;%1&lt;/b&gt;</translation>
</message>
<message>
- <location filename="../installtalkwindow.cpp" line="96"/>
+ <location filename="../installtalkwindow.cpp" line="95"/>
<source>Empty selection</source>
<translation>Sélection vide</translation>
</message>
<message>
- <location filename="../installtalkwindow.cpp" line="97"/>
+ <location filename="../installtalkwindow.cpp" line="96"/>
<source>No files or folders selected. Please select files or folders first.</source>
<translation>Pas de fichiers ou dossiers sélectionnés. Veuillez d&apos;abord sélectionner des fichiers ou des dossiers s&apos;il vous plait.</translation>
</message>
<message>
- <location filename="../installtalkwindow.cpp" line="137"/>
+ <location filename="../installtalkwindow.cpp" line="140"/>
<source>TTS error</source>
<translation>Erreur TTS</translation>
</message>
<message>
- <location filename="../installtalkwindow.cpp" line="138"/>
+ <location filename="../installtalkwindow.cpp" line="141"/>
<source>The selected TTS failed to initialize. You can&apos;t use this TTS.</source>
<translation>L&apos;initialisation du TTS sélectionné a échoué. Vous ne pouvez pas utiliser ce TTS.</translation>
</message>
@@ -1827,77 +2026,63 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<context>
<name>ManualWidget</name>
<message>
- <location filename="../gui/manualwidget.cpp" line="44"/>
<source>&lt;a href=&apos;%1&apos;&gt;PDF Manual&lt;/a&gt;</source>
- <translation>&lt;a href=&apos;%1&apos;&gt;Manuel PDF&lt;/a&gt;</translation>
+ <translation type="vanished">&lt;a href=&apos;%1&apos;&gt;Manuel PDF&lt;/a&gt;</translation>
</message>
<message>
- <location filename="../gui/manualwidget.cpp" line="46"/>
<source>&lt;a href=&apos;%1&apos;&gt;HTML Manual (opens in browser)&lt;/a&gt;</source>
- <translation>&lt;a href=&apos;%1&apos;&gt;Manuel HTML (ouvre un navigateur)&lt;/a&gt;</translation>
+ <translation type="vanished">&lt;a href=&apos;%1&apos;&gt;Manuel HTML (ouvre un navigateur)&lt;/a&gt;</translation>
</message>
<message>
- <location filename="../gui/manualwidget.cpp" line="50"/>
<source>Select a device for a link to the correct manual</source>
- <translation>Sélectionnez un périphérique pour obtenir un lien vers le manuel approprié</translation>
+ <translation type="vanished">Sélectionnez un périphérique pour obtenir un lien vers le manuel approprié</translation>
</message>
<message>
- <location filename="../gui/manualwidget.cpp" line="51"/>
<source>&lt;a href=&apos;%1&apos;&gt;Manual Overview&lt;/a&gt;</source>
- <translation>&lt;a href=&apos;%1&apos;&gt;Tous les manuels&lt;/a&gt;</translation>
+ <translation type="vanished">&lt;a href=&apos;%1&apos;&gt;Tous les manuels&lt;/a&gt;</translation>
</message>
<message>
- <location filename="../gui/manualwidget.cpp" line="62"/>
<source>Confirm download</source>
- <translation>Confirmation du téléchargement</translation>
+ <translation type="vanished">Confirmation du téléchargement</translation>
</message>
<message>
- <location filename="../gui/manualwidget.cpp" line="63"/>
<source>Do you really want to download the manual? The manual will be saved to the root folder of your player.</source>
- <translation>Etes-vous sûr de vouloir télécharger le manuel ? Il sera sauvegardé dans le dossier racine de votre lecteur audio.</translation>
+ <translation type="vanished">Etes-vous sûr de vouloir télécharger le manuel ? Il sera sauvegardé dans le dossier racine de votre lecteur audio.</translation>
</message>
</context>
<context>
<name>ManualWidgetFrm</name>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="14"/>
<source>Manual</source>
- <translation>Manuel</translation>
+ <translation type="vanished">Manuel</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="20"/>
<source>Read the manual</source>
- <translation>Lire le manuel</translation>
+ <translation type="vanished">Lire le manuel</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="26"/>
<source>PDF manual</source>
- <translation>Manuel PDF</translation>
+ <translation type="vanished">Manuel PDF</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="39"/>
<source>HTML manual</source>
- <translation>Manuel HTML</translation>
+ <translation type="vanished">Manuel HTML</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="55"/>
<source>Download the manual</source>
- <translation>Télécharger le manuel</translation>
+ <translation type="vanished">Télécharger le manuel</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="63"/>
<source>&amp;PDF version</source>
- <translation>Version &amp;PDF</translation>
+ <translation type="vanished">Version &amp;PDF</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="70"/>
<source>&amp;HTML version (zip file)</source>
- <translation>Version &amp;HTML (fichier zip)</translation>
+ <translation type="vanished">Version &amp;HTML (fichier zip)</translation>
</message>
<message>
- <location filename="../gui/manualwidgetfrm.ui" line="92"/>
<source>Down&amp;load</source>
- <translation>Télé&amp;charger</translation>
+ <translation type="vanished">Télé&amp;charger</translation>
</message>
</context>
<context>
@@ -1914,6 +2099,34 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
</message>
</context>
<context>
+ <name>PlayerBuildInfo</name>
+ <message>
+ <location filename="../base/playerbuildinfo.cpp" line="337"/>
+ <source>Stable (Retired)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/playerbuildinfo.cpp" line="340"/>
+ <source>Unusable</source>
+ <translation type="unfinished">Inutilisable</translation>
+ </message>
+ <message>
+ <location filename="../base/playerbuildinfo.cpp" line="343"/>
+ <source>Unstable</source>
+ <translation type="unfinished">Instable</translation>
+ </message>
+ <message>
+ <location filename="../base/playerbuildinfo.cpp" line="346"/>
+ <source>Stable</source>
+ <translation type="unfinished">Stable</translation>
+ </message>
+ <message>
+ <location filename="../base/playerbuildinfo.cpp" line="349"/>
+ <source>Unknown</source>
+ <translation type="unfinished">Inconnu</translation>
+ </message>
+</context>
+<context>
<name>PreviewFrm</name>
<message>
<location filename="../previewfrm.ui" line="16"/>
@@ -1924,23 +2137,23 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<context>
<name>ProgressLoggerFrm</name>
<message>
- <location filename="../progressloggerfrm.ui" line="13"/>
- <location filename="../progressloggerfrm.ui" line="19"/>
+ <location filename="../progressloggerfrm.ui" line="18"/>
+ <location filename="../progressloggerfrm.ui" line="24"/>
<source>Progress</source>
<translation>Avancement</translation>
</message>
<message>
- <location filename="../progressloggerfrm.ui" line="58"/>
+ <location filename="../progressloggerfrm.ui" line="63"/>
<source>Save Log</source>
<translation>Sauvegarder l&apos;historique</translation>
</message>
<message>
- <location filename="../progressloggerfrm.ui" line="82"/>
+ <location filename="../progressloggerfrm.ui" line="87"/>
<source>&amp;Abort</source>
<translation>&amp;Annuler</translation>
</message>
<message>
- <location filename="../progressloggerfrm.ui" line="32"/>
+ <location filename="../progressloggerfrm.ui" line="37"/>
<source>progresswindow</source>
<translation>Progression</translation>
</message>
@@ -1948,17 +2161,17 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<context>
<name>ProgressLoggerGui</name>
<message>
- <location filename="../progressloggergui.cpp" line="122"/>
+ <location filename="../progressloggergui.cpp" line="117"/>
<source>&amp;Ok</source>
<translation>&amp;OK</translation>
</message>
<message>
- <location filename="../progressloggergui.cpp" line="146"/>
+ <location filename="../progressloggergui.cpp" line="141"/>
<source>Save system trace log</source>
<translation>Sauvegarder l&apos;historique de la trace système</translation>
</message>
<message>
- <location filename="../progressloggergui.cpp" line="104"/>
+ <location filename="../progressloggergui.cpp" line="99"/>
<source>&amp;Abort</source>
<translation>&amp;Annuler</translation>
</message>
@@ -1966,70 +2179,112 @@ pour télécharger tous les fichiers néecessaires dans le cache.&lt;/p&gt;</tra
<context>
<name>QObject</name>
<message>
- <location filename="../configure.cpp" line="625"/>
- <location filename="../main.cpp" line="83"/>
+ <location filename="../configure.cpp" line="616"/>
+ <location filename="../main.cpp" line="102"/>
<source>LTR</source>
- <extracomment>This string is used to indicate the writing direction. Translate it to &quot;RTL&quot; (without quotes) for RTL languages. Anything else will get treated as LTR language.
-----------
-This string is used to indicate the writing direction. Translate it to &quot;RTL&quot; (without quotes) for RTL languages. Anything else will get treated as LTR language.</extracomment>
+ <extracomment>This string is used to indicate the writing direction. Translate it to &quot;RTL&quot; (without quotes) for RTL languages. Anything else will get treated as LTR language.</extracomment>
<translation></translation>
</message>
<message>
- <location filename="../base/system.cpp" line="385"/>
+ <location filename="../base/system.cpp" line="333"/>
<source>(unknown vendor name) </source>
<translatorcomment>Je suppose que le nom du vendeur est l&apos;équivalent de la marque... nom du vendeur serait bizarre...</translatorcomment>
<translation>(Marque du produit inconnue)</translation>
</message>
<message>
- <location filename="../base/system.cpp" line="403"/>
+ <location filename="../base/system.cpp" line="351"/>
<source>(unknown product name)</source>
<translation>(Nom du produit inconnu)</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="80"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="107"/>
<source>Bootloader installation is almost complete. Installation &lt;b&gt;requires&lt;/b&gt; you to perform the following steps manually:</source>
<translation>L&apos;installation du bootloader est presque complète. Vous &lt;b&gt;devez&lt;/b&gt; réaliser les étapes suivantes manuellement:</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="86"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="113"/>
<source>&lt;li&gt;Safely remove your player.&lt;/li&gt;</source>
<translation>&lt;li&gt;Débranchez votre lecteur audio en toute sécurité.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="91"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="119"/>
<source>&lt;li&gt;Reboot your player into the original firmware.&lt;/li&gt;&lt;li&gt;Perform a firmware upgrade using the update functionality of the original firmware. Please refer to your player&apos;s manual on details.&lt;br/&gt;&lt;b&gt;Important:&lt;/b&gt; updating the firmware is a critical process that must not be interrupted. &lt;b&gt;Make sure the player is charged before starting the firmware update process.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;After the firmware has been updated reboot your player.&lt;/li&gt;</source>
<translation>&lt;li&gt;Redémarrez votre lecteur audio dans le firmware original.&lt;/li&gt;&lt;li&gt;Faites une mise à jour du logiciel en utilisant la fonctionnalité du firmware original. Veuillez vous référer au manuel du lecteur pour plus de détails.&lt;br/&gt;&lt;b&gt;Note importante:&lt;/b&gt;la mise à jour du logiciel est une étape critique qui ne doit en aucun cas être interrompue. &lt;b&gt;Assurez-vous que votre lecteur audio est rechargé avant de lancer une mise à jour.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Une fois la mise à jour effectuée, redémarrez votre lecteur audio.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="102"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="130"/>
<source>&lt;li&gt;Remove any previously inserted microSD card&lt;/li&gt;</source>
<translation>&lt;li&gt;Retirez toute card microSD insérée&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="103"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="131"/>
<source>&lt;li&gt;Disconnect your player. The player will reboot and perform an update of the original firmware. Please refer to your players manual on details.&lt;br/&gt;&lt;b&gt;Important:&lt;/b&gt; updating the firmware is a critical process that must not be interrupted. &lt;b&gt;Make sure the player is charged before disconnecting the player.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;After the firmware has been updated reboot your player.&lt;/li&gt;</source>
<translation>&lt;li&gt;Déconnectez votre lecteur audio. Celui-ci va redémarrer et faire une mise à jour du logiciel. Veuillez vous référer au manuel du lecteur pour plus de détails.&lt;br/&gt;&lt;b&gt;Note importante:&lt;/b&gt; la mise à jour du logiciel est une étape critique qui ne doit en aucun cas être interrompue. &lt;b&gt;Assurez-vous que votre lecteur est rechargé avant de le déconnecter.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Une fois la mise à jour effectuée, redémarrez votre lecteur.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="114"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="142"/>
<source>&lt;li&gt;Turn the player off&lt;/li&gt;&lt;li&gt;Insert the charger&lt;/li&gt;</source>
<translation>&lt;li&gt;Éteignez votre lecteur audio&lt;/li&gt;&lt;li&gt;Insérer le chargeur&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="119"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="147"/>
<source>&lt;li&gt;Unplug USB and power adaptors&lt;/li&gt;&lt;li&gt;Hold &lt;i&gt;Power&lt;/i&gt; to turn the player off&lt;/li&gt;&lt;li&gt;Toggle the battery switch on the player&lt;/li&gt;&lt;li&gt;Hold &lt;i&gt;Power&lt;/i&gt; to boot into Rockbox&lt;/li&gt;</source>
<translation>Débranchez le cable USB et celui d&apos;alimentation&lt;/li&gt;&lt;li&gt;Maintenez le &lt;i&gt;Bouton d&apos;alimentation&lt;/i&gt; pressé pour éteindre le lecteur&lt;/li&gt;&lt;li&gt;Basculez l&apos;interrupteur&lt;/li&gt;&lt;li&gt;Maintenez le &lt;i&gt;Bouton d&apos;alimentation&lt;/i&gt; pressé pour démarrer Rockbox&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallhelper.cpp" line="125"/>
+ <location filename="../base/bootloaderinstallhelper.cpp" line="153"/>
<source>&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; You can safely install other parts first, but the above steps are &lt;b&gt;required&lt;/b&gt; to finish the installation!&lt;/p&gt;</source>
<translation>&lt;p&gt;&lt;b&gt;Remarque:&lt;/b&gt; Vous pouvez commencer par installer d&apos;autres parties de Rockbox, mais n&apos;oubliez pas que les étapes suivantes sont &lt;b&gt;nécessaire&lt;/b&gt; pour finir l&apos;installation !&lt;/p&gt;</translation>
</message>
</context>
<context>
+ <name>QuaGzipFile</name>
+ <message>
+ <location filename="../quazip/quagzipfile.cpp" line="60"/>
+ <location filename="../quazip-1.2/quazip/quagzipfile.cpp" line="60"/>
+ <source>QIODevice::Append is not supported for GZIP</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../quazip/quagzipfile.cpp" line="66"/>
+ <location filename="../quazip-1.2/quazip/quagzipfile.cpp" line="66"/>
+ <source>Opening gzip for both reading and writing is not supported</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../quazip/quagzipfile.cpp" line="74"/>
+ <location filename="../quazip-1.2/quazip/quagzipfile.cpp" line="74"/>
+ <source>You can open a gzip either for reading or for writing. Which is it?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../quazip/quagzipfile.cpp" line="80"/>
+ <location filename="../quazip-1.2/quazip/quagzipfile.cpp" line="80"/>
+ <source>Could not gzopen() file</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QuaZIODevice</name>
+ <message>
+ <location filename="../quazip/quaziodevice.cpp" line="188"/>
+ <location filename="../quazip-1.2/quazip/quaziodevice.cpp" line="188"/>
+ <source>QIODevice::Append is not supported for QuaZIODevice</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../quazip/quaziodevice.cpp" line="193"/>
+ <location filename="../quazip-1.2/quazip/quaziodevice.cpp" line="193"/>
+ <source>QIODevice::ReadWrite is not supported for QuaZIODevice</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>QuaZipFile</name>
<message>
- <location filename="../quazip/quazipfile.cpp" line="141"/>
+ <location filename="../quazip/quazipfile.cpp" line="251"/>
+ <location filename="../quazip-1.2/quazip/quazipfile.cpp" line="251"/>
+ <location filename="../quazip_/quazipfile.cpp" line="251"/>
<source>ZIP/UNZIP API error %1</source>
<translation>Erreur de l&apos;API ZIP/UNZIP : %1</translation>
</message>
@@ -2037,215 +2292,246 @@ This string is used to indicate the writing direction. Translate it to &quot;RTL
<context>
<name>RbUtilQt</name>
<message>
- <location filename="../rbutilqt.cpp" line="224"/>
+ <location filename="../rbutilqt.cpp" line="211"/>
<source>Downloading build information, please wait ...</source>
<translation>Téléchargement des informations de version, veuillez patienter...</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="235"/>
+ <location filename="../rbutilqt.cpp" line="261"/>
<source>Can&apos;t get version information!</source>
<translation>Impossible de récupérer les informations de version !</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="249"/>
+ <location filename="../rbutilqt.cpp" line="275"/>
<source>Download build information finished.</source>
<translation>Le téléchargement des informations de version est terminé.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="450"/>
<source>Confirm Installation</source>
- <translation>Confirmation de l&apos;installation</translation>
+ <translation type="vanished">Confirmation de l&apos;installation</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="582"/>
+ <location filename="../rbutilqt.cpp" line="562"/>
<source>Mount point is wrong!</source>
<translation>Le point de montage est erroné !</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="430"/>
<source>No Rockbox installation found</source>
- <translation>Aucune installation de Rockbox n&apos;a été trouvé</translation>
+ <translation type="vanished">Aucune installation de Rockbox n&apos;a été trouvé</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="431"/>
<source>Could not determine the installed Rockbox version. Please install a Rockbox build before installing voice files.</source>
- <translation>Impossible de déterminer la version de Rockbox installée. Veuillez installer Rockbox avant d&apos;installer les fichiers de voix.</translation>
+ <translation type="vanished">Impossible de déterminer la version de Rockbox installée. Veuillez installer Rockbox avant d&apos;installer les fichiers de voix.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="451"/>
<source>Do you really want to install the voice file?</source>
- <translation>Etes-vous sûr de vouloir installer le fichier de voix ?</translation>
+ <translation type="vanished">Etes-vous sûr de vouloir installer le fichier de voix ?</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="439"/>
<source>No voice file available</source>
- <translation>Aucun fichier de voix disponible</translation>
+ <translation type="vanished">Aucun fichier de voix disponible</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="440"/>
<source>The installed version of Rockbox is a development version. Pre-built voices are only available for release versions of Rockbox. Please generate a voice yourself using the &quot;Create voice file&quot; functionality.</source>
- <translation>La version de Rockbox installée est une version de dévelopement. Des fichiers de voix précalculés sont uniquement disponible pour les versions stables de Rockbox. Veuillez générer des fichiers de voix en utilisant la fonctionnalité &quot;Création de fichiers de voix&quot;.</translation>
+ <translation type="vanished">La version de Rockbox installée est une version de dévelopement. Des fichiers de voix précalculés sont uniquement disponible pour les versions stables de Rockbox. Veuillez générer des fichiers de voix en utilisant la fonctionnalité &quot;Création de fichiers de voix&quot;.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="512"/>
+ <location filename="../rbutilqt.cpp" line="493"/>
<source>Confirm Uninstallation</source>
<translation>Confirmation de la désinstallation</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="513"/>
+ <location filename="../rbutilqt.cpp" line="494"/>
<source>Do you really want to uninstall the Bootloader?</source>
<translation>Etes-vous sûr de vouloir désinstaller le bootloader ?</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="528"/>
+ <location filename="../rbutilqt.cpp" line="506"/>
<source>No uninstall method for this target known.</source>
<translation>Aucune méthode de désinstallation n&apos;est connue pour cette plateforme.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="542"/>
<source>Rockbox Utility can not uninstall the bootloader on this target. Try a normal firmware update to remove the booloader.</source>
- <translation>L&apos;utilitaire Rockbox ne peut pas désinstaller le bootloader. Essayez de faire une mise à jour normale du firmware pour supprimer le bootloader.</translation>
+ <translation type="vanished">L&apos;utilitaire Rockbox ne peut pas désinstaller le bootloader. Essayez de faire une mise à jour normale du firmware pour supprimer le bootloader.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="550"/>
+ <location filename="../rbutilqt.cpp" line="529"/>
<source>No Rockbox bootloader found.</source>
<translation>Le bootloader de Rockbox n&apos;a pas été trouvé.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="568"/>
+ <location filename="../rbutilqt.cpp" line="548"/>
<source>Confirm installation</source>
<translation>Confirmation de l&apos;installation</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="569"/>
+ <location filename="../rbutilqt.cpp" line="549"/>
<source>Do you really want to install Rockbox Utility to your player? After installation you can run it from the players hard drive.</source>
<translation>Etes-vous sûr de vouloir installer l&apos;utilitaire Rockbox sur votre lecteur audio ? Après l&apos;installation vous pourrez le lancer depuis le disque dur de votre lecteur audio.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="578"/>
+ <location filename="../rbutilqt.cpp" line="558"/>
<source>Installing Rockbox Utility</source>
<translation>Installation de l&apos;utilitaire Rockbox</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="596"/>
+ <location filename="../rbutilqt.cpp" line="576"/>
<source>Error installing Rockbox Utility</source>
<translation>Erreur pendant l&apos;installation de l&apos;utilitaire Rockbox</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="600"/>
+ <location filename="../rbutilqt.cpp" line="580"/>
<source>Installing user configuration</source>
<translation>Installation de la configuration utilisateur</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="604"/>
+ <location filename="../rbutilqt.cpp" line="584"/>
<source>Error installing user configuration</source>
<translation>Erreur pendant l&apos;installation de la configuration utilisateur</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="608"/>
+ <location filename="../rbutilqt.cpp" line="588"/>
<source>Successfully installed Rockbox Utility.</source>
<translation>Installation de l&apos;utilitaire Rockbox terminée avec succès.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="664"/>
+ <location filename="../rbutilqt.cpp" line="644"/>
<source>Checking for update ...</source>
<translation>Vérification des mises à jour...</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="729"/>
+ <location filename="../rbutilqt.cpp" line="708"/>
+ <source>Rockbox Utility Update available</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../rbutilqt.cpp" line="709"/>
+ <source>&lt;b&gt;New Rockbox Utility version available.&lt;/b&gt;&lt;br&gt;&lt;br&gt;You are currently using version %1. Get version %2 at &lt;a href=&apos;%3&apos;&gt;%3&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>RockboxUtility Update available</source>
- <translation>Une mise à jour de l&apos;utilitaire Rockbox est disponible</translation>
+ <translation type="vanished">Une mise à jour de l&apos;utilitaire Rockbox est disponible</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="730"/>
<source>&lt;b&gt;New RockboxUtility Version available.&lt;/b&gt; &lt;br&gt;&lt;br&gt;Download it from here: &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;</source>
- <translation>&lt;b&gt;Une nouvelle version de l&apos;utilitaire de Rockbox est disponible.&lt;/b&gt; &lt;br&gt;&lt;br&gt;Vous pouvez la télécharger ici: &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;</translation>
+ <translation type="vanished">&lt;b&gt;Une nouvelle version de l&apos;utilitaire de Rockbox est disponible.&lt;/b&gt; &lt;br&gt;&lt;br&gt;Vous pouvez la télécharger ici: &lt;a href=&apos;%1&apos;&gt;%2&lt;/a&gt;</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="733"/>
+ <location filename="../rbutilqt.cpp" line="713"/>
<source>New version of Rockbox Utility available.</source>
<translation>Une nouvelle version de l&apos;utilitaire Rockbox est disponible.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="736"/>
+ <location filename="../rbutilqt.cpp" line="716"/>
<source>Rockbox Utility is up to date.</source>
<translation>L&apos;utilitaire Rockbox est à jour.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="759"/>
+ <location filename="../rbutilqt.cpp" line="739"/>
<source>Device ejected</source>
<translation>Périphérique éjecté</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="760"/>
+ <location filename="../rbutilqt.cpp" line="740"/>
<source>Device successfully ejected. You may now disconnect the player from the PC.</source>
<translation>Périphérique éjecté avec succès. Vous pouvez maintenant déconnecter le lecteur du PC.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="764"/>
+ <location filename="../rbutilqt.cpp" line="744"/>
<source>Ejecting failed</source>
<translation>L&apos;éjection a échoué</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="765"/>
+ <location filename="../rbutilqt.cpp" line="745"/>
<source>Ejecting the device failed. Please make sure no programs are accessing files on the device. If ejecting still fails please use your computers eject funtionality.</source>
<translation>L&apos;éjection du périphérique a échoué. Veuillez vérifier que les fichiers sur le lecteur ne sont pas utilisés par un autre programme. Si l&apos;éjection échoue à nouveau, veuillez utiliser la fonction d&apos;éjection de votre ordinateur s&apos;il vous plait. </translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="337"/>
- <location filename="../rbutilqt.cpp" line="642"/>
+ <location filename="../rbutilqt.cpp" line="391"/>
+ <location filename="../rbutilqt.cpp" line="622"/>
<source>Configuration error</source>
<translation>Erreur de configuration</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="643"/>
+ <location filename="../rbutilqt.cpp" line="304"/>
+ <source>Libraries used</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../rbutilqt.cpp" line="518"/>
+ <source>Rockbox Utility can not uninstall the bootloader on your player. Please perform a firmware update using your player vendors firmware update process.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../rbutilqt.cpp" line="521"/>
+ <source>Important: make sure to boot your player into the original firmware before using the vendors firmware update process.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../rbutilqt.cpp" line="623"/>
<source>Your configuration is invalid. Please go to the configuration dialog and make sure the selected values are correct.</source>
<translation>Votre configuration est invalide. Veuillez vérifier dans la fenêtre de configuration que les valeurs sélectionnées soient correctes.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="330"/>
+ <location filename="../rbutilqt.cpp" line="384"/>
<source>This is a new installation of Rockbox Utility, or a new version. The configuration dialog will now open to allow you to setup the program, or review your settings.</source>
<translation>Ceci est une nouvelle installation de l&apos;utilitaire Rockbox, ou l&apos;installation d&apos;une nouvelle version. La fenêtre de configuration va s&apos;ouvrir pour vous permettre de paramétrer le programme ou de vérifier les réglages.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="110"/>
+ <location filename="../rbutilqt.cpp" line="104"/>
<source>Wine detected!</source>
<translation>Wine détecté !</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="111"/>
+ <location filename="../rbutilqt.cpp" line="105"/>
<source>It seems you are trying to run this program under Wine. Please don&apos;t do this, running under Wine will fail. Use the native Linux binary instead.</source>
<translation>Il semblerait que vous essayiez de faire fonctionner ce programme avec Wine. Ne faites pas cela car cela va échouer. Utilisez la version native pour Linux à la place.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="237"/>
+ <location filename="../rbutilqt.cpp" line="227"/>
+ <source>Certificate error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../rbutilqt.cpp" line="229"/>
+ <source>%1
+
+Issuer: %2
+Subject: %3
+Valid since: %4
+Valid until: %5
+
+Temporarily trust certificate?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../rbutilqt.cpp" line="263"/>
<source>Can&apos;t get version information.
Network error: %1. Please check your network and proxy settings.</source>
<translation>Impossible de récupérer les informations de version.
Erreur réseau: %1. Veuillez vérifier vos paramètres réseau et proxy.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="416"/>
<source>Warning</source>
- <translation>Avertissement</translation>
+ <translation type="vanished">Avertissement</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="417"/>
<source>The Application is still downloading Information about new Builds. Please try again shortly.</source>
- <translation>L&apos;application est encore en train de télécharger les informations sur les dernières versions. Veuillez réessayer dans un instant.</translation>
+ <translation type="vanished">L&apos;application est encore en train de télécharger les informations sur les dernières versions. Veuillez réessayer dans un instant.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="329"/>
+ <location filename="../rbutilqt.cpp" line="383"/>
<source>New installation</source>
<translation>Nouvelle installation</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="338"/>
+ <location filename="../rbutilqt.cpp" line="392"/>
<source>Your configuration is invalid. This is most likely due to a changed device path. The configuration dialog will now open to allow you to correct the problem.</source>
<translation>Votre configuration est invalide. Ceci est probablement dû à un changement du chemin du périphérique. La fenêtre de configuration va s&apos;ouvrir pour vous permettre de corriger le problème.</translation>
</message>
<message>
- <location filename="../rbutilqt.cpp" line="236"/>
+ <location filename="../rbutilqt.cpp" line="262"/>
<source>Network error</source>
<translation>Erreur de réseau</translation>
</message>
@@ -2258,307 +2544,312 @@ Erreur réseau: %1. Veuillez vérifier vos paramètres réseau et proxy.</transl
<translation>Utilitaire Rockbox</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="31"/>
+ <location filename="../rbutilqtfrm.ui" line="59"/>
<source>Device</source>
<translation>Périphérique</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="92"/>
+ <location filename="../rbutilqtfrm.ui" line="120"/>
<source>&amp;Change</source>
<translation>&amp;Modifier</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="163"/>
+ <location filename="../rbutilqtfrm.ui" line="166"/>
<source>Welcome</source>
<translation>Bienvenue</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="160"/>
- <location filename="../rbutilqtfrm.ui" line="658"/>
+ <location filename="../rbutilqtfrm.ui" line="163"/>
+ <location filename="../rbutilqtfrm.ui" line="620"/>
<source>&amp;Installation</source>
<translation>&amp;Installation</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="168"/>
- <location filename="../rbutilqtfrm.ui" line="450"/>
+ <location filename="../rbutilqtfrm.ui" line="171"/>
+ <location filename="../rbutilqtfrm.ui" line="413"/>
<source>&amp;Accessibility</source>
<translation>&amp;Accessibilité</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="171"/>
+ <location filename="../rbutilqtfrm.ui" line="174"/>
<source>Install accessibility add-ons</source>
<translation>Installer des add-ons pour l&apos;accessibilité</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="177"/>
<source>Install Voice files</source>
- <translation>Installer des fichiers de voix</translation>
+ <translation type="vanished">Installer des fichiers de voix</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="204"/>
+ <location filename="../rbutilqtfrm.ui" line="180"/>
<source>Install Talk files</source>
<translation>Installer des fichiers de voix</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="458"/>
+ <location filename="../rbutilqtfrm.ui" line="420"/>
<source>&amp;Uninstallation</source>
<translation>&amp;Désinstallation</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="286"/>
- <location filename="../rbutilqtfrm.ui" line="319"/>
+ <location filename="../rbutilqtfrm.ui" line="262"/>
+ <location filename="../rbutilqtfrm.ui" line="295"/>
<source>Uninstall Rockbox</source>
<translation>Désinstaller Rockbox</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="121"/>
+ <location filename="../rbutilqtfrm.ui" line="149"/>
<source>mountpoint unknown or invalid</source>
<translation>point de montage inconnu ou invalide</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="114"/>
+ <location filename="../rbutilqtfrm.ui" line="142"/>
<source>Mountpoint:</source>
<translation>Point de montage:</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="72"/>
+ <location filename="../rbutilqtfrm.ui" line="100"/>
<source>device unknown or invalid</source>
<translation>périphérique inconnu ou invalide</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="65"/>
+ <location filename="../rbutilqtfrm.ui" line="93"/>
<source>Device:</source>
<translation>Périphérique:</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="292"/>
+ <location filename="../rbutilqtfrm.ui" line="268"/>
<source>Uninstall Bootloader</source>
<translation>Désinstaller le bootloader</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="393"/>
<source>&amp;Manual</source>
- <translation>&amp;Manuel</translation>
+ <translation type="vanished">&amp;Manuel</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="396"/>
<source>View and download the manual</source>
- <translation>Voir et télécharger le manuel</translation>
+ <translation type="vanished">Voir et télécharger le manuel</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="401"/>
+ <location filename="../rbutilqtfrm.ui" line="369"/>
<source>Inf&amp;o</source>
<translation>Inf&amp;o</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="419"/>
+ <location filename="../rbutilqtfrm.ui" line="387"/>
<source>&amp;File</source>
<translation>&amp;Fichier</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="432"/>
<source>&amp;Troubleshoot</source>
- <translation>&amp;Dépannage</translation>
+ <translation type="vanished">&amp;Dépannage</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="497"/>
+ <location filename="../rbutilqtfrm.ui" line="459"/>
<source>&amp;About</source>
<translation>&amp;A propos</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="653"/>
+ <location filename="../rbutilqtfrm.ui" line="615"/>
<source>System &amp;Trace</source>
<translation>&amp;Trace système</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="474"/>
+ <location filename="../rbutilqtfrm.ui" line="436"/>
<source>Empty local download cache</source>
<translation>Vider le cache local de téléchargement</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="479"/>
+ <location filename="../rbutilqtfrm.ui" line="441"/>
<source>Install Rockbox Utility on player</source>
<translation>Installer l&apos;utilitaire Rockbox sur le lecteur</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="484"/>
+ <location filename="../rbutilqtfrm.ui" line="446"/>
<source>&amp;Configure</source>
<translation>&amp;Configuration</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="489"/>
+ <location filename="../rbutilqtfrm.ui" line="451"/>
<source>E&amp;xit</source>
<translation>&amp;Quitter</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="492"/>
+ <location filename="../rbutilqtfrm.ui" line="454"/>
<source>Ctrl+Q</source>
<translation>Ctrl+Q</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="502"/>
+ <location filename="../rbutilqtfrm.ui" line="464"/>
<source>About &amp;Qt</source>
<translation>A propos de &amp;Qt</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="428"/>
- <location filename="../rbutilqtfrm.ui" line="507"/>
+ <location filename="../rbutilqtfrm.ui" line="396"/>
+ <location filename="../rbutilqtfrm.ui" line="469"/>
<source>&amp;Help</source>
<translation>&amp;Aide</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="446"/>
+ <location filename="../rbutilqtfrm.ui" line="43"/>
+ <source>Welcome to Rockbox Utility, the installation and housekeeping tool for Rockbox.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../rbutilqtfrm.ui" line="46"/>
+ <source>Rockbox Logo</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../rbutilqtfrm.ui" line="409"/>
<source>Action&amp;s</source>
<translation>Action&amp;s</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="512"/>
+ <location filename="../rbutilqtfrm.ui" line="474"/>
<source>Info</source>
<translation>Information</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="616"/>
+ <location filename="../rbutilqtfrm.ui" line="578"/>
<source>Read PDF manual</source>
<translation>Lire le manuel PDF</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="621"/>
+ <location filename="../rbutilqtfrm.ui" line="583"/>
<source>Read HTML manual</source>
<translation>Lire le manuel HTML</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="626"/>
+ <location filename="../rbutilqtfrm.ui" line="588"/>
<source>Download PDF manual</source>
<translation>Télécharger le manuel PDF</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="631"/>
+ <location filename="../rbutilqtfrm.ui" line="593"/>
<source>Download HTML manual (zip)</source>
<translation>Télécharger le manuel HTML (zip)</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="254"/>
+ <location filename="../rbutilqtfrm.ui" line="230"/>
<source>Create Voice files</source>
<translation>Créer des fichiers de voix</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="643"/>
+ <location filename="../rbutilqtfrm.ui" line="605"/>
<source>Create Voice File</source>
<translation>Créer un fichier de voix</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="194"/>
<source>&lt;b&gt;Install Voice file&lt;/b&gt;&lt;br/&gt;Voice files are needed to make Rockbox speak the user interface. Speaking is enabled by default, so if you installed the voice file Rockbox will speak.</source>
- <translation>&lt;b&gt;Installer le fichier de voix&lt;/b&gt;&lt;br/&gt;Celui-ci est requis pour que Rockbox parle. La synthèse vocale est activée par défaut, donc si vous installez le fichier de voix, Rockbox parlera.</translation>
+ <translation type="vanished">&lt;b&gt;Installer le fichier de voix&lt;/b&gt;&lt;br/&gt;Celui-ci est requis pour que Rockbox parle. La synthèse vocale est activée par défaut, donc si vous installez le fichier de voix, Rockbox parlera.</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="103"/>
+ <location filename="../rbutilqtfrm.ui" line="131"/>
<source>&amp;Eject</source>
<translation>&amp;Ejecter</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="221"/>
+ <location filename="../rbutilqtfrm.ui" line="197"/>
<source>&lt;b&gt;Create Talk Files&lt;/b&gt;&lt;br/&gt;Talkfiles are needed to let Rockbox speak File and Foldernames</source>
<translation>&lt;b&gt;Créer des fichiers d&apos;annonce&lt;/b&gt;&lt;br/&gt;Ceux-ci sont nécessaires pour que Rockbox énonce les noms des fichiers et des dossiers</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="271"/>
+ <location filename="../rbutilqtfrm.ui" line="247"/>
<source>&lt;b&gt;Create Voice file&lt;/b&gt;&lt;br/&gt;Voice files are needed to make Rockbox speak the user interface. Speaking is enabled by default, so
if you installed the voice file Rockbox will speak.</source>
<translation>&lt;b&gt;Créer le fichier de voix&lt;/b&gt;&lt;br/&gt;celui-ci est requis pour que Rockbox parle. La synthèse vocale est activée par défaut, donc si vous installez le fichier de voix, Rockbox parlera.</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="283"/>
+ <location filename="../rbutilqtfrm.ui" line="259"/>
<source>Backup &amp;&amp; &amp;Uninstallation</source>
<translation>Sauvegarde &amp;&amp; &amp;Désinstallation</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="309"/>
+ <location filename="../rbutilqtfrm.ui" line="285"/>
<source>&lt;b&gt;Remove the bootloader&lt;/b&gt;&lt;br/&gt;After removing the bootloader you won&apos;t be able to start Rockbox.</source>
<translation>&lt;b&gt;Désinstaller le bootloader&lt;/b&gt;&lt;br/&gt;Après avoir supprimé le bootloader, vous ne pourrez plus démarrer Rockbox.</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="336"/>
+ <location filename="../rbutilqtfrm.ui" line="312"/>
<source>&lt;b&gt;Uninstall Rockbox from your audio player.&lt;/b&gt;&lt;br/&gt;This will leave the bootloader in place (you need to remove it manually).</source>
<translation>&lt;b&gt;Désinstaller Rockbox de votre lecteur audio&lt;/b&gt;&lt;br/&gt;Ceci laissera le bootloader (vous devrez le supprimer manuellement).</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="349"/>
+ <location filename="../rbutilqtfrm.ui" line="325"/>
<source>Backup</source>
<translation>Sauvegarde</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="366"/>
+ <location filename="../rbutilqtfrm.ui" line="342"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Backup current installation.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Create a backup by archiving the contents of the Rockbox installation folder.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Sauvegarder l&apos;installation courante.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Créer une sauvegarde en archivant le contenu du dossier de Rockbox.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="539"/>
+ <location filename="../rbutilqtfrm.ui" line="501"/>
<source>Install &amp;Bootloader</source>
<translation>Installer le &amp;bootloader</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="548"/>
+ <location filename="../rbutilqtfrm.ui" line="510"/>
<source>Install &amp;Rockbox</source>
<translation>Installer &amp;Rockbox</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="557"/>
+ <location filename="../rbutilqtfrm.ui" line="519"/>
<source>Install &amp;Fonts Package</source>
<translation>Installer le pack des &amp;polices de caractères</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="566"/>
+ <location filename="../rbutilqtfrm.ui" line="528"/>
<source>Install &amp;Themes</source>
<translation>Installer des &amp;thèmes</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="575"/>
+ <location filename="../rbutilqtfrm.ui" line="537"/>
<source>Install &amp;Game Files</source>
<translation>Installer les fichiers de &amp;jeux</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="584"/>
+ <location filename="../rbutilqtfrm.ui" line="546"/>
<source>&amp;Install Voice File</source>
<translation>&amp;Installer le fichier de voix</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="593"/>
+ <location filename="../rbutilqtfrm.ui" line="555"/>
<source>Create &amp;Talk Files</source>
<translation>Créer les fichiers d&apos;&amp;annonce</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="602"/>
+ <location filename="../rbutilqtfrm.ui" line="564"/>
<source>Remove &amp;bootloader</source>
<translation>Désinstaller le &amp;bootloader</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="611"/>
+ <location filename="../rbutilqtfrm.ui" line="573"/>
<source>Uninstall &amp;Rockbox</source>
<translation>Désinstaller &amp;Rockbox</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="640"/>
+ <location filename="../rbutilqtfrm.ui" line="602"/>
<source>Create &amp;Voice File</source>
<translation>&amp;Créer le fichier de voix</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="648"/>
+ <location filename="../rbutilqtfrm.ui" line="610"/>
<source>&amp;System Info</source>
<translation>Informations &amp;système</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="663"/>
+ <location filename="../rbutilqtfrm.ui" line="625"/>
<source>Show &amp;Changelog</source>
<translation>Montrer l&apos;&amp;historique des modifications</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="521"/>
+ <location filename="../rbutilqtfrm.ui" line="483"/>
<source>&amp;Complete Installation</source>
<translation>Installation &amp;complète</translation>
</message>
<message>
- <location filename="../rbutilqtfrm.ui" line="530"/>
+ <location filename="../rbutilqtfrm.ui" line="492"/>
<source>&amp;Minimal Installation</source>
<translation>Installation &amp;minimale</translation>
</message>
@@ -2591,198 +2882,250 @@ Erreur réseau: %1. Veuillez vérifier vos paramètres réseau et proxy.</transl
<translation>&amp;Bootloader</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="80"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="151"/>
+ <source>Some plugins require additional data files.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="188"/>
+ <source>Install prerendered voice file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="195"/>
+ <source>Plugin Data</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="222"/>
+ <source>&amp;Manual</source>
+ <translation type="unfinished">&amp;Manuel</translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="233"/>
+ <source>&amp;Voice File</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="253"/>
<source>The main Rockbox firmware.</source>
<translation>Le logiciel principal de Rockbox.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="90"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="115"/>
<source>Fonts</source>
<translation>Polices</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="104"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="74"/>
<source>&amp;Rockbox</source>
<translation>&amp;Rockbox</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="124"/>
<source>Some game plugins require additional files.</source>
- <translation>Certains plugins de jeu nécessitent des fichiers additionnels.</translation>
+ <translation type="vanished">Certains plugins de jeu nécessitent des fichiers additionnels.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="140"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="178"/>
<source>Additional fonts for the User Interface.</source>
<translation>Polices additionnelles pour l&apos;interface utilisateur.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="156"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="135"/>
<source>The bootloader is required for starting Rockbox. Only necessary for first time install.</source>
<translation>Le bootloader est nécessaire pour démarrer Rockbox. Son installation n&apos;est nécessaire que lors de la première installation.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="166"/>
<source>Game Files</source>
- <translation>Fichiers de jeux</translation>
+ <translation type="vanished">Fichiers de jeux</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="177"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="161"/>
<source>Customize</source>
<translation>Personnaliser</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="188"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="104"/>
<source>Themes</source>
<translation>Thèmes</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="205"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="94"/>
<source>Themes allow adjusting the user interface of Rockbox. Use &quot;Customize&quot; to select themes.</source>
<translation>Les thèmes permettent de modifier l&apos;interface utilisateur de Rockbox. Utilisez &quot;Personnaliser&quot; pour sélectionner les thèmes.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidgetfrm.ui" line="250"/>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="263"/>
+ <source>Save a copy of the manual on the player.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidgetfrm.ui" line="292"/>
<source>&amp;Install</source>
<translation>&amp;Installer</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="67"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="78"/>
<source>This is the latest stable release available.</source>
<translation>Ceci est la dernière version stable de Rockbox disponible.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="70"/>
<source>The development version is updated on every code change. Last update was on %1</source>
- <translation>La version de dévelopment est mise à jour à chaque changement du code. La dernière mise à jour a eu lieu le %1</translation>
+ <translation type="vanished">La version de dévelopment est mise à jour à chaque changement du code. La dernière mise à jour a eu lieu le %1</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="74"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="88"/>
<source>This will eventually become the next Rockbox version. Install it to help testing.</source>
<translation>Cette version est vouée à devenir la prochaine version stable. Installez-là pour la tester.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="100"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="127"/>
<source>Stable Release (Version %1)</source>
<translation>Version stable (Version %1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="104"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="131"/>
<source>Development Version (Revison %1)</source>
<translation>Version de dévelopement (Révision %1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="108"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="129"/>
<source>Release Candidate (Revison %1)</source>
<translation>Version pré-stable (Révision %1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="131"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="83"/>
+ <source>The development version is updated on every code change.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="93"/>
+ <source>Daily updated development version.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="100"/>
+ <source>Not available for the selected version</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="130"/>
+ <source>Daily Build (%1)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="158"/>
<source>The selected player doesn&apos;t need a bootloader.</source>
<translation>Le lecteur audio sélectionné ne nécessite pas l&apos;installation d&apos;un bootloader.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="136"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="163"/>
<source>The bootloader is required for starting Rockbox. Installation of the bootloader is only necessary on first time installation.</source>
<translation>Le bootloader est nécessaire pour démarrer Rockbox. Son installation n&apos;est nécessaire que lors de la première installation.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="183"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="236"/>
<source>Mountpoint is wrong</source>
<translation>Le point de montage est erroné</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="239"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="294"/>
<source>No install method known.</source>
<translation>Aucune méthode d&apos;installation n&apos;est connue.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="266"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="319"/>
<source>Bootloader detected</source>
<translation>Le bootloader a été détecté</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="267"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="320"/>
<source>Bootloader already installed. Do you want to reinstall the bootloader?</source>
<translation>Le bootloader est déjà installé. Voulez-vous le réinstaller ?</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="271"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="324"/>
<source>Bootloader installation skipped</source>
<translation>Installation du bootloader ignorée</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="284"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="338"/>
<source>Create Bootloader backup</source>
<translation>Sauvegarde du bootloader</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="285"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="339"/>
<source>You can create a backup of the original bootloader file. Press &quot;Yes&quot; to select an output folder on your computer to save the file to. The file will get placed in a new folder &quot;%1&quot; created below the selected folder.
Press &quot;No&quot; to skip this step.</source>
<translation>Vous pouvez créer une sauvegarde du bootloader original. Appuyez sur &quot;Oui&quot; pour sélectionner un dossier de sortie sur votre ordinateur où le fichier sera enregistré. Le fichier sera placé dans un nouveau sous-dossier &quot;%1&quot; créé dans le dossier sélectionné. Appuyez sur &quot;Non&quot; pour ignorez cette étape.</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="292"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="346"/>
<source>Browse backup folder</source>
<translation>Parcourir le dossier de sauvegarde</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="304"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="358"/>
<source>Prerequisites</source>
<translation>Prérequis</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="309"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="363"/>
<source>Bootloader installation aborted</source>
<translation>Installation du bootloader annulée</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="319"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="373"/>
<source>Bootloader files (%1)</source>
<translation>Fichiers du bootloader (%1)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="321"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="375"/>
<source>All files (*)</source>
<translation>Tous les fichiers (*)</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="323"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="377"/>
<source>Select firmware file</source>
<translation>Sélectionnez le fichier firmware</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="325"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="379"/>
<source>Error opening firmware file</source>
<translation>Impossible d&apos;ouvrir le fichier firmware</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="331"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="385"/>
<source>Error reading firmware file</source>
<translation>Impossible de lire le fichier firmware</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="341"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="395"/>
<source>Backup error</source>
<translation>Erreur de la sauvegarde</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="342"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="396"/>
<source>Could not create backup file. Continue?</source>
<translation>Impossible de créer une sauvegarde. Voulez-vous poursuivre ?</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="366"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="420"/>
<source>Manual steps required</source>
<translation>Des étapes manuelles sont nécessaires</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="171"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="641"/>
+ <source>Your installation doesn&apos;t require any plugin data files, skipping.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="224"/>
<source>Continue with installation?</source>
<translation>Continuer l&apos;installation ?</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="172"/>
+ <location filename="../gui/selectiveinstallwidget.cpp" line="225"/>
<source>Really continue?</source>
<translation>Êtes vous sûr de vouloir poursuivre ?</translation>
</message>
@@ -2791,39 +3134,34 @@ Press &quot;No&quot; to skip this step.</source>
<translation type="obsolete">Annulé !</translation>
</message>
<message>
- <location filename="../gui/selectiveinstallwidget.cpp" line="490"/>
<source>Your installation doesn&apos;t require game files, skipping.</source>
- <translation>Votre installation ne nécessite pas de fichier de jeu, étape ignorée.</translation>
+ <translation type="vanished">Votre installation ne nécessite pas de fichier de jeu, étape ignorée.</translation>
</message>
</context>
<context>
<name>ServerInfo</name>
<message>
- <location filename="../base/serverinfo.cpp" line="117"/>
<source>Unknown</source>
- <translation>Inconnu</translation>
+ <translation type="vanished">Inconnu</translation>
</message>
<message>
- <location filename="../base/serverinfo.cpp" line="121"/>
<source>Unusable</source>
- <translation>Inutilisable</translation>
+ <translation type="vanished">Inutilisable</translation>
</message>
<message>
- <location filename="../base/serverinfo.cpp" line="124"/>
<source>Unstable</source>
- <translation>Instable</translation>
+ <translation type="vanished">Instable</translation>
</message>
<message>
- <location filename="../base/serverinfo.cpp" line="127"/>
<source>Stable</source>
- <translation>Stable</translation>
+ <translation type="vanished">Stable</translation>
</message>
</context>
<context>
<name>SysTrace</name>
<message>
- <location filename="../systrace.cpp" line="98"/>
- <location filename="../systrace.cpp" line="107"/>
+ <location filename="../systrace.cpp" line="100"/>
+ <location filename="../systrace.cpp" line="109"/>
<source>Save system trace log</source>
<translation>Sauvegarde de la trace système</translation>
</message>
@@ -2864,62 +3202,66 @@ Press &quot;No&quot; to skip this step.</source>
<context>
<name>Sysinfo</name>
<message>
- <location filename="../sysinfo.cpp" line="45"/>
+ <location filename="../sysinfo.cpp" line="46"/>
<source>&lt;b&gt;OS&lt;/b&gt;&lt;br/&gt;</source>
<translation>&lt;b&gt;Système d&apos;exploitation&lt;/b&gt;&lt;br/&gt;</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="46"/>
+ <location filename="../sysinfo.cpp" line="47"/>
<source>&lt;b&gt;Username&lt;/b&gt;&lt;br/&gt;%1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Nom d&apos;utilisateur&lt;/b&gt;&lt;br/&gt;%1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="48"/>
+ <location filename="../sysinfo.cpp" line="49"/>
<source>&lt;b&gt;Permissions&lt;/b&gt;&lt;br/&gt;%1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Permissions&lt;/b&gt;&lt;br/&gt;%1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="50"/>
+ <location filename="../sysinfo.cpp" line="51"/>
<source>&lt;b&gt;Attached USB devices&lt;/b&gt;&lt;br/&gt;</source>
<translation>&lt;b&gt;Périphériques USB branchés&lt;/b&gt;&lt;br/&gt;</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="54"/>
+ <location filename="../sysinfo.cpp" line="55"/>
<source>VID: %1 PID: %2, %3</source>
<translation>VID: %1 PID: %2, %3</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="63"/>
+ <location filename="../sysinfo.cpp" line="64"/>
<source>Filesystem</source>
<translation>Fichier système</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="66"/>
+ <location filename="../sysinfo.cpp" line="67"/>
<source>Mountpoint</source>
<translation>Point de montage</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="66"/>
+ <location filename="../sysinfo.cpp" line="67"/>
<source>Label</source>
<translation>Libellé</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="67"/>
+ <location filename="../sysinfo.cpp" line="68"/>
<source>Free</source>
<translation>Libre</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="67"/>
+ <location filename="../sysinfo.cpp" line="68"/>
<source>Total</source>
<translation>Total</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="68"/>
+ <location filename="../sysinfo.cpp" line="69"/>
+ <source>Type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Cluster Size</source>
- <translation>Taille des clusters</translation>
+ <translation type="vanished">Taille des clusters</translation>
</message>
<message>
- <location filename="../sysinfo.cpp" line="70"/>
+ <location filename="../sysinfo.cpp" line="71"/>
<source>&lt;tr&gt;&lt;td&gt;%1&lt;/td&gt;&lt;td&gt;%4&lt;/td&gt;&lt;td&gt;%2 GiB&lt;/td&gt;&lt;td&gt;%3 GiB&lt;/td&gt;&lt;td&gt;%5&lt;/td&gt;&lt;/tr&gt;</source>
<translation>&lt;tr&gt;&lt;td&gt;%1&lt;/td&gt;&lt;td&gt;%4&lt;/td&gt;&lt;td&gt;%2 Gio&lt;/td&gt;&lt;td&gt;%3 Gio&lt;/td&gt;&lt;td&gt;%5&lt;/td&gt;&lt;/tr&gt;</translation>
</message>
@@ -2937,7 +3279,7 @@ Press &quot;No&quot; to skip this step.</source>
<translation>&amp;Rafraîchir</translation>
</message>
<message>
- <location filename="../sysinfofrm.ui" line="45"/>
+ <location filename="../sysinfofrm.ui" line="46"/>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
</message>
@@ -2945,28 +3287,27 @@ Press &quot;No&quot; to skip this step.</source>
<context>
<name>System</name>
<message>
- <location filename="../base/system.cpp" line="121"/>
+ <location filename="../base/system.cpp" line="117"/>
<source>Guest</source>
<translation>Invité</translation>
</message>
<message>
- <location filename="../base/system.cpp" line="124"/>
+ <location filename="../base/system.cpp" line="120"/>
<source>Admin</source>
<translation>Administrateur</translation>
</message>
<message>
- <location filename="../base/system.cpp" line="127"/>
+ <location filename="../base/system.cpp" line="123"/>
<source>User</source>
<translation>Utilisateur</translation>
</message>
<message>
- <location filename="../base/system.cpp" line="130"/>
+ <location filename="../base/system.cpp" line="126"/>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
- <location filename="../base/system.cpp" line="278"/>
- <location filename="../base/system.cpp" line="323"/>
+ <location filename="../base/system.cpp" line="273"/>
<source>(no description available)</source>
<translation>(aucune description disponible)</translation>
</message>
@@ -2974,32 +3315,42 @@ Press &quot;No&quot; to skip this step.</source>
<context>
<name>TTSBase</name>
<message>
- <location filename="../base/ttsbase.cpp" line="45"/>
+ <location filename="../base/ttsbase.cpp" line="47"/>
<source>Espeak TTS Engine</source>
<translation>Synthèse vocale basée sur Espeak</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="47"/>
+ <location filename="../base/ttsbase.cpp" line="48"/>
+ <source>Espeak-ng TTS Engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/ttsbase.cpp" line="49"/>
+ <source>Mimic TTS Engine</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/ttsbase.cpp" line="51"/>
<source>Flite TTS Engine</source>
<translation>Synthèse vocale basée sur Flite</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="48"/>
+ <location filename="../base/ttsbase.cpp" line="52"/>
<source>Swift TTS Engine</source>
<translation>Synthèse vocale basée sur Swift</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="51"/>
+ <location filename="../base/ttsbase.cpp" line="55"/>
<source>SAPI4 TTS Engine</source>
<translation>Moteur TTS SAPI4</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="53"/>
+ <location filename="../base/ttsbase.cpp" line="57"/>
<source>SAPI5 TTS Engine</source>
<translation>Moteur TTS SAPI5</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="54"/>
+ <location filename="../base/ttsbase.cpp" line="58"/>
<source>MS Speech Platform</source>
<translation>Plateforme MS Speech</translation>
</message>
@@ -3008,12 +3359,12 @@ Press &quot;No&quot; to skip this step.</source>
<translation type="obsolete">Synthèse vocale basée sur SAPI</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="57"/>
+ <location filename="../base/ttsbase.cpp" line="61"/>
<source>Festival TTS Engine</source>
<translation>Synthèse vocale basée sur Festival</translation>
</message>
<message>
- <location filename="../base/ttsbase.cpp" line="60"/>
+ <location filename="../base/ttsbase.cpp" line="64"/>
<source>OS X System Engine</source>
<translation>Synthèse vocale basée sur le système OS X</translation>
</message>
@@ -3087,40 +3438,45 @@ Press &quot;No&quot; to skip this step.</source>
<translation>Voix:</translation>
</message>
<message>
- <location filename="../base/ttsfestival.cpp" line="67"/>
+ <location filename="../base/ttsfestival.cpp" line="69"/>
<source>Voice description:</source>
<translation>Description de la voix:</translation>
</message>
+ <message>
+ <location filename="../base/ttsfestival.cpp" line="173"/>
+ <source>Festival could not be started</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>TTSSapi</name>
<message>
- <location filename="../base/ttssapi.cpp" line="49"/>
+ <location filename="../base/ttssapi.cpp" line="46"/>
<source>Language:</source>
<translation>Langue:</translation>
</message>
<message>
- <location filename="../base/ttssapi.cpp" line="56"/>
+ <location filename="../base/ttssapi.cpp" line="53"/>
<source>Voice:</source>
<translation>Voix:</translation>
</message>
<message>
- <location filename="../base/ttssapi.cpp" line="68"/>
+ <location filename="../base/ttssapi.cpp" line="65"/>
<source>Speed:</source>
<translation>Vitesse:</translation>
</message>
<message>
- <location filename="../base/ttssapi.cpp" line="71"/>
+ <location filename="../base/ttssapi.cpp" line="68"/>
<source>Options:</source>
<translation>Options:</translation>
</message>
<message>
- <location filename="../base/ttssapi.cpp" line="115"/>
+ <location filename="../base/ttssapi.cpp" line="112"/>
<source>Could not copy the SAPI script</source>
<translation>Impossible de copy the script SAPI</translation>
</message>
<message>
- <location filename="../base/ttssapi.cpp" line="133"/>
+ <location filename="../base/ttssapi.cpp" line="130"/>
<source>Could not start SAPI process</source>
<translation>Impossible lancer le processus SAPI</translation>
</message>
@@ -3128,22 +3484,22 @@ Press &quot;No&quot; to skip this step.</source>
<context>
<name>TalkFileCreator</name>
<message>
- <location filename="../base/talkfile.cpp" line="68"/>
+ <location filename="../base/talkfile.cpp" line="66"/>
<source>Copying Talkfiles...</source>
<translation>Copie des fichiers d&apos;annonce...</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="240"/>
+ <location filename="../base/talkfile.cpp" line="242"/>
<source>File copy aborted</source>
<translation>Copie du fichier annulée</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="280"/>
+ <location filename="../base/talkfile.cpp" line="283"/>
<source>Cleaning up...</source>
<translation>Nettoyage...</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="291"/>
+ <location filename="../base/talkfile.cpp" line="294"/>
<source>Finished</source>
<translation>Terminé</translation>
</message>
@@ -3158,7 +3514,7 @@ Press &quot;No&quot; to skip this step.</source>
<translation>Début de la génération des fichiers de voix pour le dossier %1</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="80"/>
+ <location filename="../base/talkfile.cpp" line="78"/>
<source>Finished creating Talk files</source>
<translation>Création des fichiers d&apos;annonce terminée</translation>
</message>
@@ -3168,7 +3524,7 @@ Press &quot;No&quot; to skip this step.</source>
<translation>Lecture de la liste des fichiers...</translation>
</message>
<message>
- <location filename="../base/talkfile.cpp" line="259"/>
+ <location filename="../base/talkfile.cpp" line="261"/>
<source>Copying of %1 to %2 failed</source>
<translation>La copie de %1 vers %2 a échoué</translation>
</message>
@@ -3176,18 +3532,18 @@ Press &quot;No&quot; to skip this step.</source>
<context>
<name>TalkGenerator</name>
<message>
- <location filename="../base/talkgenerator.cpp" line="39"/>
+ <location filename="../base/talkgenerator.cpp" line="38"/>
<source>Starting TTS Engine</source>
<translation>Démarrage du moteur TTS</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="44"/>
- <location filename="../base/talkgenerator.cpp" line="51"/>
+ <location filename="../base/talkgenerator.cpp" line="43"/>
+ <location filename="../base/talkgenerator.cpp" line="50"/>
<source>Init of TTS engine failed</source>
<translation>L&apos;initialisation du moteur TTS a échoué</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="58"/>
+ <location filename="../base/talkgenerator.cpp" line="57"/>
<source>Starting Encoder Engine</source>
<translation>Démarrage du moteur d&apos;encodage</translation>
</message>
@@ -3212,18 +3568,18 @@ Press &quot;No&quot; to skip this step.</source>
<translation>Synthèse vocale annulée</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="162"/>
- <location filename="../base/talkgenerator.cpp" line="167"/>
+ <location filename="../base/talkgenerator.cpp" line="163"/>
+ <location filename="../base/talkgenerator.cpp" line="168"/>
<source>Voicing of %1 failed: %2</source>
<translation>La synthèse vocale de %1 a échoué: %2</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="211"/>
+ <location filename="../base/talkgenerator.cpp" line="212"/>
<source>Encoding aborted</source>
<translation>Encodage interrompu</translation>
</message>
<message>
- <location filename="../base/talkgenerator.cpp" line="239"/>
+ <location filename="../base/talkgenerator.cpp" line="240"/>
<source>Encoding of %1 failed</source>
<translation>L&apos;encodage de %1 a échoué</translation>
</message>
@@ -3251,7 +3607,7 @@ Press &quot;No&quot; to skip this step.</source>
<translation>Taille du téléchargement:</translation>
</message>
<message>
- <location filename="../themesinstallfrm.ui" line="125"/>
+ <location filename="../themesinstallfrm.ui" line="126"/>
<source>&amp;Cancel</source>
<translation>&amp;Annuler</translation>
</message>
@@ -3269,97 +3625,97 @@ Press &quot;No&quot; to skip this step.</source>
<context>
<name>ThemesInstallWindow</name>
<message>
- <location filename="../themesinstallwindow.cpp" line="40"/>
+ <location filename="../themesinstallwindow.cpp" line="41"/>
<source>no theme selected</source>
<translation>pas de thème sélectionné</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="125"/>
+ <location filename="../themesinstallwindow.cpp" line="122"/>
<source>Network error: %1.
Please check your network and proxy settings.</source>
<translation>Erreur réseau: %1.
Veuillez vérifier vos paramètres réseau et proxy.</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="138"/>
+ <location filename="../themesinstallwindow.cpp" line="135"/>
<source>the following error occured:
%1</source>
<translation>L&apos;erreur suivante s&apos;est produite :
%1</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="144"/>
+ <location filename="../themesinstallwindow.cpp" line="141"/>
<source>done.</source>
<translation>terminé.</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="211"/>
+ <location filename="../themesinstallwindow.cpp" line="214"/>
<source>fetching details for %1</source>
<translation>récupération des détails pour %1</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="214"/>
+ <location filename="../themesinstallwindow.cpp" line="217"/>
<source>fetching preview ...</source>
<translation>récupération de l&apos;aperçu ...</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="227"/>
+ <location filename="../themesinstallwindow.cpp" line="230"/>
<source>&lt;b&gt;Author:&lt;/b&gt; %1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Auteur:&lt;/b&gt; %1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="228"/>
- <location filename="../themesinstallwindow.cpp" line="230"/>
+ <location filename="../themesinstallwindow.cpp" line="231"/>
+ <location filename="../themesinstallwindow.cpp" line="233"/>
<source>unknown</source>
<translation>inconnu</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="229"/>
+ <location filename="../themesinstallwindow.cpp" line="232"/>
<source>&lt;b&gt;Version:&lt;/b&gt; %1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Version:&lt;/b&gt; %1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="231"/>
+ <location filename="../themesinstallwindow.cpp" line="234"/>
<source>&lt;b&gt;Description:&lt;/b&gt; %1&lt;hr/&gt;</source>
<translation>&lt;b&gt;Description:&lt;/b&gt; %1&lt;hr/&gt;</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="232"/>
+ <location filename="../themesinstallwindow.cpp" line="235"/>
<source>no description</source>
<translation>pas de description</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="260"/>
+ <location filename="../themesinstallwindow.cpp" line="262"/>
<source>no theme preview</source>
<translation>pas d&apos;aperçu du thème</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="289"/>
+ <location filename="../themesinstallwindow.cpp" line="290"/>
<source>Select</source>
<translation>Sélectionner</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="296"/>
+ <location filename="../themesinstallwindow.cpp" line="297"/>
<source>getting themes information ...</source>
<translation>récupération des informations sur le thème ...</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="326"/>
+ <location filename="../themesinstallwindow.cpp" line="325"/>
<source>No themes selected, skipping</source>
<translation>Aucun thème sélectionné, étape ignorée</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="356"/>
+ <location filename="../themesinstallwindow.cpp" line="354"/>
<source>Mount point is wrong!</source>
<translation>Le point de montage est incorrect !</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="41"/>
+ <location filename="../themesinstallwindow.cpp" line="42"/>
<source>no selection</source>
<translation>Aucune sélection</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="181"/>
+ <location filename="../themesinstallwindow.cpp" line="178"/>
<source>Information</source>
<translation>Informations</translation>
</message>
@@ -3372,7 +3728,7 @@ Veuillez vérifier vos paramètres réseau et proxy.</translation>
</translation>
</message>
<message>
- <location filename="../themesinstallwindow.cpp" line="248"/>
+ <location filename="../themesinstallwindow.cpp" line="251"/>
<source>Retrieving theme preview failed.
HTTP response code: %1</source>
<translation>La récupération d&apos;un aperçu du thème a échoué.
@@ -3417,7 +3773,7 @@ Code de réponse HHTP: %1</translation>
<translation>Composants installés</translation>
</message>
<message>
- <location filename="../uninstallfrm.ui" line="138"/>
+ <location filename="../uninstallfrm.ui" line="139"/>
<source>&amp;Cancel</source>
<translation>&amp;Annuler</translation>
</message>
@@ -3446,12 +3802,12 @@ Code de réponse HHTP: %1</translation>
<translation>Suppression de %1...</translation>
</message>
<message>
- <location filename="../base/uninstall.cpp" line="80"/>
+ <location filename="../base/uninstall.cpp" line="81"/>
<source>Could not delete %1</source>
<translation>Impossible de supprimer %1</translation>
</message>
<message>
- <location filename="../base/uninstall.cpp" line="109"/>
+ <location filename="../base/uninstall.cpp" line="115"/>
<source>Uninstallation finished</source>
<translation>Désinstallation terminée</translation>
</message>
@@ -3459,19 +3815,19 @@ Code de réponse HHTP: %1</translation>
<context>
<name>Utils</name>
<message>
- <location filename="../base/utils.cpp" line="312"/>
+ <location filename="../base/utils.cpp" line="375"/>
<source>&lt;li&gt;Permissions insufficient for bootloader installation.
Administrator priviledges are necessary.&lt;/li&gt;</source>
<translation>&lt;li&gt;Permissions insuffisantes pour l&apos;installation du bootloader.
Les privilèges administrateur sont requis.&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/utils.cpp" line="324"/>
+ <location filename="../base/utils.cpp" line="387"/>
<source>&lt;li&gt;Target mismatch detected.&lt;br/&gt;Installed target: %1&lt;br/&gt;Selected target: %2.&lt;/li&gt;</source>
<translation>&lt;li&gt;Incompatibilité de modèles détectée. &lt;br/&gt;Modèle installé: %1&lt;br/&gt;Modèle sélectionné: %2&lt;/li&gt;</translation>
</message>
<message>
- <location filename="../base/utils.cpp" line="331"/>
+ <location filename="../base/utils.cpp" line="396"/>
<source>Problem detected:</source>
<translation>Problème détecté:</translation>
</message>
@@ -3499,72 +3855,72 @@ Les privilèges administrateur sont requis.&lt;/li&gt;</translation>
<translation>Impossible d&apos;extraire les fichiers de voix depuis l&apos;installation, téléchargement</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="171"/>
+ <location filename="../base/voicefile.cpp" line="172"/>
<source>Downloading voice info...</source>
<translation>Téléchargement des informations d&apos;annonces...</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="184"/>
+ <location filename="../base/voicefile.cpp" line="185"/>
<source>Download error: received HTTP error %1.</source>
<translation>Erreur de téléchargement: Erreur HTTP %1.</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="191"/>
+ <location filename="../base/voicefile.cpp" line="192"/>
<source>Cached file used.</source>
<translation>Fichier en cache utilisé.</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="194"/>
+ <location filename="../base/voicefile.cpp" line="195"/>
<source>Download error: %1</source>
<translation>Erreur de téléchargement: %1</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="199"/>
+ <location filename="../base/voicefile.cpp" line="200"/>
<source>Download finished.</source>
<translation>Téléchargement terminé.</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="212"/>
+ <location filename="../base/voicefile.cpp" line="213"/>
<source>failed to open downloaded file</source>
<translation>Impossible d&apos;ouvrir le fichier téléchargé</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="218"/>
+ <location filename="../base/voicefile.cpp" line="219"/>
<source>Reading strings...</source>
<translation>Lecture des phrases...</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="297"/>
+ <location filename="../base/voicefile.cpp" line="302"/>
<source>Creating voicefiles...</source>
<translation>Création des fichiers de voix...</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="342"/>
+ <location filename="../base/voicefile.cpp" line="347"/>
<source>Cleaning up...</source>
<translation>Nettoyage...</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="353"/>
+ <location filename="../base/voicefile.cpp" line="358"/>
<source>Finished</source>
<translation>Terminé</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="271"/>
+ <location filename="../base/voicefile.cpp" line="276"/>
<source>The downloaded file was empty!</source>
<translation>Le fichier téléchargé est vide !</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="302"/>
+ <location filename="../base/voicefile.cpp" line="307"/>
<source>Error opening downloaded file</source>
<translation>Erreur lors de l&apos;ouverture du fichier téléchargé</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="313"/>
+ <location filename="../base/voicefile.cpp" line="318"/>
<source>Error opening output file</source>
<translation>Erreur lors de l&apos;ouverture du fichier de sortie</translation>
</message>
<message>
- <location filename="../base/voicefile.cpp" line="333"/>
+ <location filename="../base/voicefile.cpp" line="338"/>
<source>successfully created.</source>
<translation>Créé avec succès.</translation>
</message>
@@ -3577,67 +3933,77 @@ Les privilèges administrateur sont requis.&lt;/li&gt;</translation>
<context>
<name>ZipInstaller</name>
<message>
- <location filename="../base/zipinstaller.cpp" line="60"/>
+ <location filename="../base/zipinstaller.cpp" line="59"/>
<source>done.</source>
<translation>terminé.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="68"/>
+ <location filename="../base/zipinstaller.cpp" line="67"/>
<source>Package installation finished successfully.</source>
<translation>Le paquet a été installé avec succès.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="80"/>
+ <location filename="../base/zipinstaller.cpp" line="78"/>
<source>Downloading file %1.%2</source>
<translation>Téléchargement du fichier %1.%2</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="115"/>
<source>Download error: received HTTP error %1.</source>
- <translation>Erreur de téléchargement: Erreur HTTP %1.</translation>
+ <translation type="vanished">Erreur de téléchargement: Erreur HTTP %1.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="121"/>
<source>Cached file used.</source>
- <translation>Fichier en cache utilisé.</translation>
+ <translation type="vanished">Fichier en cache utilisé.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="123"/>
+ <location filename="../base/zipinstaller.cpp" line="113"/>
+ <source>Download error: received HTTP error %1
+%2</source>
+ <translation type="unfinished">Erreur de téléchargement: Erreur HTTP %1. {1
+%2?}</translation>
+ </message>
+ <message>
+ <location filename="../base/zipinstaller.cpp" line="120"/>
<source>Download error: %1</source>
<translation>Erreur de téléchargement: %1</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="127"/>
+ <location filename="../base/zipinstaller.cpp" line="125"/>
+ <source>Download finished (cache used).</source>
+ <translation type="unfinished">Téléchargement terminé (la version du cache a été utilisée).</translation>
+ </message>
+ <message>
+ <location filename="../base/zipinstaller.cpp" line="128"/>
<source>Download finished.</source>
<translation>Téléchargement terminé.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="133"/>
+ <location filename="../base/zipinstaller.cpp" line="135"/>
<source>Extracting file.</source>
<translation>Extraction du fichier.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="153"/>
+ <location filename="../base/zipinstaller.cpp" line="156"/>
<source>Extraction failed!</source>
<translation>L&apos;extraction a échoué !</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="162"/>
+ <location filename="../base/zipinstaller.cpp" line="168"/>
<source>Installing file.</source>
<translation>Installation du fichier.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="173"/>
+ <location filename="../base/zipinstaller.cpp" line="180"/>
<source>Installing file failed.</source>
<translation>L&apos;installation du fichier a échoué.</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="186"/>
+ <location filename="../base/zipinstaller.cpp" line="193"/>
<source>Creating installation log</source>
<translation>Création du journal d&apos;installation</translation>
</message>
<message>
- <location filename="../base/zipinstaller.cpp" line="146"/>
+ <location filename="../base/zipinstaller.cpp" line="149"/>
<source>Not enough disk space! Aborting.</source>
<translation>Espace disque insuffisant ! Abandon.</translation>
</message>
@@ -3672,7 +4038,7 @@ Les privilèges administrateur sont requis.&lt;/li&gt;</translation>
<source>The Rockbox Utility</source>
<translation>L&apos;utilitaire Rockbox</translation>
</message>
- <message utf8="true">
+ <message>
<location filename="../aboutbox.ui" line="54"/>
<source>Installer and housekeeping utility for the Rockbox open source digital audio player firmware.&lt;br/&gt;© The Rockbox Team.&lt;br/&gt;Released under the GNU General Public License v2.&lt;br/&gt;Uses icons by the &lt;a href=&quot;http://tango.freedesktop.org/&quot;&gt;Tango Project&lt;/a&gt;.&lt;br/&gt;&lt;center&gt;&lt;a href=&quot;http://www.rockbox.org&quot;&gt;http://www.rockbox.org&lt;/a&gt;&lt;/center&gt;</source>
<translation>Installeur et utilitaire d&apos;entretien du firmware libre pour lecteurs audio Rockbox.&lt;br/&gt;© L&apos;équipe Rockbox.&lt;br/&gt;Publié sous Licence Publique Générale GNU GPL v2.&lt;br/&gt;Icônes utilisées grâce au &lt;a href=&quot;http://tango.freedesktop.org/&quot;&gt;Tango Project&lt;/a&gt;.&lt;br/&gt;&lt;center&gt;&lt;a href=&quot;http://www.rockbox.org&quot;&gt;http://www.rockbox.org&lt;/a&gt;&lt;/center&gt;</translation>
@@ -3689,8 +4055,12 @@ Les privilèges administrateur sont requis.&lt;/li&gt;</translation>
</message>
<message>
<location filename="../aboutbox.ui" line="132"/>
+ <source>L&amp;ibraries</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>&amp;Speex License</source>
- <translation>Licence de &amp;Speex</translation>
+ <translation type="vanished">Licence de &amp;Speex</translation>
</message>
<message>
<location filename="../aboutbox.ui" line="158"/>
diff --git a/utils/rbutilqt/lang/rbutil_gr.ts b/utils/rbutilqt/lang/rbutil_gr.ts
index bfa600954b..6f50ad665e 100644
--- a/utils/rbutilqt/lang/rbutil_gr.ts
+++ b/utils/rbutilqt/lang/rbutil_gr.ts
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.0" language="el_GR">
+<TS version="2.1" language="el_GR">
<context>
<name>BackupDialog</name>
<message>
@@ -40,42 +40,42 @@
<translation type="unfinished">Ά&amp;κυρο</translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="70"/>
+ <location filename="../gui/backupdialog.cpp" line="69"/>
<source>Installation size: calculating ...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="89"/>
+ <location filename="../gui/backupdialog.cpp" line="88"/>
<source>Select Backup Filename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="109"/>
+ <location filename="../gui/backupdialog.cpp" line="108"/>
<source>Installation size: %L1 %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="116"/>
+ <location filename="../gui/backupdialog.cpp" line="115"/>
<source>File exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="117"/>
+ <location filename="../gui/backupdialog.cpp" line="116"/>
<source>The selected backup file already exists. Overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="125"/>
+ <location filename="../gui/backupdialog.cpp" line="124"/>
<source>Starting backup ...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="144"/>
+ <location filename="../gui/backupdialog.cpp" line="143"/>
<source>Backup successful.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../gui/backupdialog.cpp" line="147"/>
+ <location filename="../gui/backupdialog.cpp" line="146"/>
<source>Backup failed!</source>
<translation type="unfinished">Αποτυχία αντίγραφου ασφάλειας!</translation>
</message>
@@ -130,94 +130,142 @@
</message>
</context>
<context>
+ <name>BootloaderInstallBSPatch</name>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="65"/>
+ <source>Bootloader installation requires you to provide the correct verrsion of the original firmware file. This file will be patched with the Rockbox bootloader and installed to your player. You need to download this file yourself due to legal reasons. Please refer to the &lt;a href=&apos;http://www.rockbox.org/wiki/&apos;&gt;rockbox wiki&lt;/a&gt; pages on how to obtain this file.&lt;br/&gt;Press Ok to continue and browse your computer for the firmware file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="84"/>
+ <source>Could not read original firmware file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="90"/>
+ <source>Downloading bootloader file</source>
+ <translation type="unfinished">Λήψη αρχείου bootloader</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="99"/>
+ <source>Patching file...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="124"/>
+ <source>Patching the original firmware failed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="130"/>
+ <source>Succesfully patched firmware file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="145"/>
+ <source>Bootloader successful installed</source>
+ <translation type="unfinished">Η εγκατάσταση του Rockbox bootloader ολοκληρώθηκε με επιτυχία.</translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="151"/>
+ <source>Patched bootloader could not be installed</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../base/bootloaderinstallbspatch.cpp" line="161"/>
+ <source>To uninstall, perform a normal upgrade with an unmodified original firmware.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>BootloaderInstallBase</name>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="78"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="69"/>
<source>Download error: received HTTP error %1.</source>
<translation>Σφάλμα λήψης: σφάλμα HTTP %1.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="84"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="75"/>
<source>Download error: %1</source>
<translation>Σφάλμα λήψης: %1</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="90"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="81"/>
<source>Download finished (cache used).</source>
<translation>Η λήψη ολοκληρώθηκε (χρήση προσωρινής μνήμης λήψεων).</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="92"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="83"/>
<source>Download finished.</source>
<translation>Η λήψη ολοκληρώθηκε.</translation>
</message>
<message>
- <location filename="../base/bootloaderinstallbase.cpp" line="113"/>
+ <location filename="../base/bootloaderinstallbase.cpp" line="112"/>