diff --git a/.idea/csv-editor.xml b/.idea/csv-editor.xml deleted file mode 100644 index 8470082..0000000 --- a/.idea/csv-editor.xml +++ /dev/null @@ -1,282 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index 84995dc..b35db42 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -580,98 +580,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml deleted file mode 100644 index 6d50cd4..0000000 --- a/.idea/uiDesigner.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index e7de95b..86b5654 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,37 +1,134 @@ - - - - + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - @@ -51,9 +148,7 @@ \ No newline at end of file diff --git a/whisper/common/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/PythonVersion.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/Whisper.java similarity index 79% rename from whisper/common/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/PythonVersion.java rename to whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/Whisper.java index dfec987..1da1e39 100644 --- a/whisper/common/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/PythonVersion.java +++ b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/Whisper.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.modules.setup.whisper; +package com.github.gtache.autosubtitle.modules.setup.whisper.base; import javax.inject.Qualifier; import java.lang.annotation.Documented; @@ -12,5 +12,5 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; @Documented @Retention(RUNTIME) @Target({ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD}) -public @interface PythonVersion { +public @interface Whisper { } diff --git a/whisper/common/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/WhisperBundledRoot.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperBundledRoot.java similarity index 85% rename from whisper/common/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/WhisperBundledRoot.java rename to whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperBundledRoot.java index ef225c8..34221e6 100644 --- a/whisper/common/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/WhisperBundledRoot.java +++ b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperBundledRoot.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.modules.setup.whisper; +package com.github.gtache.autosubtitle.modules.setup.whisper.base; import javax.inject.Qualifier; import java.lang.annotation.Documented; diff --git a/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperPythonVersion.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperPythonVersion.java new file mode 100644 index 0000000..774778b --- /dev/null +++ b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperPythonVersion.java @@ -0,0 +1,16 @@ +package com.github.gtache.autosubtitle.modules.setup.whisper.base; + +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 WhisperPythonVersion { +} diff --git a/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperSetupModule.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperSetupModule.java index 51383ab..dc92d1a 100644 --- a/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperSetupModule.java +++ b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperSetupModule.java @@ -1,30 +1,33 @@ package com.github.gtache.autosubtitle.modules.setup.whisper.base; +import com.github.gtache.autosubtitle.impl.OS; +import com.github.gtache.autosubtitle.modules.setup.conda.CondaSetupModule; import com.github.gtache.autosubtitle.modules.setup.impl.SubtitleExtractorSetup; import com.github.gtache.autosubtitle.modules.setup.impl.ToolsRoot; -import com.github.gtache.autosubtitle.modules.setup.whisper.PythonVersion; -import com.github.gtache.autosubtitle.modules.setup.whisper.WhisperBundledRoot; -import com.github.gtache.autosubtitle.modules.setup.whisper.WhisperCommonSetupModule; -import com.github.gtache.autosubtitle.modules.setup.whisper.WhisperVenvPath; import com.github.gtache.autosubtitle.setup.SetupManager; +import com.github.gtache.autosubtitle.setup.whisper.WhisperSetupConfiguration; import com.github.gtache.autosubtitle.setup.whisper.base.WhisperSetupManager; import dagger.Binds; import dagger.Module; import dagger.Provides; +import dagger.multibindings.IntoMap; +import dagger.multibindings.StringKey; import java.nio.file.Path; /** * Setup module for Whisper */ -@Module(includes = WhisperCommonSetupModule.class) +@Module(includes = CondaSetupModule.class) public abstract class WhisperSetupModule { @Binds @SubtitleExtractorSetup + @IntoMap + @StringKey("whisper") abstract SetupManager bindsSubtitleExtractorSetupManager(final WhisperSetupManager manager); @Provides - @PythonVersion + @WhisperPythonVersion static String providesPythonVersion() { return "3.9.19"; } @@ -40,4 +43,13 @@ public abstract class WhisperSetupModule { static Path providesWhisperVenvPath(@WhisperBundledRoot final Path root) { return root.resolve("whisper-env"); } + + @Provides + @Whisper + static WhisperSetupConfiguration providesWhisperSetupConfiguration(@WhisperBundledRoot final Path root, + @WhisperVenvPath final Path venvPath, + @WhisperPythonVersion final String pythonVersion, + final OS os) { + return new WhisperSetupConfiguration(root, venvPath, pythonVersion, os); + } } diff --git a/whisper/common/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/WhisperVenvPath.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperVenvPath.java similarity index 85% rename from whisper/common/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/WhisperVenvPath.java rename to whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperVenvPath.java index 85d9eeb..9977780 100644 --- a/whisper/common/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/WhisperVenvPath.java +++ b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/base/WhisperVenvPath.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.modules.setup.whisper; +package com.github.gtache.autosubtitle.modules.setup.whisper.base; import javax.inject.Qualifier; import java.lang.annotation.Documented; diff --git a/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/subtitle/extractor/whisper/base/WhisperExtractorModule.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/subtitle/extractor/whisper/base/WhisperExtractorModule.java index ed0bfbd..1d9002f 100644 --- a/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/subtitle/extractor/whisper/base/WhisperExtractorModule.java +++ b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/subtitle/extractor/whisper/base/WhisperExtractorModule.java @@ -4,6 +4,8 @@ import com.github.gtache.autosubtitle.subtitle.extractor.SubtitleExtractor; import com.github.gtache.autosubtitle.subtitle.extractor.whisper.base.WhisperSubtitleExtractor; import dagger.Binds; import dagger.Module; +import dagger.multibindings.IntoMap; +import dagger.multibindings.StringKey; /** * Dagger module for Whisper @@ -16,5 +18,7 @@ public abstract class WhisperExtractorModule { } @Binds - abstract SubtitleExtractor bindsSubtitleExtractor(final WhisperSubtitleExtractor extractor); + @IntoMap + @StringKey("whisper") + abstract SubtitleExtractor bindsSubtitleExtractor(final WhisperSubtitleExtractor extractor); } diff --git a/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/subtitle/parser/json/whisper/base/WhisperJsonModule.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/subtitle/parser/json/whisper/base/WhisperJsonModule.java deleted file mode 100644 index 4ff93e6..0000000 --- a/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/subtitle/parser/json/whisper/base/WhisperJsonModule.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.github.gtache.autosubtitle.modules.subtitle.parser.json.whisper.base; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverter; -import com.github.gtache.autosubtitle.subtitle.parser.json.whisper.base.JSONSubtitleConverter; -import dagger.Binds; -import dagger.Module; -import dagger.Provides; -import dagger.multibindings.IntoMap; -import dagger.multibindings.StringKey; - -import javax.inject.Singleton; - -@Module -public abstract class WhisperJsonModule { - - private WhisperJsonModule() { - - } - - @Binds - @IntoMap - @StringKey("json") - abstract SubtitleConverter bindsJSONSubtitleConverter(final JSONSubtitleConverter subtitleConverter); - - @Provides - @Singleton - static ObjectMapper providesObjectMapper() { - return new ObjectMapper(); - } -} diff --git a/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/whisper/base/WhisperModule.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/whisper/base/WhisperModule.java index 1921f89..c9d1ed9 100644 --- a/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/whisper/base/WhisperModule.java +++ b/whisper/base/src/main/java/com/github/gtache/autosubtitle/modules/whisper/base/WhisperModule.java @@ -2,16 +2,17 @@ package com.github.gtache.autosubtitle.modules.whisper.base; import com.github.gtache.autosubtitle.modules.setup.whisper.base.WhisperSetupModule; import com.github.gtache.autosubtitle.modules.subtitle.extractor.whisper.base.WhisperExtractorModule; -import com.github.gtache.autosubtitle.modules.subtitle.parser.json.whisper.base.WhisperJsonModule; import com.github.gtache.autosubtitle.subtitle.extractor.ExtractionModelProvider; import com.github.gtache.autosubtitle.whisper.base.WhisperExtractionModelProvider; import dagger.Binds; import dagger.Module; +import dagger.multibindings.IntoMap; +import dagger.multibindings.StringKey; /** * Dagger module for Whisper */ -@Module(includes = {WhisperSetupModule.class, WhisperJsonModule.class, WhisperExtractorModule.class}) +@Module(includes = {WhisperSetupModule.class, WhisperExtractorModule.class}) public abstract class WhisperModule { private WhisperModule() { @@ -19,5 +20,7 @@ public abstract class WhisperModule { } @Binds + @IntoMap + @StringKey("whisper") abstract ExtractionModelProvider bindsExtractionModelProvider(final WhisperExtractionModelProvider provider); } diff --git a/whisper/base/src/main/java/com/github/gtache/autosubtitle/setup/whisper/base/WhisperSetupManager.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/setup/whisper/base/WhisperSetupManager.java index 876851a..e36ff8b 100644 --- a/whisper/base/src/main/java/com/github/gtache/autosubtitle/setup/whisper/base/WhisperSetupManager.java +++ b/whisper/base/src/main/java/com/github/gtache/autosubtitle/setup/whisper/base/WhisperSetupManager.java @@ -1,7 +1,9 @@ package com.github.gtache.autosubtitle.setup.whisper.base; +import com.github.gtache.autosubtitle.modules.setup.whisper.base.Whisper; import com.github.gtache.autosubtitle.process.ProcessRunner; import com.github.gtache.autosubtitle.setup.SetupException; +import com.github.gtache.autosubtitle.setup.SetupManager; import com.github.gtache.autosubtitle.setup.conda.CondaSetupManager; import com.github.gtache.autosubtitle.setup.whisper.AbstractWhisperSetupManager; import com.github.gtache.autosubtitle.setup.whisper.WhisperSetupConfiguration; @@ -17,7 +19,7 @@ import java.time.Duration; import java.util.List; /** - * {@link com.github.gtache.autosubtitle.setup.SetupManager} for Whisper + * {@link SetupManager} for Whisper */ @Singleton public class WhisperSetupManager extends AbstractWhisperSetupManager { @@ -25,7 +27,7 @@ public class WhisperSetupManager extends AbstractWhisperSetupManager { private static final Logger logger = LogManager.getLogger(WhisperSetupManager.class); @Inject - WhisperSetupManager(final CondaSetupManager condaSetupManager, final WhisperSetupConfiguration configuration, + WhisperSetupManager(final CondaSetupManager condaSetupManager, @Whisper final WhisperSetupConfiguration configuration, final ProcessRunner processRunner, final HttpClient httpClient) { super(condaSetupManager, configuration, processRunner, httpClient); } diff --git a/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisper/base/JSONSubtitleConverter.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisper/base/JSONSubtitleConverter.java similarity index 97% rename from whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisper/base/JSONSubtitleConverter.java rename to whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisper/base/JSONSubtitleConverter.java index b5c2688..a4e83dd 100644 --- a/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisper/base/JSONSubtitleConverter.java +++ b/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisper/base/JSONSubtitleConverter.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.subtitle.parser.json.whisper.base; +package com.github.gtache.autosubtitle.subtitle.converter.json.whisper.base; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisper/base/JSONSubtitleSegment.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisper/base/JSONSubtitleSegment.java similarity index 79% rename from whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisper/base/JSONSubtitleSegment.java rename to whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisper/base/JSONSubtitleSegment.java index 61d37cd..4d964f3 100644 --- a/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisper/base/JSONSubtitleSegment.java +++ b/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisper/base/JSONSubtitleSegment.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.subtitle.parser.json.whisper.base; +package com.github.gtache.autosubtitle.subtitle.converter.json.whisper.base; import java.util.List; diff --git a/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisper/base/JSONSubtitles.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisper/base/JSONSubtitles.java similarity index 61% rename from whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisper/base/JSONSubtitles.java rename to whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisper/base/JSONSubtitles.java index 37009ef..01cb43f 100644 --- a/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisper/base/JSONSubtitles.java +++ b/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisper/base/JSONSubtitles.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.subtitle.parser.json.whisper.base; +package com.github.gtache.autosubtitle.subtitle.converter.json.whisper.base; import java.util.List; diff --git a/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/extractor/whisper/base/WhisperSubtitleExtractor.java b/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/extractor/whisper/base/WhisperSubtitleExtractor.java index 5b5eab4..b98fc45 100644 --- a/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/extractor/whisper/base/WhisperSubtitleExtractor.java +++ b/whisper/base/src/main/java/com/github/gtache/autosubtitle/subtitle/extractor/whisper/base/WhisperSubtitleExtractor.java @@ -2,9 +2,9 @@ package com.github.gtache.autosubtitle.subtitle.extractor.whisper.base; import com.github.gtache.autosubtitle.Language; import com.github.gtache.autosubtitle.impl.OS; -import com.github.gtache.autosubtitle.modules.setup.whisper.WhisperVenvPath; +import com.github.gtache.autosubtitle.modules.setup.whisper.base.WhisperVenvPath; import com.github.gtache.autosubtitle.process.ProcessRunner; -import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverterProvider; +import com.github.gtache.autosubtitle.subtitle.converter.json.whisper.base.JSONSubtitleConverter; import com.github.gtache.autosubtitle.subtitle.extractor.ExtractOptions; import com.github.gtache.autosubtitle.subtitle.extractor.SubtitleExtractor; import com.github.gtache.autosubtitle.subtitle.extractor.whisper.AbstractWhisperSubtitleExtractor; @@ -24,9 +24,9 @@ public class WhisperSubtitleExtractor extends AbstractWhisperSubtitleExtractor { @Inject - WhisperSubtitleExtractor(@WhisperVenvPath final Path venvPath, final SubtitleConverterProvider converterProvider, + WhisperSubtitleExtractor(@WhisperVenvPath final Path venvPath, final JSONSubtitleConverter converter, final ProcessRunner processRunner, final OS os) { - super(venvPath, converterProvider, processRunner, os); + super(venvPath, converter, processRunner, os); } @Override diff --git a/whisper/base/src/main/java/module-info.java b/whisper/base/src/main/java/module-info.java index 8e9dab7..77c7a4a 100644 --- a/whisper/base/src/main/java/module-info.java +++ b/whisper/base/src/main/java/module-info.java @@ -3,13 +3,13 @@ */ module com.github.gtache.autosubtitle.whisper.base { requires transitive com.github.gtache.autosubtitle.whisper.common; - requires com.fasterxml.jackson.databind; - requires com.github.gtache.autosubtitle.core; requires org.apache.logging.log4j; exports com.github.gtache.autosubtitle.setup.whisper.base; + exports com.github.gtache.autosubtitle.subtitle.converter.json.whisper.base; exports com.github.gtache.autosubtitle.subtitle.extractor.whisper.base; exports com.github.gtache.autosubtitle.whisper.base; + exports com.github.gtache.autosubtitle.modules.setup.whisper.base; exports com.github.gtache.autosubtitle.modules.subtitle.extractor.whisper.base; exports com.github.gtache.autosubtitle.modules.whisper.base; diff --git a/whisper/common/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/WhisperCommonSetupModule.java b/whisper/common/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/WhisperCommonSetupModule.java deleted file mode 100644 index f4498e0..0000000 --- a/whisper/common/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisper/WhisperCommonSetupModule.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.github.gtache.autosubtitle.modules.setup.whisper; - -import com.github.gtache.autosubtitle.impl.OS; -import com.github.gtache.autosubtitle.modules.setup.conda.CondaSetupModule; -import com.github.gtache.autosubtitle.setup.whisper.WhisperSetupConfiguration; -import dagger.Module; -import dagger.Provides; - -import java.nio.file.Path; - -@Module(includes = CondaSetupModule.class) -public final class WhisperCommonSetupModule { - - private WhisperCommonSetupModule() { - - } - - @Provides - static WhisperSetupConfiguration providesWhisperSetupConfiguration(@WhisperBundledRoot final Path root, - @WhisperVenvPath final Path venvPath, - @PythonVersion final String pythonVersion, - final OS os) { - return new WhisperSetupConfiguration(root, venvPath, pythonVersion, os); - } -} diff --git a/whisper/common/src/main/java/com/github/gtache/autosubtitle/setup/whisper/AbstractWhisperSetupManager.java b/whisper/common/src/main/java/com/github/gtache/autosubtitle/setup/whisper/AbstractWhisperSetupManager.java index aa1d57d..f3c93d3 100644 --- a/whisper/common/src/main/java/com/github/gtache/autosubtitle/setup/whisper/AbstractWhisperSetupManager.java +++ b/whisper/common/src/main/java/com/github/gtache/autosubtitle/setup/whisper/AbstractWhisperSetupManager.java @@ -1,5 +1,6 @@ package com.github.gtache.autosubtitle.setup.whisper; +import com.github.gtache.autosubtitle.ToolType; import com.github.gtache.autosubtitle.impl.OS; import com.github.gtache.autosubtitle.process.ProcessRunner; import com.github.gtache.autosubtitle.setup.SetupAction; @@ -35,6 +36,11 @@ public abstract class AbstractWhisperSetupManager extends AbstractSetupManager { this.configuration = requireNonNull(configuration); } + @Override + public ToolType type() { + return ToolType.SUBTITLE_EXTRACTOR; + } + @Override protected SetupStatus getStatus() throws SetupException { if (isWhisperInstalled()) { diff --git a/whisper/common/src/main/java/com/github/gtache/autosubtitle/subtitle/extractor/whisper/AbstractWhisperSubtitleExtractor.java b/whisper/common/src/main/java/com/github/gtache/autosubtitle/subtitle/extractor/whisper/AbstractWhisperSubtitleExtractor.java index eed44bc..8e98cff 100644 --- a/whisper/common/src/main/java/com/github/gtache/autosubtitle/subtitle/extractor/whisper/AbstractWhisperSubtitleExtractor.java +++ b/whisper/common/src/main/java/com/github/gtache/autosubtitle/subtitle/extractor/whisper/AbstractWhisperSubtitleExtractor.java @@ -5,17 +5,16 @@ import com.github.gtache.autosubtitle.File; import com.github.gtache.autosubtitle.Video; import com.github.gtache.autosubtitle.impl.OS; import com.github.gtache.autosubtitle.process.ProcessRunner; -import com.github.gtache.autosubtitle.subtitle.Subtitle; import com.github.gtache.autosubtitle.subtitle.SubtitleCollection; 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 com.github.gtache.autosubtitle.subtitle.extractor.ExtractEvent; import com.github.gtache.autosubtitle.subtitle.extractor.ExtractException; import com.github.gtache.autosubtitle.subtitle.extractor.ExtractOptions; import com.github.gtache.autosubtitle.subtitle.extractor.SubtitleExtractor; import com.github.gtache.autosubtitle.subtitle.extractor.SubtitleExtractorListener; import com.github.gtache.autosubtitle.subtitle.extractor.impl.ExtractEventImpl; +import com.github.gtache.autosubtitle.subtitle.impl.SubtitleImpl; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -34,7 +33,7 @@ import static java.util.Objects.requireNonNull; /** * Base implementation of {@link SubtitleExtractor} for Whisper */ -public abstract class AbstractWhisperSubtitleExtractor implements SubtitleExtractor { +public abstract class AbstractWhisperSubtitleExtractor implements SubtitleExtractor { private static final Logger logger = LogManager.getLogger(AbstractWhisperSubtitleExtractor.class); @@ -44,14 +43,14 @@ public abstract class AbstractWhisperSubtitleExtractor implements SubtitleExtrac private static final Pattern TQDM_PROGRESS_PATTERN = Pattern.compile("^(?\\d{1,3})%\\|.+"); private final Path venvPath; private final ProcessRunner processRunner; - private final SubtitleConverter converter; + private final SubtitleConverter converter; private final OS os; private final Set listeners; - protected AbstractWhisperSubtitleExtractor(final Path venvPath, final SubtitleConverterProvider converterProvider, + protected AbstractWhisperSubtitleExtractor(final Path venvPath, final SubtitleConverter converter, final ProcessRunner processRunner, final OS os) { this.venvPath = requireNonNull(venvPath); - this.converter = requireNonNull(converterProvider.getConverter("json")); + this.converter = requireNonNull(converter); this.processRunner = requireNonNull(processRunner); this.os = requireNonNull(os); this.listeners = new HashSet<>(); @@ -78,16 +77,16 @@ public abstract class AbstractWhisperSubtitleExtractor implements SubtitleExtrac @Override - public SubtitleCollection extract(final Video video, final ExtractOptions options) throws ExtractException { + public SubtitleCollection extract(final Video video, final ExtractOptions options) throws ExtractException { return extract(new AudioOrVideo(video), options); } @Override - public SubtitleCollection extract(final Audio audio, final ExtractOptions options) throws ExtractException { + public SubtitleCollection extract(final Audio audio, final ExtractOptions options) throws ExtractException { return extract(new AudioOrVideo(audio), options); } - private SubtitleCollection extract(final AudioOrVideo av, final ExtractOptions options) throws ExtractException { + private SubtitleCollection extract(final AudioOrVideo av, final ExtractOptions options) throws ExtractException { if (av.inner() instanceof final File f) { return extract(f.path(), options, av.info().duration()); } else { @@ -99,7 +98,7 @@ public abstract class AbstractWhisperSubtitleExtractor implements SubtitleExtrac } } - private SubtitleCollection dumpExtract(final AudioOrVideo av, final ExtractOptions options) throws ExtractException, IOException { + private SubtitleCollection dumpExtract(final AudioOrVideo av, final ExtractOptions options) throws ExtractException, IOException { final var path = Files.createTempFile(AUTOSUBTITLE, "." + av.info().format()); try (final var in = av.getInputStream()) { Files.copy(in, path, StandardCopyOption.REPLACE_EXISTING); @@ -109,7 +108,7 @@ public abstract class AbstractWhisperSubtitleExtractor implements SubtitleExtrac } } - private SubtitleCollection extract(final Path path, final ExtractOptions options, final long duration) throws ExtractException { + private SubtitleCollection extract(final Path path, final ExtractOptions options, final long duration) throws ExtractException { try { final var outputDir = Files.createTempDirectory(AUTOSUBTITLE); final var args = createArgs(path, options, outputDir); @@ -137,7 +136,7 @@ public abstract class AbstractWhisperSubtitleExtractor implements SubtitleExtrac } } - private SubtitleCollection parseResult(final Path subtitleFile, final ExtractOptions options) throws ExtractException { + private SubtitleCollection parseResult(final Path subtitleFile, final ExtractOptions options) throws ExtractException { try { return converter.parse(subtitleFile, options.parseOptions()); } catch (final ParseException e) { diff --git a/whisper/common/src/main/java/module-info.java b/whisper/common/src/main/java/module-info.java index bfa7231..8cfd6ec 100644 --- a/whisper/common/src/main/java/module-info.java +++ b/whisper/common/src/main/java/module-info.java @@ -10,5 +10,4 @@ module com.github.gtache.autosubtitle.whisper.common { exports com.github.gtache.autosubtitle.whisper; exports com.github.gtache.autosubtitle.setup.whisper; exports com.github.gtache.autosubtitle.subtitle.extractor.whisper; - exports com.github.gtache.autosubtitle.modules.setup.whisper; } \ No newline at end of file diff --git a/whisper/common/src/test/java/com/github/gtache/autosubtitle/modules/setup/whisper/TestWhisperCommonSetupModule.java b/whisper/common/src/test/java/com/github/gtache/autosubtitle/modules/setup/whisper/TestWhisperCommonSetupModule.java deleted file mode 100644 index 07069b4..0000000 --- a/whisper/common/src/test/java/com/github/gtache/autosubtitle/modules/setup/whisper/TestWhisperCommonSetupModule.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.github.gtache.autosubtitle.modules.setup.whisper; - -import com.github.gtache.autosubtitle.impl.OS; -import com.github.gtache.autosubtitle.setup.whisper.WhisperSetupConfiguration; -import org.junit.jupiter.api.Test; - -import java.nio.file.Path; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.mock; - -class TestWhisperCommonSetupModule { - - @Test - void testWhisperSetupConfiguration() { - final var root = mock(Path.class); - final var venvPath = mock(Path.class); - final var pythonVersion = "3.10"; - final var os = OS.LINUX; - final var expected = new WhisperSetupConfiguration(root, venvPath, pythonVersion, os); - assertEquals(expected, WhisperCommonSetupModule.providesWhisperSetupConfiguration(root, venvPath, pythonVersion, os)); - } -} diff --git a/whisper/common/src/test/java/com/github/gtache/autosubtitle/setup/whisper/TestAbstractWhisperSetupManager.java b/whisper/common/src/test/java/com/github/gtache/autosubtitle/setup/whisper/TestAbstractWhisperSetupManager.java index 8e9e8e8..3179140 100644 --- a/whisper/common/src/test/java/com/github/gtache/autosubtitle/setup/whisper/TestAbstractWhisperSetupManager.java +++ b/whisper/common/src/test/java/com/github/gtache/autosubtitle/setup/whisper/TestAbstractWhisperSetupManager.java @@ -1,5 +1,6 @@ package com.github.gtache.autosubtitle.setup.whisper; +import com.github.gtache.autosubtitle.ToolType; import com.github.gtache.autosubtitle.impl.OS; import com.github.gtache.autosubtitle.process.ProcessRunner; import com.github.gtache.autosubtitle.setup.SetupException; @@ -53,6 +54,11 @@ class TestAbstractWhisperSetupManager { assertEquals(BUNDLE_INSTALLED, setupManager.getStatus()); } + @Test + void testType() { + assertEquals(ToolType.SUBTITLE_EXTRACTOR, setupManager.type()); + } + @Test void testInstallAlreadyInstalled() throws SetupException { final var venvPath = Paths.get("path"); diff --git a/whisper/common/src/test/java/com/github/gtache/autosubtitle/subtitle/extractor/whisper/TestAbstractWhisperSubtitleExtractor.java b/whisper/common/src/test/java/com/github/gtache/autosubtitle/subtitle/extractor/whisper/TestAbstractWhisperSubtitleExtractor.java index 6308c11..bb25b2d 100644 --- a/whisper/common/src/test/java/com/github/gtache/autosubtitle/subtitle/extractor/whisper/TestAbstractWhisperSubtitleExtractor.java +++ b/whisper/common/src/test/java/com/github/gtache/autosubtitle/subtitle/extractor/whisper/TestAbstractWhisperSubtitleExtractor.java @@ -9,17 +9,16 @@ import com.github.gtache.autosubtitle.impl.OS; import com.github.gtache.autosubtitle.process.ProcessListener; import com.github.gtache.autosubtitle.process.ProcessResult; import com.github.gtache.autosubtitle.process.ProcessRunner; -import com.github.gtache.autosubtitle.subtitle.Subtitle; import com.github.gtache.autosubtitle.subtitle.SubtitleCollection; import com.github.gtache.autosubtitle.subtitle.converter.ParseException; import com.github.gtache.autosubtitle.subtitle.converter.ParseOptions; import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverter; -import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverterProvider; import com.github.gtache.autosubtitle.subtitle.extractor.ExtractEvent; import com.github.gtache.autosubtitle.subtitle.extractor.ExtractException; import com.github.gtache.autosubtitle.subtitle.extractor.ExtractOptions; import com.github.gtache.autosubtitle.subtitle.extractor.SubtitleExtractorListener; import com.github.gtache.autosubtitle.subtitle.extractor.impl.ExtractEventImpl; +import com.github.gtache.autosubtitle.subtitle.impl.SubtitleImpl; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -42,8 +41,7 @@ import static org.mockito.Mockito.*; class TestAbstractWhisperSubtitleExtractor { private final Path venvPath; - private final SubtitleConverter converter; - private final SubtitleConverterProvider converterProvider; + private final SubtitleConverter converter; private final ProcessRunner processRunner; private final ProcessListener processListener; private final ProcessResult processResult; @@ -54,17 +52,16 @@ class TestAbstractWhisperSubtitleExtractor { private final VideoInfo videoInfo; private final ExtractOptions options; private final ParseOptions parseOptions; - private final SubtitleCollection collection; + private final SubtitleCollection collection; - TestAbstractWhisperSubtitleExtractor(@Mock final SubtitleConverterProvider converterProvider, @Mock final SubtitleConverter converter, + TestAbstractWhisperSubtitleExtractor(@Mock final SubtitleConverter converter, @Mock final ProcessRunner processRunner, @Mock final ProcessListener processListener, @Mock final ProcessResult processResult, @Mock final VideoInfo videoInfo, @Mock final AudioInfo audioInfo, @Mock final ExtractOptions options, - @Mock final ParseOptions parseOptions, @Mock final SubtitleCollection collection) { + @Mock final ParseOptions parseOptions, @Mock final SubtitleCollection collection) { this.venvPath = Path.of("venv"); this.os = OS.LINUX; - this.converterProvider = Objects.requireNonNull(converterProvider); this.converter = Objects.requireNonNull(converter); this.processRunner = Objects.requireNonNull(processRunner); this.processListener = Objects.requireNonNull(processListener); @@ -78,13 +75,12 @@ class TestAbstractWhisperSubtitleExtractor { @BeforeEach void beforeEach() throws IOException { - doReturn(converter).when(converterProvider).getConverter("json"); when(processRunner.startListen(anyList())).thenReturn(processListener); when(processListener.join(Duration.ofHours(1))).thenReturn(processResult); when(audioInfo.format()).thenReturn("mp3"); when(videoInfo.format()).thenReturn("mp4"); when(options.parseOptions()).thenReturn(parseOptions); - this.extractor = new DummyWhisperSubtitleExtractor(venvPath, converterProvider, processRunner, os); + this.extractor = new DummyWhisperSubtitleExtractor(venvPath, converter, processRunner, os); } @Test @@ -200,14 +196,14 @@ class TestAbstractWhisperSubtitleExtractor { @Test void testGetPythonPathWindows() { - final var windowsExtractor = new DummyWhisperSubtitleExtractor(venvPath, converterProvider, processRunner, OS.WINDOWS); + final var windowsExtractor = new DummyWhisperSubtitleExtractor(venvPath, converter, processRunner, OS.WINDOWS); assertEquals(venvPath.resolve("python.exe"), windowsExtractor.getPythonPath()); } private static final class DummyWhisperSubtitleExtractor extends AbstractWhisperSubtitleExtractor { - private DummyWhisperSubtitleExtractor(final Path venvPath, final SubtitleConverterProvider converterProvider, final ProcessRunner processRunner, final OS os) { - super(venvPath, converterProvider, processRunner, os); + private DummyWhisperSubtitleExtractor(final Path venvPath, final SubtitleConverter converter, final ProcessRunner processRunner, final OS os) { + super(venvPath, converter, processRunner, os); } @Override diff --git a/whisper/whisperx/pom.xml b/whisper/whisperx/pom.xml index 208da9f..0535cc7 100644 --- a/whisper/whisperx/pom.xml +++ b/whisper/whisperx/pom.xml @@ -16,9 +16,5 @@ com.github.gtache.autosubtitle autosubtitle-whisper-common - - com.fasterxml.jackson.core - jackson-databind - \ No newline at end of file diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperX.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperX.java new file mode 100644 index 0000000..09f96c2 --- /dev/null +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperX.java @@ -0,0 +1,16 @@ +package com.github.gtache.autosubtitle.modules.setup.whisperx; + +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 WhisperX { +} diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXBundledRoot.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXBundledRoot.java new file mode 100644 index 0000000..7b9ddcb --- /dev/null +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXBundledRoot.java @@ -0,0 +1,16 @@ +package com.github.gtache.autosubtitle.modules.setup.whisperx; + +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 WhisperXBundledRoot { +} diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXPythonVersion.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXPythonVersion.java new file mode 100644 index 0000000..057dd50 --- /dev/null +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXPythonVersion.java @@ -0,0 +1,16 @@ +package com.github.gtache.autosubtitle.modules.setup.whisperx; + +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 WhisperXPythonVersion { +} diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXSetupModule.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXSetupModule.java index 7251483..2419b46 100644 --- a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXSetupModule.java +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXSetupModule.java @@ -1,43 +1,59 @@ package com.github.gtache.autosubtitle.modules.setup.whisperx; +import com.github.gtache.autosubtitle.impl.OS; +import com.github.gtache.autosubtitle.modules.setup.conda.CondaSetupModule; import com.github.gtache.autosubtitle.modules.setup.impl.SubtitleExtractorSetup; import com.github.gtache.autosubtitle.modules.setup.impl.ToolsRoot; -import com.github.gtache.autosubtitle.modules.setup.whisper.PythonVersion; -import com.github.gtache.autosubtitle.modules.setup.whisper.WhisperBundledRoot; -import com.github.gtache.autosubtitle.modules.setup.whisper.WhisperCommonSetupModule; -import com.github.gtache.autosubtitle.modules.setup.whisper.WhisperVenvPath; import com.github.gtache.autosubtitle.setup.SetupManager; +import com.github.gtache.autosubtitle.setup.whisper.WhisperSetupConfiguration; import com.github.gtache.autosubtitle.setup.whisperx.WhisperXSetupManager; import dagger.Binds; import dagger.Module; import dagger.Provides; +import dagger.multibindings.IntoMap; +import dagger.multibindings.StringKey; import java.nio.file.Path; /** * Setup module for Whisper */ -@Module(includes = WhisperCommonSetupModule.class) +@Module(includes = CondaSetupModule.class) public abstract class WhisperXSetupModule { @Binds @SubtitleExtractorSetup + @IntoMap + @StringKey("whisperx") abstract SetupManager bindsSubtitleExtractorSetupManager(final WhisperXSetupManager manager); + @Binds + @SubtitleExtractorSetup + abstract SetupManager bindsDefaultSubtitleExtractorSetupManager(final WhisperXSetupManager manager); + @Provides - @PythonVersion + @WhisperXPythonVersion static String providesPythonVersion() { return "3.10"; } @Provides - @WhisperBundledRoot + @WhisperXBundledRoot static Path providesWhisperXBundledRoot(@ToolsRoot final Path root) { return root.resolve("whisperx"); } @Provides - @WhisperVenvPath - static Path providesWhisperXVenvPath(@WhisperBundledRoot final Path root) { + @WhisperXVenvPath + static Path providesWhisperXVenvPath(@WhisperXBundledRoot final Path root) { return root.resolve("whisperx-env"); } + + @Provides + @WhisperX + static WhisperSetupConfiguration providesWhisperSetupConfiguration(@WhisperXBundledRoot final Path root, + @WhisperXVenvPath final Path venvPath, + @WhisperXPythonVersion final String pythonVersion, + final OS os) { + return new WhisperSetupConfiguration(root, venvPath, pythonVersion, os); + } } diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXVenvPath.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXVenvPath.java new file mode 100644 index 0000000..011ba9d --- /dev/null +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/setup/whisperx/WhisperXVenvPath.java @@ -0,0 +1,16 @@ +package com.github.gtache.autosubtitle.modules.setup.whisperx; + +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 WhisperXVenvPath { +} diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/subtitle/extractor/whisperx/WhisperXExtractorModule.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/subtitle/extractor/whisperx/WhisperXExtractorModule.java index 3699582..ca87d46 100644 --- a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/subtitle/extractor/whisperx/WhisperXExtractorModule.java +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/subtitle/extractor/whisperx/WhisperXExtractorModule.java @@ -4,6 +4,8 @@ import com.github.gtache.autosubtitle.subtitle.extractor.SubtitleExtractor; import com.github.gtache.autosubtitle.subtitle.extractor.whisperx.WhisperXSubtitleExtractor; import dagger.Binds; import dagger.Module; +import dagger.multibindings.IntoMap; +import dagger.multibindings.StringKey; /** * Dagger module for Whisper @@ -16,5 +18,10 @@ public abstract class WhisperXExtractorModule { } @Binds - abstract SubtitleExtractor bindsSubtitleExtractor(final WhisperXSubtitleExtractor extractor); + @IntoMap + @StringKey("whisperx") + abstract SubtitleExtractor bindsSubtitleExtractor(final WhisperXSubtitleExtractor extractor); + + @Binds + abstract SubtitleExtractor providesDefaultSubtitleExtractor(final WhisperXSubtitleExtractor extractor); } diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/whisperx/WhisperXModule.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/whisperx/WhisperXModule.java index 0eb279b..fa760f6 100644 --- a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/whisperx/WhisperXModule.java +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/modules/whisperx/WhisperXModule.java @@ -2,16 +2,17 @@ package com.github.gtache.autosubtitle.modules.whisperx; import com.github.gtache.autosubtitle.modules.setup.whisperx.WhisperXSetupModule; import com.github.gtache.autosubtitle.modules.subtitle.extractor.whisperx.WhisperXExtractorModule; -import com.github.gtache.autosubtitle.modules.subtitle.parser.json.whisperx.WhisperXJsonModule; import com.github.gtache.autosubtitle.subtitle.extractor.ExtractionModelProvider; import com.github.gtache.autosubtitle.whisperx.WhisperXExtractionModelProvider; import dagger.Binds; import dagger.Module; +import dagger.multibindings.IntoMap; +import dagger.multibindings.StringKey; /** * Dagger module for Whisper */ -@Module(includes = {WhisperXSetupModule.class, WhisperXJsonModule.class, WhisperXExtractorModule.class}) +@Module(includes = {WhisperXSetupModule.class, WhisperXExtractorModule.class}) public abstract class WhisperXModule { private WhisperXModule() { @@ -19,5 +20,10 @@ public abstract class WhisperXModule { } @Binds + @IntoMap + @StringKey("whisperx") abstract ExtractionModelProvider bindsExtractionModelProvider(final WhisperXExtractionModelProvider provider); + + @Binds + abstract ExtractionModelProvider bindsDefaultExtractionModelProvider(final WhisperXExtractionModelProvider provider); } diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/setup/whisperx/WhisperXSetupManager.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/setup/whisperx/WhisperXSetupManager.java index 04f65eb..cfa98ab 100644 --- a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/setup/whisperx/WhisperXSetupManager.java +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/setup/whisperx/WhisperXSetupManager.java @@ -1,7 +1,10 @@ package com.github.gtache.autosubtitle.setup.whisperx; +import com.github.gtache.autosubtitle.modules.setup.whisperx.WhisperX; import com.github.gtache.autosubtitle.process.ProcessRunner; import com.github.gtache.autosubtitle.setup.SetupException; +import com.github.gtache.autosubtitle.setup.SetupManager; +import com.github.gtache.autosubtitle.setup.SetupUserBridge; import com.github.gtache.autosubtitle.setup.conda.CondaSetupManager; import com.github.gtache.autosubtitle.setup.whisper.AbstractWhisperSetupManager; import com.github.gtache.autosubtitle.setup.whisper.WhisperSetupConfiguration; @@ -16,18 +19,22 @@ import java.nio.file.Files; import java.time.Duration; import java.util.List; +import static java.util.Objects.requireNonNull; + /** - * {@link com.github.gtache.autosubtitle.setup.SetupManager} for WhisperX + * {@link SetupManager} for WhisperX */ @Singleton public class WhisperXSetupManager extends AbstractWhisperSetupManager { private static final Logger logger = LogManager.getLogger(WhisperXSetupManager.class); + private final SetupUserBridge setupUserBridge; @Inject - WhisperXSetupManager(final CondaSetupManager condaSetupManager, final WhisperSetupConfiguration configuration, - final ProcessRunner processRunner, final HttpClient httpClient) { + WhisperXSetupManager(final CondaSetupManager condaSetupManager, @WhisperX final WhisperSetupConfiguration configuration, + final SetupUserBridge setupUserBridge, final ProcessRunner processRunner, final HttpClient httpClient) { super(condaSetupManager, configuration, processRunner, httpClient); + this.setupUserBridge = requireNonNull(setupUserBridge); } @Override @@ -35,6 +42,7 @@ public class WhisperXSetupManager extends AbstractWhisperSetupManager { return "WhisperX"; } + @Override protected void installWhisper() throws SetupException { final var path = getPythonPath(); @@ -42,6 +50,7 @@ public class WhisperXSetupManager extends AbstractWhisperSetupManager { logger.info("Installing whisper"); final var result = processRunner().run(List.of(path.toString(), "-m", "pip", "install", "-U", "git+https://github.com/m-bain/whisperx.git", "numpy<2"), Duration.ofMinutes(15)); if (result.exitCode() == 0) { + checkInstallCuda(); logger.info("Whisper installed"); } else { throw new SetupException("Error installing whisper: " + result.output()); @@ -51,6 +60,12 @@ public class WhisperXSetupManager extends AbstractWhisperSetupManager { } } + private void checkInstallCuda() { + if (setupUserBridge.askForUserConfirmation("WhisperX can use CUDA. Do you want to install it?")) { + //TODO install CUDA "conda install cudnn=8" + } + } + @Override protected boolean isWhisperInstalled() throws SetupException { final var path = getPythonPath(); diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/JSONSubtitleSegment.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/JSONSubtitleSegment.java similarity index 64% rename from whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/JSONSubtitleSegment.java rename to whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/JSONSubtitleSegment.java index 70f78c9..1148e25 100644 --- a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/JSONSubtitleSegment.java +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/JSONSubtitleSegment.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.subtitle.parser.json.whisperx; +package com.github.gtache.autosubtitle.subtitle.converter.json.whisperx; import java.util.List; diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/JSONSubtitleWords.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/JSONSubtitleWords.java similarity index 55% rename from whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/JSONSubtitleWords.java rename to whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/JSONSubtitleWords.java index 63c9304..9417217 100644 --- a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/JSONSubtitleWords.java +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/JSONSubtitleWords.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.subtitle.parser.json.whisperx; +package com.github.gtache.autosubtitle.subtitle.converter.json.whisperx; public record JSONSubtitleWords(String word, double start, double end, double score) { } diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/JSONSubtitles.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/JSONSubtitles.java similarity index 74% rename from whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/JSONSubtitles.java rename to whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/JSONSubtitles.java index 6f7afae..4d3e06e 100644 --- a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/JSONSubtitles.java +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/JSONSubtitles.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.subtitle.parser.json.whisperx; +package com.github.gtache.autosubtitle.subtitle.converter.json.whisperx; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/JSONSubtitleConverter.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/WhisperXJSONSubtitleConverter.java similarity index 96% rename from whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/JSONSubtitleConverter.java rename to whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/WhisperXJSONSubtitleConverter.java index 5e926fe..e453b61 100644 --- a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/JSONSubtitleConverter.java +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/WhisperXJSONSubtitleConverter.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.subtitle.parser.json.whisperx; +package com.github.gtache.autosubtitle.subtitle.converter.json.whisperx; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -28,14 +28,14 @@ import java.util.stream.Stream; * {@link SubtitleConverter} implementation for JSON files */ @Singleton -public class JSONSubtitleConverter implements SubtitleConverter { +public class WhisperXJSONSubtitleConverter implements SubtitleConverter { private static final Pattern SPLIT_PATTERN = Pattern.compile("[ \n]+"); private final ObjectMapper mapper; @Inject - JSONSubtitleConverter(final ObjectMapper mapper) { + WhisperXJSONSubtitleConverter(final ObjectMapper mapper) { this.mapper = Objects.requireNonNull(mapper); } diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/extractor/whisperx/WhisperXSubtitleExtractor.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/extractor/whisperx/WhisperXSubtitleExtractor.java index a5a68a5..76c844b 100644 --- a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/extractor/whisperx/WhisperXSubtitleExtractor.java +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/subtitle/extractor/whisperx/WhisperXSubtitleExtractor.java @@ -2,16 +2,15 @@ package com.github.gtache.autosubtitle.subtitle.extractor.whisperx; import com.github.gtache.autosubtitle.Language; import com.github.gtache.autosubtitle.impl.OS; -import com.github.gtache.autosubtitle.modules.setup.whisper.WhisperVenvPath; +import com.github.gtache.autosubtitle.modules.setup.whisperx.WhisperXVenvPath; import com.github.gtache.autosubtitle.process.ProcessRunner; -import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverterProvider; +import com.github.gtache.autosubtitle.subtitle.converter.json.whisperx.WhisperXJSONSubtitleConverter; import com.github.gtache.autosubtitle.subtitle.extractor.ExtractOptions; import com.github.gtache.autosubtitle.subtitle.extractor.SubtitleExtractor; import com.github.gtache.autosubtitle.subtitle.extractor.whisper.AbstractWhisperSubtitleExtractor; import com.github.gtache.autosubtitle.whisper.WhisperModels; import javax.inject.Inject; -import javax.inject.Singleton; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; @@ -19,12 +18,11 @@ import java.util.List; /** * WhisperX implementation of {@link SubtitleExtractor} */ -@Singleton public class WhisperXSubtitleExtractor extends AbstractWhisperSubtitleExtractor { @Inject - WhisperXSubtitleExtractor(@WhisperVenvPath final Path venvPath, final SubtitleConverterProvider converterProvider, final ProcessRunner processRunner, final OS os) { - super(venvPath, converterProvider, processRunner, os); + WhisperXSubtitleExtractor(@WhisperXVenvPath final Path venvPath, final WhisperXJSONSubtitleConverter converter, final ProcessRunner processRunner, final OS os) { + super(venvPath, converter, processRunner, os); } @Override diff --git a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/whisperx/WhisperXExtractionModelProvider.java b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/whisperx/WhisperXExtractionModelProvider.java index ad7c9e9..6c978d8 100644 --- a/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/whisperx/WhisperXExtractionModelProvider.java +++ b/whisper/whisperx/src/main/java/com/github/gtache/autosubtitle/whisperx/WhisperXExtractionModelProvider.java @@ -5,14 +5,12 @@ import com.github.gtache.autosubtitle.subtitle.extractor.ExtractionModelProvider import com.github.gtache.autosubtitle.whisper.WhisperModels; import javax.inject.Inject; -import javax.inject.Singleton; import java.util.Arrays; import java.util.List; /** * Whisper implementation of {@link ExtractionModelProvider} */ -@Singleton public class WhisperXExtractionModelProvider implements ExtractionModelProvider { @Inject diff --git a/whisper/whisperx/src/main/java/module-info.java b/whisper/whisperx/src/main/java/module-info.java index 2361cd4..3943cc6 100644 --- a/whisper/whisperx/src/main/java/module-info.java +++ b/whisper/whisperx/src/main/java/module-info.java @@ -3,15 +3,14 @@ */ module com.github.gtache.autosubtitle.whisperx { requires transitive com.github.gtache.autosubtitle.whisper.common; - requires transitive com.fasterxml.jackson.databind; requires org.apache.logging.log4j; exports com.github.gtache.autosubtitle.whisperx; exports com.github.gtache.autosubtitle.setup.whisperx; + exports com.github.gtache.autosubtitle.subtitle.converter.json.whisperx; + exports com.github.gtache.autosubtitle.subtitle.extractor.whisperx; + exports com.github.gtache.autosubtitle.modules.whisperx; exports com.github.gtache.autosubtitle.modules.setup.whisperx; - exports com.github.gtache.autosubtitle.subtitle.extractor.whisperx; exports com.github.gtache.autosubtitle.modules.subtitle.extractor.whisperx; - exports com.github.gtache.autosubtitle.modules.subtitle.parser.json.whisperx; - exports com.github.gtache.autosubtitle.subtitle.parser.json.whisperx; } \ No newline at end of file diff --git a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/modules/setup/whisperx/TestWhisperXSetupModule.java b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/modules/setup/whisperx/TestWhisperXSetupModule.java index bdd082d..98e8c5c 100644 --- a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/modules/setup/whisperx/TestWhisperXSetupModule.java +++ b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/modules/setup/whisperx/TestWhisperXSetupModule.java @@ -1,5 +1,7 @@ package com.github.gtache.autosubtitle.modules.setup.whisperx; +import com.github.gtache.autosubtitle.impl.OS; +import com.github.gtache.autosubtitle.setup.whisper.WhisperSetupConfiguration; import org.junit.jupiter.api.Test; import java.nio.file.Paths; @@ -24,4 +26,17 @@ class TestWhisperXSetupModule { final var root = Paths.get("root"); assertEquals(root.resolve("whisperx-env"), WhisperXSetupModule.providesWhisperXVenvPath(root)); } + + @Test + void testWhisperSetupConfiguration() { + final var root = Paths.get("root"); + final var venvPath = Paths.get("venv"); + final var pythonVersion = "3.10"; + final var os = OS.WINDOWS; + final var configuration = new WhisperSetupConfiguration(root, venvPath, pythonVersion, os); + assertEquals(root, configuration.root()); + assertEquals(venvPath, configuration.venvPath()); + assertEquals(pythonVersion, configuration.pythonVersion()); + assertEquals(os, configuration.os()); + } } diff --git a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/modules/subtitle/parser/json/whisperx/TestWhisperXJsonModule.java b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/modules/subtitle/parser/json/whisperx/TestWhisperXJsonModule.java deleted file mode 100644 index 27d69f3..0000000 --- a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/modules/subtitle/parser/json/whisperx/TestWhisperXJsonModule.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.github.gtache.autosubtitle.modules.subtitle.parser.json.whisperx; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertInstanceOf; - -class TestWhisperXJsonModule { - - @Test - void testObjectMapper() { - assertInstanceOf(ObjectMapper.class, WhisperXJsonModule.providesObjectMapper()); - } -} diff --git a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/setup/whisperx/TestWhisperXSetupManager.java b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/setup/whisperx/TestWhisperXSetupManager.java index 7a9d2aa..a0f3e9d 100644 --- a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/setup/whisperx/TestWhisperXSetupManager.java +++ b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/setup/whisperx/TestWhisperXSetupManager.java @@ -4,6 +4,7 @@ import com.github.gtache.autosubtitle.impl.OS; import com.github.gtache.autosubtitle.process.ProcessResult; import com.github.gtache.autosubtitle.process.ProcessRunner; import com.github.gtache.autosubtitle.setup.SetupException; +import com.github.gtache.autosubtitle.setup.SetupUserBridge; import com.github.gtache.autosubtitle.setup.conda.CondaSetupManager; import com.github.gtache.autosubtitle.setup.whisper.WhisperSetupConfiguration; import org.junit.jupiter.api.Test; @@ -30,17 +31,19 @@ class TestWhisperXSetupManager { private final CondaSetupManager condaSetupManager; private final ProcessRunner processRunner; + private final SetupUserBridge setupUserBridge; private final WhisperSetupConfiguration configuration; private final HttpClient httpClient; private final WhisperXSetupManager whisperXSetupManager; TestWhisperXSetupManager(@Mock final CondaSetupManager condaSetupManager, @Mock final WhisperSetupConfiguration configuration, - @Mock final ProcessRunner processRunner, @Mock final HttpClient httpClient) { + @Mock final SetupUserBridge setupUserBridge, @Mock final ProcessRunner processRunner, @Mock final HttpClient httpClient) { this.condaSetupManager = Objects.requireNonNull(condaSetupManager); this.processRunner = Objects.requireNonNull(processRunner); + this.setupUserBridge = Objects.requireNonNull(setupUserBridge); this.configuration = Objects.requireNonNull(configuration); this.httpClient = Objects.requireNonNull(httpClient); - this.whisperXSetupManager = new WhisperXSetupManager(condaSetupManager, configuration, processRunner, httpClient); + this.whisperXSetupManager = new WhisperXSetupManager(condaSetupManager, configuration, setupUserBridge, processRunner, httpClient); } @Test @@ -115,9 +118,10 @@ class TestWhisperXSetupManager { @Test void testIllegal() { - assertThrows(NullPointerException.class, () -> new WhisperXSetupManager(null, configuration, processRunner, httpClient)); - assertThrows(NullPointerException.class, () -> new WhisperXSetupManager(condaSetupManager, null, processRunner, httpClient)); - assertThrows(NullPointerException.class, () -> new WhisperXSetupManager(condaSetupManager, configuration, null, httpClient)); - assertThrows(NullPointerException.class, () -> new WhisperXSetupManager(condaSetupManager, configuration, processRunner, null)); + assertThrows(NullPointerException.class, () -> new WhisperXSetupManager(null, configuration, setupUserBridge, processRunner, httpClient)); + assertThrows(NullPointerException.class, () -> new WhisperXSetupManager(condaSetupManager, null, setupUserBridge, processRunner, httpClient)); + assertThrows(NullPointerException.class, () -> new WhisperXSetupManager(condaSetupManager, configuration, null, processRunner, httpClient)); + assertThrows(NullPointerException.class, () -> new WhisperXSetupManager(condaSetupManager, configuration, setupUserBridge, null, httpClient)); + assertThrows(NullPointerException.class, () -> new WhisperXSetupManager(condaSetupManager, configuration, setupUserBridge, processRunner, null)); } } diff --git a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/TestJSONSubtitleSegment.java b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/TestJSONSubtitleSegment.java similarity index 90% rename from whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/TestJSONSubtitleSegment.java rename to whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/TestJSONSubtitleSegment.java index e16acf2..888c71b 100644 --- a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/TestJSONSubtitleSegment.java +++ b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/TestJSONSubtitleSegment.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.subtitle.parser.json.whisperx; +package com.github.gtache.autosubtitle.subtitle.converter.json.whisperx; import org.junit.jupiter.api.Test; diff --git a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/TestJSONSubtitleWords.java b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/TestJSONSubtitleWords.java similarity index 89% rename from whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/TestJSONSubtitleWords.java rename to whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/TestJSONSubtitleWords.java index f744e93..e913226 100644 --- a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/TestJSONSubtitleWords.java +++ b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/TestJSONSubtitleWords.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.subtitle.parser.json.whisperx; +package com.github.gtache.autosubtitle.subtitle.converter.json.whisperx; import org.junit.jupiter.api.Test; diff --git a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/TestJSONSubtitles.java b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/TestJSONSubtitles.java similarity index 87% rename from whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/TestJSONSubtitles.java rename to whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/TestJSONSubtitles.java index 4f54076..6679962 100644 --- a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/TestJSONSubtitles.java +++ b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/TestJSONSubtitles.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.subtitle.parser.json.whisperx; +package com.github.gtache.autosubtitle.subtitle.converter.json.whisperx; import org.junit.jupiter.api.Test; diff --git a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/TestJSONSubtitleConverter.java b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/TestWhisperXJSONSubtitleConverter.java similarity index 93% rename from whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/TestJSONSubtitleConverter.java rename to whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/TestWhisperXJSONSubtitleConverter.java index 344916c..0a19491 100644 --- a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/TestJSONSubtitleConverter.java +++ b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/TestWhisperXJSONSubtitleConverter.java @@ -1,4 +1,4 @@ -package com.github.gtache.autosubtitle.subtitle.parser.json.whisperx; +package com.github.gtache.autosubtitle.subtitle.converter.json.whisperx; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.gtache.autosubtitle.Language; @@ -27,16 +27,16 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) -class TestJSONSubtitleConverter { +class TestWhisperXJSONSubtitleConverter { private final ParseOptions parseOptions; private final FormatOptions formatOptions; - private final JSONSubtitleConverter converter; + private final WhisperXJSONSubtitleConverter converter; - TestJSONSubtitleConverter(@Mock final ParseOptions parseOptions, @Mock final FormatOptions formatOptions) { + TestWhisperXJSONSubtitleConverter(@Mock final ParseOptions parseOptions, @Mock final FormatOptions formatOptions) { this.parseOptions = Objects.requireNonNull(parseOptions); this.formatOptions = Objects.requireNonNull(formatOptions); - this.converter = new JSONSubtitleConverter(new ObjectMapper()); + this.converter = new WhisperXJSONSubtitleConverter(new ObjectMapper()); } @BeforeEach diff --git a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/extractor/whisperx/TestWhisperXSubtitleExtractor.java b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/extractor/whisperx/TestWhisperXSubtitleExtractor.java index 23a669b..c68f308 100644 --- a/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/extractor/whisperx/TestWhisperXSubtitleExtractor.java +++ b/whisper/whisperx/src/test/java/com/github/gtache/autosubtitle/subtitle/extractor/whisperx/TestWhisperXSubtitleExtractor.java @@ -3,9 +3,7 @@ package com.github.gtache.autosubtitle.subtitle.extractor.whisperx; import com.github.gtache.autosubtitle.Language; import com.github.gtache.autosubtitle.impl.OS; import com.github.gtache.autosubtitle.process.ProcessRunner; -import com.github.gtache.autosubtitle.subtitle.Subtitle; -import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverter; -import com.github.gtache.autosubtitle.subtitle.converter.SubtitleConverterProvider; +import com.github.gtache.autosubtitle.subtitle.converter.json.whisperx.WhisperXJSONSubtitleConverter; import com.github.gtache.autosubtitle.subtitle.extractor.ExtractOptions; import com.github.gtache.autosubtitle.whisper.WhisperModels; import org.junit.jupiter.api.BeforeEach; @@ -21,23 +19,20 @@ import java.util.List; import static java.util.Objects.requireNonNull; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class TestWhisperXSubtitleExtractor { private final Path venvPath; - private final SubtitleConverterProvider converterProvider; - private final SubtitleConverter converter; + private final WhisperXJSONSubtitleConverter converter; private final ProcessRunner processRunner; private final ExtractOptions options; private final OS os; private WhisperXSubtitleExtractor whisperXSubtitleExtractor; - TestWhisperXSubtitleExtractor(@Mock final SubtitleConverterProvider converterProvider, @Mock final SubtitleConverter converter, + TestWhisperXSubtitleExtractor(@Mock final WhisperXJSONSubtitleConverter converter, @Mock final ProcessRunner processRunner, @Mock final ExtractOptions options) { - this.converterProvider = requireNonNull(converterProvider); this.converter = requireNonNull(converter); this.processRunner = requireNonNull(processRunner); this.options = requireNonNull(options); @@ -47,8 +42,7 @@ class TestWhisperXSubtitleExtractor { @BeforeEach void beforeEach() { - doReturn(converter).when(converterProvider).getConverter("json"); - this.whisperXSubtitleExtractor = new WhisperXSubtitleExtractor(venvPath, converterProvider, processRunner, os); + this.whisperXSubtitleExtractor = new WhisperXSubtitleExtractor(venvPath, converter, processRunner, os); } @Test @@ -97,9 +91,9 @@ class TestWhisperXSubtitleExtractor { @Test void testIllegal() { - assertThrows(NullPointerException.class, () -> new WhisperXSubtitleExtractor(null, converterProvider, processRunner, os)); + assertThrows(NullPointerException.class, () -> new WhisperXSubtitleExtractor(null, converter, processRunner, os)); assertThrows(NullPointerException.class, () -> new WhisperXSubtitleExtractor(venvPath, null, processRunner, os)); - assertThrows(NullPointerException.class, () -> new WhisperXSubtitleExtractor(venvPath, converterProvider, null, os)); - assertThrows(NullPointerException.class, () -> new WhisperXSubtitleExtractor(venvPath, converterProvider, processRunner, null)); + assertThrows(NullPointerException.class, () -> new WhisperXSubtitleExtractor(venvPath, converter, null, os)); + assertThrows(NullPointerException.class, () -> new WhisperXSubtitleExtractor(venvPath, converter, processRunner, null)); } } diff --git a/whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/whisperx-in.json b/whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/whisperx-in.json similarity index 100% rename from whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/whisperx-in.json rename to whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/whisperx-in.json diff --git a/whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/whisperx-max-lines.json b/whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/whisperx-max-lines.json similarity index 100% rename from whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/whisperx-max-lines.json rename to whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/whisperx-max-lines.json diff --git a/whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/whisperx-max-words.json b/whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/whisperx-max-words.json similarity index 100% rename from whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/whisperx-max-words.json rename to whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/whisperx-max-words.json diff --git a/whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/whisperx-out.json b/whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/whisperx-out.json similarity index 100% rename from whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/parser/json/whisperx/whisperx-out.json rename to whisper/whisperx/src/test/resources/com/github/gtache/autosubtitle/subtitle/converter/json/whisperx/whisperx-out.json