From 5077e0d5e1448f7a225c0a1c886ce0b3c445515a Mon Sep 17 00:00:00 2001 From: Peter Marheine Date: Thu, 23 May 2019 10:34:57 +1000 Subject: [PATCH 1/7] Short circuit RangeOutputStream for open ranges There's no reason to wrap a stream in an output that will do nothing, as when the requested range is 0-; eg the entire stream. --- .../main/java/org/airsonic/player/io/RangeOutputStream.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/airsonic-main/src/main/java/org/airsonic/player/io/RangeOutputStream.java b/airsonic-main/src/main/java/org/airsonic/player/io/RangeOutputStream.java index 8c9c6ee6..cdb3ac9a 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/io/RangeOutputStream.java +++ b/airsonic-main/src/main/java/org/airsonic/player/io/RangeOutputStream.java @@ -55,7 +55,8 @@ public class RangeOutputStream extends FilterOutputStream { * @return The possibly wrapped output stream. */ public static OutputStream wrap(OutputStream out, HttpRange range) { - if (range == null) { + // Skip filtering if there's no range or it represents the entire stream. + if (range == null || (range.getFirstBytePos() == 0 && !range.isClosed())) { return out; } return new RangeOutputStream(out, range); From d42af4575f9b7159e83fbd1c440cbef0d8a81880 Mon Sep 17 00:00:00 2001 From: Peter Marheine Date: Thu, 23 May 2019 10:37:35 +1000 Subject: [PATCH 2/7] Add some @Nullable annotations Making it easier to tell where API contracts allow nulls, where it's otherwise unclear without reading the implementation. --- airsonic-main/pom.xml | 6 ++++++ .../org/airsonic/player/controller/StreamController.java | 3 +++ 2 files changed, 9 insertions(+) diff --git a/airsonic-main/pom.xml b/airsonic-main/pom.xml index acf07efd..d50db52b 100755 --- a/airsonic-main/pom.xml +++ b/airsonic-main/pom.xml @@ -184,6 +184,12 @@ commons-lang3 + + com.google.code.findbugs + jsr305 + 3.0.2 + + com.google.guava guava diff --git a/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java b/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java index d02d076c..aa4e476c 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java +++ b/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java @@ -41,6 +41,7 @@ import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import javax.annotation.Nullable; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -314,6 +315,7 @@ public class StreamController { return duration * (long)maxBitRate * 1000L / 8L; } + @Nullable private HttpRange getRange(HttpServletRequest request, MediaFile file) { // First, look for "Range" HTTP header. @@ -332,6 +334,7 @@ public class StreamController { return null; } + @Nullable private HttpRange parseAndConvertOffsetSeconds(String offsetSeconds, MediaFile file) { if (offsetSeconds == null) { return null; From cae8f8b4e535c656688c322ca4ea98982dcef32d Mon Sep 17 00:00:00 2001 From: Peter Marheine Date: Thu, 23 May 2019 10:43:51 +1000 Subject: [PATCH 3/7] Reformat stream controller some Mostly just whitespace changes, shortening lines for readability. Adds a few comments that outline what's supposed to happen. --- .../player/controller/StreamController.java | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java b/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java index aa4e476c..db69b777 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java +++ b/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java @@ -53,14 +53,13 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * A controller which streams the content of a {@link PlayQueue} to a remote - * {@link Player}. + * A controller which streams the content of a {@link PlayQueue} to a remote {@link Player}. * * @author Sindre Mehus */ @Controller @RequestMapping(value = {"/stream/**", "/ext/stream/**"}) -public class StreamController { +public class StreamController { private static final Logger LOG = LoggerFactory.getLogger(StreamController.class); @@ -95,7 +94,8 @@ public class StreamController { try { if (!(authentication instanceof JWTAuthenticationToken) && !user.isStreamRole()) { - response.sendError(HttpServletResponse.SC_FORBIDDEN, "Streaming is forbidden for user " + user.getUsername()); + response.sendError(HttpServletResponse.SC_FORBIDDEN, + "Streaming is forbidden for user " + user.getUsername()); return; } @@ -133,9 +133,10 @@ public class StreamController { if (isSingleFile) { - if (!(authentication instanceof JWTAuthenticationToken) && !securityService.isFolderAccessAllowed(file, user.getUsername())) { + if (!(authentication instanceof JWTAuthenticationToken) && !securityService.isFolderAccessAllowed(file, + user.getUsername())) { response.sendError(HttpServletResponse.SC_FORBIDDEN, - "Access to file " + file.getId() + " is forbidden for user " + user.getUsername()); + "Access to file " + file.getId() + " is forbidden for user " + user.getUsername()); return; } @@ -157,10 +158,12 @@ public class StreamController { response.setHeader("Accept-Ranges", "bytes"); } - TranscodingService.Parameters parameters = transcodingService.getParameters(file, player, maxBitRate, preferredTargetFormat, null); + TranscodingService.Parameters parameters = transcodingService.getParameters(file, player, maxBitRate, + preferredTargetFormat, null); long fileLength = getFileLength(parameters); boolean isConversion = parameters.isDownsample() || parameters.isTranscode(); - boolean estimateContentLength = ServletRequestUtils.getBooleanParameter(request, "estimateContentLength", false); + boolean estimateContentLength = ServletRequestUtils.getBooleanParameter(request, + "estimateContentLength", false); boolean isHls = ServletRequestUtils.getBooleanParameter(request, "hls", false); range = getRange(request, file); @@ -174,6 +177,7 @@ public class StreamController { Util.setContentLength(response, fileLength); } + // Set content type of response if (isHls) { response.setContentType(StringUtil.getMimeType("ts")); // HLS is always MPEG TS. } else { @@ -188,6 +192,7 @@ public class StreamController { } } + // All headers are set, stop if that's all the client requested. if (request.getMethod().equals("HEAD")) { return; } @@ -258,7 +263,10 @@ public class StreamController { shouldCatch |= Util.isInstanceOfClassName(e, "org.apache.catalina.connector.ClientAbortException"); shouldCatch |= Util.isInstanceOfClassName(e, "org.eclipse.jetty.io.EofException"); if (shouldCatch) { - LOG.info("{}: Client unexpectedly closed connection while loading {} ({})", request.getRemoteAddr(), Util.getAnonymizedURLForRequest(request), e.getCause().toString()); + LOG.info("{}: Client unexpectedly closed connection while loading {} ({})", + request.getRemoteAddr(), + Util.getAnonymizedURLForRequest(request), + e.getCause().toString()); return; } @@ -358,12 +366,14 @@ public class StreamController { } } - private VideoTranscodingSettings createVideoTranscodingSettings(MediaFile file, HttpServletRequest request) throws ServletRequestBindingException { + private VideoTranscodingSettings createVideoTranscodingSettings(MediaFile file, HttpServletRequest request) + throws ServletRequestBindingException { Integer existingWidth = file.getWidth(); Integer existingHeight = file.getHeight(); Integer maxBitRate = ServletRequestUtils.getIntParameter(request, "maxBitRate"); int timeOffset = ServletRequestUtils.getIntParameter(request, "timeOffset", 0); - int defaultDuration = file.getDurationSeconds() == null ? Integer.MAX_VALUE : file.getDurationSeconds() - timeOffset; + int defaultDuration = file.getDurationSeconds() == null ? Integer.MAX_VALUE : + file.getDurationSeconds() - timeOffset; int duration = ServletRequestUtils.getIntParameter(request, "duration", defaultDuration); boolean hls = ServletRequestUtils.getBooleanParameter(request, "hls", false); From 47eefc1369dbb0d17b468e40b665856ba2111ff4 Mon Sep 17 00:00:00 2001 From: Peter Marheine Date: Thu, 23 May 2019 10:48:09 +1000 Subject: [PATCH 4/7] Refactor output streaming for readability The core loop was put together confusingly; this encapsulates the process of constructing an OutputStream and reformats some. --- .../player/controller/StreamController.java | 78 ++++++++++--------- 1 file changed, 43 insertions(+), 35 deletions(-) diff --git a/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java b/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java index db69b777..4922db3d 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java +++ b/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java @@ -208,49 +208,32 @@ public class StreamController { status = statusService.createStreamStatus(player); - in = new PlayQueueInputStream(player, status, maxBitRate, preferredTargetFormat, videoTranscodingSettings, transcodingService, - audioScrobblerService, mediaFileService, searchService); - OutputStream out = RangeOutputStream.wrap(response.getOutputStream(), range); - - // Enabled SHOUTcast, if requested. - boolean isShoutCastRequested = "1".equals(request.getHeader("icy-metadata")); - if (isShoutCastRequested && !isSingleFile) { - response.setHeader("icy-metaint", "" + ShoutCastOutputStream.META_DATA_INTERVAL); - response.setHeader("icy-notice1", "This stream is served using Airsonic"); - response.setHeader("icy-notice2", "Airsonic - Free media streamer"); - response.setHeader("icy-name", "Airsonic"); - response.setHeader("icy-genre", "Mixed"); - response.setHeader("icy-url", "https://airsonic.github.io/"); - out = new ShoutCastOutputStream(out, player.getPlayQueue(), settingsService); - } - - final int BUFFER_SIZE = 2048; - byte[] buf = new byte[BUFFER_SIZE]; - - while (true) { + in = new PlayQueueInputStream(player, status, maxBitRate, preferredTargetFormat, videoTranscodingSettings, + transcodingService, audioScrobblerService, mediaFileService, searchService); - // Check if stream has been terminated. - if (status.terminated()) { - return; - } - - if (player.getPlayQueue().getStatus() == PlayQueue.Status.STOPPED) { - if (isPodcast || isSingleFile) { - break; - } else { - sendDummy(buf, out); - } - } else { + try (OutputStream out = makeOutputStream(request, response, range, isSingleFile, player, settingsService)) { + final int BUFFER_SIZE = 2048; + byte[] buf = new byte[BUFFER_SIZE]; - int n = in.read(buf); - if (n == -1) { + while (!status.terminated()) { + if (player.getPlayQueue().getStatus() == PlayQueue.Status.STOPPED) { if (isPodcast || isSingleFile) { break; } else { sendDummy(buf, out); } } else { - out.write(buf, 0, n); + + int n = in.read(buf); + if (n == -1) { + if (isPodcast || isSingleFile) { + break; + } else { + sendDummy(buf, out); + } + } else { + out.write(buf, 0, n); + } } } } @@ -283,6 +266,31 @@ public class StreamController { return; } + /** + * Construct an appropriate output stream based on the request. + *

+ * This is responsible for limiting the output to the given range (if not null) and injecting Shoutcast metadata + * into the stream if requested. + */ + private OutputStream makeOutputStream(HttpServletRequest request, HttpServletResponse response, HttpRange range, + boolean isSingleFile, Player player, SettingsService settingsService) + throws IOException { + OutputStream out = RangeOutputStream.wrap(response.getOutputStream(), range); + + // Enabled SHOUTcast, if requested. + boolean isShoutCastRequested = "1".equals(request.getHeader("icy-metadata")); + if (isShoutCastRequested && !isSingleFile) { + response.setHeader("icy-metaint", "" + ShoutCastOutputStream.META_DATA_INTERVAL); + response.setHeader("icy-notice1", "This stream is served using Airsonic"); + response.setHeader("icy-notice2", "Airsonic - Free media streamer"); + response.setHeader("icy-name", "Airsonic"); + response.setHeader("icy-genre", "Mixed"); + response.setHeader("icy-url", "https://airsonic.github.io/"); + out = new ShoutCastOutputStream(out, player.getPlayQueue(), settingsService); + } + return out; + } + private void setContentDuration(HttpServletResponse response, MediaFile file) { if (file.getDurationSeconds() != null) { response.setHeader("X-Content-Duration", String.format("%.1f", file.getDurationSeconds().doubleValue())); From 3e9718604370f7efd0a8a140f32c31bfb74f73ff Mon Sep 17 00:00:00 2001 From: Peter Marheine Date: Thu, 23 May 2019 10:50:20 +1000 Subject: [PATCH 5/7] Omit unnecessary null check on ranges --- .../org/airsonic/player/controller/StreamController.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java b/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java index 4922db3d..2041d884 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java +++ b/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java @@ -343,11 +343,8 @@ public class StreamController { // Second, look for "offsetSeconds" request parameter. String offsetSeconds = request.getParameter("offsetSeconds"); range = parseAndConvertOffsetSeconds(offsetSeconds, file); - if (range != null) { - return range; - } + return range; - return null; } @Nullable From 9be2a8892feb97a5c34d52dcab98f9b103c5441e Mon Sep 17 00:00:00 2001 From: Peter Marheine Date: Thu, 23 May 2019 10:51:37 +1000 Subject: [PATCH 6/7] More correctly handle stream ranges When transcoding, always use chunked transfers and report that ranges are not supported. When not transcoding, support returning ranges but only if requested. --- .../player/controller/StreamController.java | 47 +++++++++++++------ 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java b/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java index 2041d884..5c31ecb6 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java +++ b/airsonic-main/src/main/java/org/airsonic/player/controller/StreamController.java @@ -153,28 +153,45 @@ public class StreamController { playQueue.addFiles(true, file); player.setPlayQueue(playQueue); - if (settingsService.isEnableSeek() && !file.isVideo()) { - response.setIntHeader("ETag", file.getId()); - response.setHeader("Accept-Ranges", "bytes"); - } - TranscodingService.Parameters parameters = transcodingService.getParameters(file, player, maxBitRate, preferredTargetFormat, null); - long fileLength = getFileLength(parameters); boolean isConversion = parameters.isDownsample() || parameters.isTranscode(); boolean estimateContentLength = ServletRequestUtils.getBooleanParameter(request, "estimateContentLength", false); boolean isHls = ServletRequestUtils.getBooleanParameter(request, "hls", false); - range = getRange(request, file); - if (settingsService.isEnableSeek() && range != null && !file.isVideo()) { - LOG.info("{}: Got HTTP range: {}", request.getRemoteAddr(), range); - response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); - Util.setContentLength(response, range.isClosed() ? range.size() : fileLength - range.getFirstBytePos()); - long lastBytePos = range.getLastBytePos() != null ? range.getLastBytePos() : fileLength - 1; - response.setHeader("Content-Range", "bytes " + range.getFirstBytePos() + "-" + lastBytePos + "/" + fileLength); - } else if (!isHls && (!isConversion || estimateContentLength)) { - Util.setContentLength(response, fileLength); + // Wrangle response length and ranges. + // + // Support ranges as long as we're not transcoding; video is always assumed to transcode + if (isConversion || file.isVideo()) { + // Use chunked transfer; do not accept range requests + response.setStatus(HttpServletResponse.SC_OK); + response.setHeader("Accept-Ranges", "none"); + } else { + // Not transcoding, partial content permitted because we know the final size + long contentLength; + + // If range was requested, respond in kind + range = getRange(request, file); + if (range != null) { + response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); + response.setHeader("Accept-Ranges", "bytes"); + + // Both ends are inclusive + long startByte = range.getFirstBytePos(); + long endByte = range.isClosed() ? range.getLastBytePos() : file.getFileSize() - 1; + + response.setHeader("Content-Range", + String.format("bytes %d-%d/%d", startByte, endByte, file.getFileSize())); + contentLength = endByte + 1 - startByte; + } else { + // No range was requested, give back the whole file + response.setStatus(HttpServletResponse.SC_OK); + contentLength = file.getFileSize(); + } + + response.setIntHeader("ETag", file.getId()); + Util.setContentLength(response, contentLength); } // Set content type of response From 3efa2d3e2c12a2f43a44dce6d0258992dc786a48 Mon Sep 17 00:00:00 2001 From: Peter Marheine Date: Wed, 22 May 2019 15:33:15 +1000 Subject: [PATCH 7/7] Remove the option to never set Content-Length This workaround is obsolete with correct handling of ranges when requested. --- .../player/controller/TranscodingSettingsController.java | 2 -- .../org/airsonic/player/service/SettingsService.java | 9 --------- .../airsonic/player/i18n/ResourceBundle_bg.properties | 1 - .../airsonic/player/i18n/ResourceBundle_ca.properties | 1 - .../airsonic/player/i18n/ResourceBundle_cs.properties | 1 - .../airsonic/player/i18n/ResourceBundle_da.properties | 1 - .../airsonic/player/i18n/ResourceBundle_de.properties | 1 - .../airsonic/player/i18n/ResourceBundle_el.properties | 1 - .../airsonic/player/i18n/ResourceBundle_en.properties | 1 - .../airsonic/player/i18n/ResourceBundle_en_GB.properties | 1 - .../airsonic/player/i18n/ResourceBundle_es.properties | 1 - .../airsonic/player/i18n/ResourceBundle_et.properties | 1 - .../airsonic/player/i18n/ResourceBundle_fi.properties | 1 - .../airsonic/player/i18n/ResourceBundle_fr.properties | 1 - .../airsonic/player/i18n/ResourceBundle_is.properties | 1 - .../airsonic/player/i18n/ResourceBundle_it.properties | 1 - .../airsonic/player/i18n/ResourceBundle_ja_JP.properties | 1 - .../airsonic/player/i18n/ResourceBundle_ko.properties | 1 - .../airsonic/player/i18n/ResourceBundle_mk.properties | 1 - .../airsonic/player/i18n/ResourceBundle_nl.properties | 1 - .../airsonic/player/i18n/ResourceBundle_nn.properties | 1 - .../airsonic/player/i18n/ResourceBundle_no.properties | 1 - .../airsonic/player/i18n/ResourceBundle_pl.properties | 1 - .../airsonic/player/i18n/ResourceBundle_pt.properties | 1 - .../airsonic/player/i18n/ResourceBundle_pt_BR.properties | 1 - .../airsonic/player/i18n/ResourceBundle_pt_PT.properties | 1 - .../airsonic/player/i18n/ResourceBundle_ru.properties | 1 - .../airsonic/player/i18n/ResourceBundle_sl.properties | 1 - .../airsonic/player/i18n/ResourceBundle_sv.properties | 1 - .../airsonic/player/i18n/ResourceBundle_uk.properties | 1 - .../airsonic/player/i18n/ResourceBundle_zh_CN.properties | 1 - .../airsonic/player/i18n/ResourceBundle_zh_TW.properties | 1 - .../src/main/webapp/WEB-INF/jsp/transcodingSettings.jsp | 5 ----- 33 files changed, 46 deletions(-) diff --git a/airsonic-main/src/main/java/org/airsonic/player/controller/TranscodingSettingsController.java b/airsonic-main/src/main/java/org/airsonic/player/controller/TranscodingSettingsController.java index 12ccf491..99916c68 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/controller/TranscodingSettingsController.java +++ b/airsonic-main/src/main/java/org/airsonic/player/controller/TranscodingSettingsController.java @@ -56,7 +56,6 @@ public class TranscodingSettingsController { map.put("transcodings", transcodingService.getAllTranscodings()); map.put("transcodeDirectory", transcodingService.getTranscodeDirectory()); - map.put("enableSeek", settingsService.isEnableSeek()); map.put("downsampleCommand", settingsService.getDownsamplingCommand()); map.put("hlsCommand", settingsService.getHlsCommand()); map.put("brand", settingsService.getBrand()); @@ -132,7 +131,6 @@ public class TranscodingSettingsController { return error; } } - settingsService.setEnableSeek(request.getParameter("enableSeek") != null); settingsService.setDownsamplingCommand(StringUtils.trim(request.getParameter("downsampleCommand"))); settingsService.setHlsCommand(StringUtils.trim(request.getParameter("hlsCommand"))); settingsService.save(); diff --git a/airsonic-main/src/main/java/org/airsonic/player/service/SettingsService.java b/airsonic-main/src/main/java/org/airsonic/player/service/SettingsService.java index 83bd907e..95e05e41 100644 --- a/airsonic-main/src/main/java/org/airsonic/player/service/SettingsService.java +++ b/airsonic-main/src/main/java/org/airsonic/player/service/SettingsService.java @@ -83,7 +83,6 @@ public class SettingsService { private static final String KEY_PODCAST_EPISODE_DOWNLOAD_COUNT = "PodcastEpisodeDownloadCount"; private static final String KEY_DOWNLOAD_BITRATE_LIMIT = "DownloadBitrateLimit"; private static final String KEY_UPLOAD_BITRATE_LIMIT = "UploadBitrateLimit"; - private static final String KEY_ENABLE_SEEK = "EnableSeek1"; private static final String KEY_DOWNSAMPLING_COMMAND = "DownsamplingCommand4"; private static final String KEY_HLS_COMMAND = "HlsCommand3"; private static final String KEY_JUKEBOX_COMMAND = "JukeboxCommand2"; @@ -624,14 +623,6 @@ public class SettingsService { setLong(KEY_UPLOAD_BITRATE_LIMIT, limit); } - public boolean isEnableSeek() { - return getBoolean(KEY_ENABLE_SEEK, DEFAULT_ENABLE_SEEK); - } - - public void setEnableSeek(boolean enableSeek) { - setBoolean(KEY_ENABLE_SEEK, enableSeek); - } - public String getDownsamplingCommand() { return getProperty(KEY_DOWNSAMPLING_COMMAND, DEFAULT_DOWNSAMPLING_COMMAND); } diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_bg.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_bg.properties index a5fdbbf5..bc2fc5c1 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_bg.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_bg.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=\u0421\u0442\u044A\u043F\u043A\u0430 2 transcodingsettings.step3=\u0421\u0442\u044A\u043F\u043A\u0430 3 transcodingsettings.add=\u0414\u043E\u0431\u0430\u0432\u0438 \u043A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u0430\u043D\u0435 transcodingsettings.defaultactive=\u041F\u043E \u043F\u043E\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043D\u0435 -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=\u041F\u0440\u0435\u043F\u043E\u0440\u044A\u0447\u0438\u0442\u0435\u043B\u043D\u0430 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F transcodingsettings.noname=\u041C\u043E\u043B\u044F \u043F\u043E\u0441\u043E\u0447\u0435\u0442\u0435 \u0438\u043C\u0435. transcodingsettings.nosourceformat=\u041C\u043E\u043B\u044F \u043F\u043E\u0441\u043E\u0447\u0435\u0442\u0435 \u0444\u043E\u0440\u043C\u0430\u0442\u0430 \u043E\u0442 \u043A\u043E\u0439\u0442\u043E \u0449\u0435 \u0441\u0435 \u043A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u0430. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ca.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ca.properties index cde486c4..b0e3a35f 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ca.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ca.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Pas 2 transcodingsettings.step3=Pas 3 transcodingsettings.add=Add transcoding transcodingsettings.defaultactive=Enable transcoding settings for all existing and new players. -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=Si us plau, especifiqui un nom. transcodingsettings.nosourceformat=Si us plau, especifiqui un format des d'on convertir. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_cs.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_cs.properties index 0fb22002..f26f5a2a 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_cs.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_cs.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Krok 2 transcodingsettings.step3=Krok 3 transcodingsettings.add=P\u0159idat p\u0159ek\u00F3dov\u00E1n\u00ED transcodingsettings.defaultactive=Povolit toto p\u0159ek\u00F3dov\u00E1n\u00ED pro v\u0161echny existuj\u00EDc\u00ED a nov\u00E9 p\u0159ehr\u00E1va\u010De. -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Doporu\u010Den\u00E1 konfigurace transcodingsettings.noname=Zadejte n\u00E1zev. transcodingsettings.nosourceformat=Zadejte form\u00E1t, ze kter\u00E9ho p\u0159ev\u00E1d\u011Bt diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_da.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_da.properties index b9e81599..6e818b20 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_da.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_da.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Trin 2 transcodingsettings.step3=Trin 3 transcodingsettings.add=Tilf\u00F8j kodning transcodingsettings.defaultactive=Standard -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=Angiv et navn. transcodingsettings.nosourceformat=Angiv formatet til at konvertere fra. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_de.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_de.properties index 2ebbc55f..39951346 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_de.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_de.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Schritt 2 transcodingsettings.step3=Schritt 3 transcodingsettings.add=Transcoding hinzuf\u00FCgen transcodingsettings.defaultactive=Standard -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Empfohlene Konfiguratiom transcodingsettings.noname=Bitte einen Namen eingeben. transcodingsettings.nosourceformat=Bitte das Format angeben von dem konvertiert wird. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_el.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_el.properties index c45f4628..5bf2b5e0 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_el.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_el.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=\u0392\u03AE\u03BC\u03B1 2 transcodingsettings.step3=\u0392\u03AE\u03BC\u03B1 3 transcodingsettings.add=\u03A0\u03C1\u03CC\u03C3\u03B8\u03B5\u03C3\u03B7 \u03B5\u03C0\u03B1\u03BD\u03B1\u03BA\u03C9\u03B4\u03B9\u03BA\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2 transcodingsettings.defaultactive=\u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=\u03A0\u03C1\u03BF\u03C4\u03B5\u03B9\u03BD\u03CC\u03BC\u03B5\u03BD\u03B7 \u03B4\u03B9\u03B1\u03BC\u03CC\u03C1\u03C6\u03C9\u03C3\u03B7 transcodingsettings.noname=\u03A0\u03C1\u03BF\u03C3\u03B4\u03B9\u03BF\u03C1\u03AF\u03C3\u03C4\u03B5 \u03AD\u03BD\u03B1 \u03CC\u03BD\u03BF\u03BC\u03B1 transcodingsettings.nosourceformat=\u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03CE \u03C0\u03C1\u03BF\u03C3\u03B4\u03B9\u03BF\u03C1\u03AF\u03C3\u03C4\u03B5 \u03C4\u03BF\u03BD \u03C4\u03CD\u03C0\u03BF \u03BC\u03B5\u03C4\u03B1\u03C4\u03C1\u03BF\u03C0\u03AE\u03C2 \u03B1\u03C0\u03CC. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_en.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_en.properties index 28036714..4ff5ed93 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_en.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_en.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Step 2 transcodingsettings.step3=Step 3 transcodingsettings.add=Add transcoding transcodingsettings.defaultactive=Enable transcoding settings for all existing and new players. -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=Please specify a name. transcodingsettings.nosourceformat=Please specify the format to convert from. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_en_GB.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_en_GB.properties index 9b547659..7d4468b4 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_en_GB.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_en_GB.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Step 2 transcodingsettings.step3=Step 3 transcodingsettings.add=Add transcoding transcodingsettings.defaultactive=Enable transcoding settings for all existing and new players. -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=Please specify a name. transcodingsettings.nosourceformat=Please specify the format to convert from. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_es.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_es.properties index 4cc09ade..dcc1a24c 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_es.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_es.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Paso 2 transcodingsettings.step3=Paso 3 transcodingsettings.add=A\u00F1adir transcodificaci\u00F3n transcodingsettings.defaultactive=Habilitar esta transcodificaci\u00F3n para todos las reproducciones nuevas y existentes. -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Configuraci\u00F3n recomendada transcodingsettings.noname=Por favor especifique un nombre. transcodingsettings.nosourceformat=Por favor especifique un formato desde el que convertir. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_et.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_et.properties index 5574ff57..e4ed7e6c 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_et.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_et.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=2. samm transcodingsettings.step3=3. samm transcodingsettings.add=Lisa konverditav transcodingsettings.defaultactive=Luba see konvertimine kõikidel olemasolevatel ja uutele meediaesitajatel. -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Soovitatavad seadistused transcodingsettings.noname=Täpsusta nimi. transcodingsettings.nosourceformat=Täpsusta, mis formaadist konverditakse. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_fi.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_fi.properties index 372e0e4f..963c4f3a 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_fi.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_fi.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Vaihe 2 transcodingsettings.step3=Vaihe 3 transcodingsettings.add=Lis\u00E4\u00E4 uusi s\u00E4\u00E4nt\u00F6 transcodingsettings.defaultactive=Oletus -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=Anna s\u00E4\u00E4nn\u00F6lle nimi. transcodingsettings.nosourceformat=M\u00E4\u00E4rit\u00E4 mist\u00E4 tiedostomuodosta muunnetaan. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_fr.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_fr.properties index 932bea20..38ff99d5 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_fr.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_fr.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Etape 2 transcodingsettings.step3=Etape 3 transcodingsettings.add=Ajouter un transcodage transcodingsettings.defaultactive=Par d\u00E9faut -transcodingsettings.enableseek=Activer la recherche sur les transcodes (peut ne pas fonctionner correctement avec les codecs VBR) transcodingsettings.recommended=Configuration recommand\u00E9e transcodingsettings.noname=Veuillez indiquer un nom. transcodingsettings.nosourceformat=Veuillez indiquer le format de la source. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_is.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_is.properties index 48741091..6a85fcfd 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_is.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_is.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Skref 2 transcodingsettings.step3=Skref 3 transcodingsettings.add=B\u00E6ta VI\u00F0 transcoding transcodingsettings.defaultactive=Venjulegt -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=Vinsamlegast Sl\u00E1\u00F0u inn Nafn. transcodingsettings.nosourceformat=Vinsamlegast veldu til a\u00F0 breyta Fr\u00E1. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_it.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_it.properties index a80d7f6a..eb30d61c 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_it.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_it.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Passo 2 transcodingsettings.step3=Passo 3 transcodingsettings.add=Aggiungi transcodifica transcodingsettings.defaultactive=Predefinito -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Configurazione consigliata transcodingsettings.noname=Per favore specifica un nome. transcodingsettings.nosourceformat=Per favore specifica il formato dal quale convertire. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ja_JP.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ja_JP.properties index cb2b79f2..c375e83b 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ja_JP.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ja_JP.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=\u7B2C2\u6BB5\u968E transcodingsettings.step3=\u7B2C3\u6BB5\u968E transcodingsettings.add=\u30C8\u30E9\u30F3\u30B9\u30B3\u30FC\u30C7\u30A3\u30F3\u30B0\u8A2D\u5B9A\u3092\u8FFD\u52A0 transcodingsettings.defaultactive=\u30C7\u30D5\u30A9\u30EB\u30C8 -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=\u63A8\u5968\u3055\u308C\u308B\u8A2D\u5B9A transcodingsettings.noname=\u540D\u524D\u304C\u3042\u308A\u307E\u305B\u3093\u3002 transcodingsettings.nosourceformat=\u5909\u63DB\u5143\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002 diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ko.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ko.properties index 82dab2a6..9dd02792 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ko.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ko.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=2 \uB2E8\uACC4 transcodingsettings.step3=3 \uB2E8\uACC4 transcodingsettings.add=\uD30C\uC77C \uBCC0\uD658 \uCD94\uAC00 transcodingsettings.defaultactive=\uAE30\uBCF8\uAC12 -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=\uCD94\uCC9C\uD558\uB294 \uBCC0\uD658 \uBC29\uBC95 transcodingsettings.noname=\uBCC0\uD658 \uC774\uB984\uC744 \uB2E4\uC2DC \uC9C0\uC815\uD574\uC8FC\uC138\uC694. transcodingsettings.nosourceformat=\uC6D0\uBCF8 \uD30C\uC77C \uD0C0\uC785\uC744 \uB2E4\uC2DC \uC9C0\uC815\uD574\uC8FC\uC138\uC694. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_mk.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_mk.properties index 34db3c33..106deadd 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_mk.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_mk.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Step 2 transcodingsettings.step3=Step 3 transcodingsettings.add=Add transcoding transcodingsettings.defaultactive=Enable transcoding settings for all existing and new players. -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=Please specify a name. transcodingsettings.nosourceformat=Please specify the format to convert from. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_nl.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_nl.properties index 1d44c91a..911eb665 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_nl.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_nl.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Stap 2 transcodingsettings.step3=Stap 3 transcodingsettings.add=Voeg conversie toe transcodingsettings.defaultactive=Activeer deze conversie voor alle bestaande en nieuwe afspelers. -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Aanbevolen configuratie transcodingsettings.noname=Geef een naam op. transcodingsettings.nosourceformat=Specificeer het te converteren formaat. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_nn.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_nn.properties index 3276e397..15982836 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_nn.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_nn.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Steg 2 transcodingsettings.step3=Steg 3 transcodingsettings.add=Legg til transkoding transcodingsettings.defaultactive=Standard -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=Ver venleg og skriv eit namn. transcodingsettings.nosourceformat=Skriv formatet det skal konverterast fr\u00E5. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_no.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_no.properties index 3676d7e4..14997a93 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_no.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_no.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Steg 2 transcodingsettings.step3=Steg 3 transcodingsettings.add=Legg til transkoding transcodingsettings.defaultactive=Standard -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=Vennligst angi et navn. transcodingsettings.nosourceformat=Angi formatet det skal konverteres fra. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pl.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pl.properties index bcc0f8c2..90c12921 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pl.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pl.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Krok 2 transcodingsettings.step3=Krok 3 transcodingsettings.add=Dodaj transkodowanie transcodingsettings.defaultactive=Standadrowe -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Zalecana konfiguracja transcodingsettings.noname=Prosz\u0119 okre\u015Bli\u0107 nazw\u0119 transcodingsettings.nosourceformat=Prosz\u0119 okre\u015Bli\u0107 format \u017Ar\u00F3d\u0142owy diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pt.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pt.properties index abb93ae9..0965a038 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pt.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pt.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Passo 2 transcodingsettings.step3=Passo 3 transcodingsettings.add=Adicionar transcodifica\u00E7\u00E3o transcodingsettings.defaultactive=Padr\u00E3o -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=Por favor especifique o nome. transcodingsettings.nosourceformat=Por favor, especifique o formato para converter de. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pt_BR.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pt_BR.properties index 28036714..4ff5ed93 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pt_BR.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pt_BR.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Step 2 transcodingsettings.step3=Step 3 transcodingsettings.add=Add transcoding transcodingsettings.defaultactive=Enable transcoding settings for all existing and new players. -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=Please specify a name. transcodingsettings.nosourceformat=Please specify the format to convert from. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pt_PT.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pt_PT.properties index 28036714..4ff5ed93 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pt_PT.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_pt_PT.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Step 2 transcodingsettings.step3=Step 3 transcodingsettings.add=Add transcoding transcodingsettings.defaultactive=Enable transcoding settings for all existing and new players. -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=Please specify a name. transcodingsettings.nosourceformat=Please specify the format to convert from. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ru.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ru.properties index d4f06d2c..2b0bd7ff 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ru.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_ru.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=\u0428\u0430\u0433 2 transcodingsettings.step3=\u0428\u0430\u0433 3 transcodingsettings.add=\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043D\u0432\u0435\u0440\u0442\u043E\u0440 transcodingsettings.defaultactive=\u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Recommended configuration transcodingsettings.noname=\u0423\u043A\u0430\u0436\u0438\u0442\u0435 \u0438\u043C\u044F. transcodingsettings.nosourceformat=\u0443\u043A\u0430\u0436\u0438\u0442\u0435 \u043A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_sl.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_sl.properties index 3030d65f..3030fc70 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_sl.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_sl.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=2. korak transcodingsettings.step3=3. korak transcodingsettings.add=Dodaj prekodiranje transcodingsettings.defaultactive=Privzeto -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Priporo\u010Dene nastavitve transcodingsettings.noname=Prosimo, dolo\u010Dite ime. transcodingsettings.nosourceformat=Prosimo, dolo\u010Dite obliko zapisa vhodne datoteke. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_sv.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_sv.properties index 4f68e848..9ca1a1d6 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_sv.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_sv.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Steg 2 transcodingsettings.step3=Steg 3 transcodingsettings.add=L\u00E4gg till transcoding transcodingsettings.defaultactive=Standard -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Rekommenderad konfiguration transcodingsettings.noname=V\u00E4nligen ange ett namn. transcodingsettings.nosourceformat=V\u00E4nligen ange ett format att konvertera fr\u00E5n. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_uk.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_uk.properties index b6279f6a..52c94422 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_uk.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_uk.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=Step 2 transcodingsettings.step3=Step 3 transcodingsettings.add=Add transcoding transcodingsettings.defaultactive=Enable transcoding settings for all existing and new players. -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=Рекомендована конфігурація transcodingsettings.noname=Please specify a name. transcodingsettings.nosourceformat=Please specify the format to convert from. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_zh_CN.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_zh_CN.properties index f6583d98..fc89ce44 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_zh_CN.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_zh_CN.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=\u6B65\u9AA4\u4E8C transcodingsettings.step3=\u6B65\u9AA4\u4E09 transcodingsettings.add=\u6DFB\u52A0 transcodingsettings.defaultactive=\u4E3A\u73B0\u6709\u548C\u65B0\u64AD\u653E\u5668\u542F\u7528\u8FD9\u9879\u8F6C\u7801\u8BBE\u7F6E -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=\u63A8\u8350\u8BBE\u7F6E transcodingsettings.noname=\u8BF7\u6307\u5B9A\u4E00\u4E2A\u540D\u79F0. transcodingsettings.nosourceformat=\u8BF7\u6307\u5B9A\u8F6C\u6362\u683C\u5F0F. diff --git a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_zh_TW.properties b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_zh_TW.properties index e7f764ac..54fc4f49 100644 --- a/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_zh_TW.properties +++ b/airsonic-main/src/main/resources/org/airsonic/player/i18n/ResourceBundle_zh_TW.properties @@ -413,7 +413,6 @@ transcodingsettings.step2=\u6B65\u9A5F\u4E8C transcodingsettings.step3=\u6B65\u9A5F\u4E09 transcodingsettings.add=\u65B0\u589E\u8F49\u78BC\u5668 transcodingsettings.defaultactive=\u9810\u8A2D -transcodingsettings.enableseek=Enable seeking on transcodes (might not work well with VBR codecs) transcodingsettings.recommended=\u5EFA\u8B70\u7684\u8A2D\u5B9A transcodingsettings.noname=\u8ACB\u6307\u5B9A\u4E00\u500B\u540D\u7A31\u3002 transcodingsettings.nosourceformat=\u8ACB\u6307\u5B9A\u8F49\u63DB\u7684\u4F86\u6E90\u683C\u5F0F\u3002 diff --git a/airsonic-main/src/main/webapp/WEB-INF/jsp/transcodingSettings.jsp b/airsonic-main/src/main/webapp/WEB-INF/jsp/transcodingSettings.jsp index 925939b7..98db6693 100644 --- a/airsonic-main/src/main/webapp/WEB-INF/jsp/transcodingSettings.jsp +++ b/airsonic-main/src/main/webapp/WEB-INF/jsp/transcodingSettings.jsp @@ -59,11 +59,6 @@ - -
- - -