Reworks default tools, moves some files

This commit is contained in:
Guillaume Tâche
2024-10-04 21:54:55 +02:00
parent df58cf4585
commit c58a8b0588
132 changed files with 600 additions and 257 deletions

View File

@@ -5,6 +5,7 @@ import com.github.gtache.autosubtitle.archive.Archiver;
import com.github.gtache.autosubtitle.archive.ArchiverProvider;
import javax.inject.Inject;
import java.util.Collection;
import java.util.Map;
import java.util.stream.Collectors;

View File

@@ -3,6 +3,7 @@ package com.github.gtache.autosubtitle.archive.impl;
import com.github.gtache.autosubtitle.archive.Archiver;
import javax.inject.Inject;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

View File

@@ -13,6 +13,7 @@ import dagger.Module;
import dagger.Provides;
import javax.inject.Singleton;
import java.util.prefs.Preferences;
/**

View File

@@ -1,6 +1,7 @@
package com.github.gtache.autosubtitle.modules.impl;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@@ -1,6 +1,7 @@
package com.github.gtache.autosubtitle.modules.impl;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@@ -1,6 +1,7 @@
package com.github.gtache.autosubtitle.modules.impl;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@@ -1,6 +1,7 @@
package com.github.gtache.autosubtitle.modules.impl;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@@ -1,6 +1,7 @@
package com.github.gtache.autosubtitle.modules.impl;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@@ -0,0 +1,16 @@
package com.github.gtache.autosubtitle.modules.impl;
import com.github.gtache.autosubtitle.ToolType;
import dagger.MapKey;
/**
* Used for injection
*/
@MapKey
public @interface ToolTypeKey {
/**
* @return the tool type
*/
ToolType value();
}

View File

@@ -1,6 +1,7 @@
package com.github.gtache.autosubtitle.modules.setup.impl;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@@ -36,6 +36,7 @@ public final class SetupModule {
return HttpClient.newHttpClient();
}
@Provides
static Map<ToolType, Map<String, SetupManager>> providesSetupManagers(@VideoConverterSetup final Map<String, SetupManager> convertersManagers,
@SubtitleExtractorSetup final Map<String, SetupManager> extractorsManagers,
@@ -44,13 +45,4 @@ public final class SetupModule {
ToolType.SUBTITLE_EXTRACTOR, extractorsManagers,
ToolType.TRANSLATOR, translatorsManagers);
}
@Provides
static Map<ToolType, SetupManager> providesDefaultManagers(@VideoConverterSetup final SetupManager videoConverterManager,
@SubtitleExtractorSetup final SetupManager subtitleExtractorManager,
@TranslatorSetup final SetupManager translatorManager) {
return Map.of(ToolType.VIDEO_CONVERTER, videoConverterManager,
ToolType.SUBTITLE_EXTRACTOR, subtitleExtractorManager,
ToolType.TRANSLATOR, translatorManager);
}
}

View File

@@ -1,6 +1,7 @@
package com.github.gtache.autosubtitle.modules.setup.impl;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@@ -1,6 +1,7 @@
package com.github.gtache.autosubtitle.modules.setup.impl;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@@ -1,6 +1,7 @@
package com.github.gtache.autosubtitle.modules.setup.impl;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@@ -1,6 +1,7 @@
package com.github.gtache.autosubtitle.modules.setup.impl;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@@ -0,0 +1,16 @@
package com.github.gtache.autosubtitle.modules.setup.impl;
import javax.inject.Qualifier;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Qualifier
@Documented
@Retention(RUNTIME)
@Target({ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD})
public @interface VideoLoaderSetup {
}

View File

@@ -3,10 +3,12 @@ package com.github.gtache.autosubtitle.process.impl;
import com.github.gtache.autosubtitle.process.ProcessListener;
import com.github.gtache.autosubtitle.process.ProcessResult;
import com.github.gtache.autosubtitle.process.ProcessRunner;
import javax.inject.Inject;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.inject.Inject;
import java.io.IOException;
import java.time.Duration;
import java.util.List;

View File

@@ -14,6 +14,7 @@ import com.github.gtache.autosubtitle.subtitle.impl.SubtitleImpl;
import com.github.gtache.autosubtitle.translation.Translator;
import javax.inject.Inject;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;

View File

@@ -13,12 +13,11 @@ import com.github.gtache.autosubtitle.translation.Translator;
import javax.inject.Inject;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import static java.util.Objects.requireNonNull;
/**
* Converts subtitles to SRT format
*/
@@ -27,11 +26,11 @@ public class SRTSubtitleConverter implements SubtitleConverter<SubtitleImpl> {
private static final Pattern ARROW_PATTERN = Pattern.compile(" --> ");
private static final Pattern DOUBLE_NEWLINE_PATTERN = Pattern.compile("\n\n");
private final Translator<?> translator;
private final Map<String, Translator<?>> translators;
@Inject
SRTSubtitleConverter(final Translator translator) {
this.translator = requireNonNull(translator);
SRTSubtitleConverter(final Map<String, Translator<?>> translators) {
this.translators = Map.copyOf(translators);
}
@Override
@@ -61,7 +60,7 @@ public class SRTSubtitleConverter implements SubtitleConverter<SubtitleImpl> {
return new SubtitleImpl(text, start, end, null, null);
}).toList();
final var text = subtitles.stream().map(Subtitle::content).collect(Collectors.joining(" "));
return new SubtitleCollectionImpl<>(text, subtitles, translator.getLanguage(text));
return new SubtitleCollectionImpl<>(text, subtitles, translators.values().iterator().next().getLanguage(text)); //Use any translator for now
} catch (final Exception e) {
throw new ParseException(e);
}

