diff --git a/build.gradle b/build.gradle index 4c7bfd7a..415c9e59 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ ext { def abi = project.properties['ABI'] - VERSION_CODE = 79 + VERSION_CODE = 80 VERSION_NAME = "1.7.3" SDK_MIN_VERSION = 23 SDK_TARGET_VERSION = 30 diff --git a/depends/utils b/depends/utils index 1696dd31..02350734 160000 --- a/depends/utils +++ b/depends/utils @@ -1 +1 @@ -Subproject commit 1696dd31406b046f110b2192e140d9e062a99910 +Subproject commit 0235073409ab6f490ff086a3d66842ec48b212a8 diff --git a/fermata/src/main/java/me/aap/fermata/media/engine/MetadataRetriever.java b/fermata/src/main/java/me/aap/fermata/media/engine/MetadataRetriever.java index 283b0791..974a02a9 100644 --- a/fermata/src/main/java/me/aap/fermata/media/engine/MetadataRetriever.java +++ b/fermata/src/main/java/me/aap/fermata/media/engine/MetadataRetriever.java @@ -34,6 +34,9 @@ import me.aap.utils.vfs.VirtualResource; import me.aap.utils.vfs.content.ContentFileSystem; +import static me.aap.fermata.media.pref.MediaPrefs.MEDIA_SCANNER_DEFAULT; +import static me.aap.fermata.media.pref.MediaPrefs.MEDIA_SCANNER_SYSTEM; +import static me.aap.fermata.media.pref.MediaPrefs.MEDIA_SCANNER_VLC; import static me.aap.utils.async.Completed.completedEmptyMap; import static me.aap.utils.async.Completed.completedNull; import static me.aap.utils.async.Completed.completedVoid; @@ -127,13 +130,16 @@ private MetadataBuilder load(PlayableItem item) { } } - MediaPlayerEngineProvider mp = mgr.mediaPlayer; + int scanner = (mgr.vlcPlayer == null) ? MEDIA_SCANNER_DEFAULT + : item.getLib().getPrefs().getMediaScannerPref(); - if (!mp.getMediaMetadata(mb, item)) { - MediaEngineProvider vlc = mgr.vlcPlayer; - if ((vlc == null) || !vlc.getMediaMetadata(mb, item)) mp.getDuration(mb, item); - } else { - mp.getDuration(mb, item); + switch (scanner) { + case MEDIA_SCANNER_DEFAULT: + case MEDIA_SCANNER_SYSTEM: + if (mgr.mediaPlayer.getMediaMetadata(mb, item)) break; + if ((scanner == MEDIA_SCANNER_SYSTEM) && mgr.mediaPlayer.getDuration(mb, item)) break; + case MEDIA_SCANNER_VLC: + if (mgr.vlcPlayer != null) mgr.vlcPlayer.getMediaMetadata(mb, item); } try { diff --git a/fermata/src/main/java/me/aap/fermata/media/pref/MediaPrefs.java b/fermata/src/main/java/me/aap/fermata/media/pref/MediaPrefs.java index a699190e..0b6548d5 100644 --- a/fermata/src/main/java/me/aap/fermata/media/pref/MediaPrefs.java +++ b/fermata/src/main/java/me/aap/fermata/media/pref/MediaPrefs.java @@ -22,9 +22,13 @@ public interface MediaPrefs extends PreferenceStore { int SCALE_ORIGINAL = 2; int SCALE_4_3 = 3; int SCALE_16_9 = 4; + int MEDIA_SCANNER_DEFAULT = 0; + int MEDIA_SCANNER_SYSTEM = 1; + int MEDIA_SCANNER_VLC = 2; Pref AUDIO_ENGINE = Pref.i("AUDIO_ENGINE", MEDIA_ENG_MP); Pref VIDEO_ENGINE = Pref.i("VIDEO_ENGINE", MEDIA_ENG_MP); Pref VIDEO_SCALE = Pref.i("VIDEO_SCALE", SCALE_BEST); + Pref MEDIA_SCANNER = Pref.i("MEDIA_SCANNER", MEDIA_SCANNER_DEFAULT).withInheritance(false); Pref SPEED = Pref.f("SPEED", 1.0f).withInheritance(false); Pref AE_ENABLED = Pref.b("AE_ENABLED", false).withInheritance(false); Pref EQ_ENABLED = Pref.b("EQ_ENABLED", false).withInheritance(false); @@ -77,6 +81,10 @@ default void setVideoScalePref(int scale) { } } + default int getMediaScannerPref() { + return getIntPref(MEDIA_SCANNER); + } + default boolean getSubEnabledPref() { return getBooleanPref(SUB_ENABLED); } @@ -121,7 +129,7 @@ static int[] getUserPresetBands(String preset) { } static String toUserPreset(String name, int[] bands) { - try(SharedTextBuilder tb = SharedTextBuilder.get()) { + try (SharedTextBuilder tb = SharedTextBuilder.get()) { for (int i = 0; i < bands.length; i++) { tb.append(bands[i]); if (i == (bands.length - 1)) tb.append(':'); diff --git a/fermata/src/main/java/me/aap/fermata/ui/fragment/SettingsFragment.java b/fermata/src/main/java/me/aap/fermata/ui/fragment/SettingsFragment.java index e9597fdd..68e9e958 100644 --- a/fermata/src/main/java/me/aap/fermata/ui/fragment/SettingsFragment.java +++ b/fermata/src/main/java/me/aap/fermata/ui/fragment/SettingsFragment.java @@ -38,6 +38,9 @@ import static me.aap.fermata.media.pref.MediaPrefs.MEDIA_ENG_EXO; import static me.aap.fermata.media.pref.MediaPrefs.MEDIA_ENG_MP; import static me.aap.fermata.media.pref.MediaPrefs.MEDIA_ENG_VLC; +import static me.aap.fermata.media.pref.MediaPrefs.MEDIA_SCANNER_DEFAULT; +import static me.aap.fermata.media.pref.MediaPrefs.MEDIA_SCANNER_SYSTEM; +import static me.aap.fermata.media.pref.MediaPrefs.MEDIA_SCANNER_VLC; import static me.aap.fermata.ui.activity.MainActivityListener.FRAGMENT_CONTENT_CHANGED; /** @@ -299,9 +302,9 @@ private PreferenceViewAdapter createAdapter() { }); } + PrefCondition exoCond = PrefCondition.create(mediaPrefs, MediaLibPrefs.EXO_ENABLED); + PrefCondition vlcCond = PrefCondition.create(mediaPrefs, MediaLibPrefs.VLC_ENABLED); Consumer initList = o -> { - PrefCondition exoCond = PrefCondition.create(mediaPrefs, MediaLibPrefs.EXO_ENABLED); - PrefCondition vlcCond = PrefCondition.create(mediaPrefs, MediaLibPrefs.VLC_ENABLED); if (o.visibility == null) o.visibility = exoCond.or(vlcCond); o.values = new int[]{R.string.engine_mp_name, R.string.engine_exo_name, R.string.engine_vlc_name}; @@ -343,6 +346,17 @@ private PreferenceViewAdapter createAdapter() { o.formatSubtitle = true; o.initList = initList; }); + sub1.addListPref(o -> { + o.store = mediaPrefs; + o.removeDefault = false; + o.pref = MediaLibPrefs.MEDIA_SCANNER; + o.title = R.string.preferred_media_scanner; + o.subtitle = R.string.string_format; + o.formatSubtitle = true; + o.visibility = vlcCond; + o.values = new int[]{R.string.preferred_media_scanner_default, R.string.preferred_media_scanner_system, R.string.engine_vlc_name}; + o.valuesMap = new int[]{MEDIA_SCANNER_DEFAULT, MEDIA_SCANNER_SYSTEM, MEDIA_SCANNER_VLC}; + }); sub1 = set.subSet(o -> o.title = R.string.video_settings); sub1.addListPref(o -> { diff --git a/fermata/src/main/res/values-ru/strings.xml b/fermata/src/main/res/values-ru/strings.xml index 5b0f70b3..79dbd19a 100644 --- a/fermata/src/main/res/values-ru/strings.xml +++ b/fermata/src/main/res/values-ru/strings.xml @@ -48,6 +48,10 @@ Медиа движок установлен: %1$s Медиа движок удален: %1$s + Предпочтительный медиа сканнер + По умолчанию + Системный + Установка модуля: %1$s Ожидание инсталляции: %1$s Скачивание %1$s diff --git a/fermata/src/main/res/values/strings.xml b/fermata/src/main/res/values/strings.xml index 147052e3..a438f247 100644 --- a/fermata/src/main/res/values/strings.xml +++ b/fermata/src/main/res/values/strings.xml @@ -61,6 +61,10 @@ Media engine installed: %1$s Media engine uninstalled: %1$s + Preferred media scanner + Default + System + Module installation: %1$s Installation pending: %1$s Downloading %1$s diff --git a/modules/vlc/src/main/java/me/aap/fermata/engine/vlc/VlcEngineProvider.java b/modules/vlc/src/main/java/me/aap/fermata/engine/vlc/VlcEngineProvider.java index 05532781..b1821136 100644 --- a/modules/vlc/src/main/java/me/aap/fermata/engine/vlc/VlcEngineProvider.java +++ b/modules/vlc/src/main/java/me/aap/fermata/engine/vlc/VlcEngineProvider.java @@ -27,6 +27,7 @@ import me.aap.utils.security.SecurityUtils; import static java.nio.charset.StandardCharsets.UTF_8; +import static org.videolan.libvlc.interfaces.IMedia.Parse.DoInteract; import static org.videolan.libvlc.interfaces.IMedia.Parse.FetchLocal; import static org.videolan.libvlc.interfaces.IMedia.Parse.FetchNetwork; import static org.videolan.libvlc.interfaces.IMedia.Parse.ParseLocal; @@ -98,7 +99,7 @@ public boolean getMediaMetadata(MetadataBuilder meta, PlayableItem item) { media = new Media(getVlc(), uri); } - media.parse(ParseLocal | ParseNetwork | FetchLocal | FetchNetwork); + media.parse(ParseLocal | ParseNetwork | FetchLocal | FetchNetwork | DoInteract); String title = media.getMeta(IMedia.Meta.Title); String artist = media.getMeta(IMedia.Meta.Artist);