Improve subtitle upload behaviour
This commit is contained in:
parent
9ab34c3202
commit
ec14f3c084
|
@ -289,14 +289,14 @@ abstract class SubtitleDropTarget extends JButton {
|
|||
// 1. try to find exact match in drop data
|
||||
return findMatch(subtitle, videos, FileUtilities::getName).orElseGet(() -> {
|
||||
// 2. guess movie file from the parent folder if only a subtitle file was dropped in
|
||||
return findMatch(subtitle, getChildren(subtitle.getParentFile(), VIDEO_FILES), FileUtilities::getName).get();
|
||||
return findMatch(subtitle, getChildren(subtitle.getParentFile(), VIDEO_FILES), FileUtilities::getName).orElse(null);
|
||||
});
|
||||
}
|
||||
|
||||
private Optional<File> findMatch(File file, List<File> options, Function<File, String> comparator) {
|
||||
String name = comparator.apply(file).toLowerCase();
|
||||
String subtitleFileName = comparator.apply(file).toLowerCase();
|
||||
for (File it : options) {
|
||||
if (name.length() > 0 && comparator.apply(it).toLowerCase().startsWith(name)) {
|
||||
if (subtitleFileName.length() > 0 && subtitleFileName.startsWith(comparator.apply(it).toLowerCase())) {
|
||||
return Optional.of(it);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package net.filebot.web;
|
||||
|
||||
import static java.util.Arrays.*;
|
||||
import static java.util.Collections.*;
|
||||
import static net.filebot.util.StringUtilities.*;
|
||||
|
||||
|
@ -13,6 +14,7 @@ import java.net.URL;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
@ -163,15 +165,38 @@ public class OpenSubtitlesXmlRpc {
|
|||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public TryUploadResponse tryUploadSubtitles(SubFile... subtitles) throws XmlRpcFault {
|
||||
Map<String, SubFile> struct = new HashMap<String, SubFile>();
|
||||
private static final Pattern CDI_PATTERN = Pattern.compile("(?<!\\p{Alnum})CD(?<i>[1-9])(?!\\p{Digit})", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CHARACTER_CLASS);
|
||||
|
||||
private Map<String, Object> getUploadStruct(BaseInfo baseInfo, SubFile... subtitles) {
|
||||
Map<String, Object> struct = new LinkedHashMap<String, Object>();
|
||||
|
||||
// put baseinfo
|
||||
if (baseInfo != null) {
|
||||
struct.put("baseinfo", baseInfo);
|
||||
}
|
||||
|
||||
// put cd1, cd2, ...
|
||||
for (SubFile cd : subtitles) {
|
||||
struct.put(String.format("cd%d", struct.size() + 1), cd);
|
||||
for (SubFile it : subtitles) {
|
||||
int i = 1;
|
||||
Matcher m = CDI_PATTERN.matcher(it.toString());
|
||||
while (m.find()) {
|
||||
i = Integer.parseInt(m.group("i"));
|
||||
}
|
||||
String key = "cd" + i;
|
||||
if (!struct.containsKey(key)) {
|
||||
struct.put(key, it);
|
||||
} else {
|
||||
throw new IllegalArgumentException(String.format("Duplicate key: %s: %s", key, asList(subtitles)));
|
||||
}
|
||||
}
|
||||
|
||||
return struct;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public TryUploadResponse tryUploadSubtitles(SubFile... subtitles) throws XmlRpcFault {
|
||||
Map<String, Object> struct = getUploadStruct(null, subtitles);
|
||||
|
||||
Map<?, ?> response = invoke("TryUploadSubtitles", token, struct);
|
||||
|
||||
boolean uploadRequired = response.get("alreadyindb").toString().equals("0");
|
||||
|
@ -187,15 +212,7 @@ public class OpenSubtitlesXmlRpc {
|
|||
}
|
||||
|
||||
public URI uploadSubtitles(BaseInfo baseInfo, SubFile... subtitles) throws XmlRpcFault {
|
||||
Map<String, Object> struct = new HashMap<String, Object>();
|
||||
|
||||
// put cd1, cd2, ...
|
||||
for (SubFile cd : subtitles) {
|
||||
struct.put(String.format("cd%d", struct.size() + 1), cd);
|
||||
}
|
||||
|
||||
// put baseinfo
|
||||
struct.put("baseinfo", baseInfo);
|
||||
Map<String, Object> struct = getUploadStruct(baseInfo, subtitles);
|
||||
|
||||
Map<?, ?> response = invoke("UploadSubtitles", token, struct);
|
||||
|
||||
|
@ -498,6 +515,11 @@ public class OpenSubtitlesXmlRpc {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("(%s, %s)", get("moviefilename"), get("subfilename"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static final class TryUploadResponse {
|
||||
|
|
Loading…
Reference in New Issue