View File

@@ -4,6 +4,7 @@ import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverter;
import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverterProvider;
import javax.inject.Inject;
import java.util.Collection;
import java.util.Map;
import java.util.stream.Collectors;

View File

@@ -14,6 +14,7 @@ import com.github.gtache.autosubtitle.subtitle.impl.SubtitleImpl;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.nio.file.Path;
import java.util.Comparator;
import java.util.Objects;

View File

@@ -11,10 +11,12 @@ import com.github.gtache.autosubtitle.subtitle.converter.FormatException;
import com.github.gtache.autosubtitle.subtitle.converter.ParseException;
import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverter;
import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverterProvider;
import javax.inject.Inject;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.inject.Inject;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

View File

@@ -1,12 +1,16 @@
package com.github.gtache.autosubtitle.modules.setup.impl;
import com.github.gtache.autosubtitle.ToolType;
import com.github.gtache.autosubtitle.setup.SetupManager;
import org.junit.jupiter.api.Test;
import java.net.http.HttpClient;
import java.nio.file.Paths;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import static org.mockito.Mockito.mock;
class TestSetupModule {
@@ -24,4 +28,17 @@ class TestSetupModule {
void testHttpClient() {
assertInstanceOf(HttpClient.class, SetupModule.providesHttpClient());
}
@Test
void testSetupManagers() {
final var videoConverters = Map.of("test", mock(SetupManager.class));
final var subtitleExtractors = Map.of("test1", mock(SetupManager.class));
final var translators = Map.of("test2", mock(SetupManager.class));
final var expected = Map.of(ToolType.VIDEO_CONVERTER, videoConverters,
ToolType.SUBTITLE_EXTRACTOR, subtitleExtractors,
ToolType.TRANSLATOR, translators);
assertEquals(expected, SetupModule.providesSetupManagers(videoConverters, subtitleExtractors, translators));
}
}

View File

@@ -1,7 +1,6 @@
package com.github.gtache.autosubtitle.subtitle.converter.impl;
import com.github.gtache.autosubtitle.Language;
import com.github.gtache.autosubtitle.subtitle.Subtitle;
import com.github.gtache.autosubtitle.subtitle.converter.FormatOptions;
import com.github.gtache.autosubtitle.subtitle.converter.ParseException;
import com.github.gtache.autosubtitle.subtitle.converter.ParseOptions;
@@ -15,6 +14,7 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -25,19 +25,20 @@ import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class TestSRTSubtitleConverter {
private final Translator<Subtitle> translator;
private final Translator<?> translator;
private final Language language;
private final FormatOptions formatOptions;
private final ParseOptions parseOptions;
private final SRTSubtitleConverter converter;
TestSRTSubtitleConverter(@Mock final Translator<Subtitle> translator, @Mock final Language language,
TestSRTSubtitleConverter(@Mock final Translator<?> translator, @Mock final Language language,
@Mock final FormatOptions formatOptions, @Mock final ParseOptions parseOptions) {
this.translator = Objects.requireNonNull(translator);
this.language = Objects.requireNonNull(language);
this.formatOptions = Objects.requireNonNull(formatOptions);
this.parseOptions = Objects.requireNonNull(parseOptions);
this.converter = new SRTSubtitleConverter(translator);
final var translators = Map.<String, Translator<?>>of("first", translator);
this.converter = new SRTSubtitleConverter(translators);
}
@BeforeEach

View File

@@ -1,5 +1,6 @@
package com.github.gtache.autosubtitle.subtitle.converter.json.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.gtache.autosubtitle.Language;
import com.github.gtache.autosubtitle.subtitle.Subtitle;
@@ -24,6 +25,10 @@ import java.util.List;
import java.util.Objects;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
@@ -65,6 +70,22 @@ class TestJSONSubtitleConverter {
}
}
@Test
void testFormatError() throws JsonProcessingException {
final var faultyMapper = mock(ObjectMapper.class);
when(faultyMapper.writeValueAsString(any())).thenThrow(JsonProcessingException.class);
final var faultyConverter = new JSONSubtitleConverter(faultyMapper);
assertThrows(FormatException.class, () -> faultyConverter.format(new SubtitleCollectionImpl<>("test", List.of(), Language.FR), formatOptions));
}
@Test
void testParseError() throws JsonProcessingException {
final var faultyMapper = mock(ObjectMapper.class);
when(faultyMapper.readValue(anyString(), any(Class.class))).thenThrow(JsonProcessingException.class);
final var faultyConverter = new JSONSubtitleConverter(faultyMapper);
assertThrows(ParseException.class, () -> faultyConverter.parse("{}", parseOptions));
}
@ParameterizedTest
@CsvSource({
"test.json,true",