From 25b2a112f4f3450b0c7041bda8481fa0a6a791e4 Mon Sep 17 00:00:00 2001 From: 3a4oT Date: Fri, 8 Jul 2022 01:08:14 +0300 Subject: [PATCH 1/5] Added Ukrainian language --- base/src/main/res/values-uk-rUA/strings.xml | 297 ++++++++++++++++++ .../main/res/values/translation_languages.xml | 1 + 2 files changed, 298 insertions(+) create mode 100644 base/src/main/res/values-uk-rUA/strings.xml diff --git a/base/src/main/res/values-uk-rUA/strings.xml b/base/src/main/res/values-uk-rUA/strings.xml new file mode 100644 index 000000000..f8f44e7c5 --- /dev/null +++ b/base/src/main/res/values-uk-rUA/strings.xml @@ -0,0 +1,297 @@ + + + Відмінити + Закрити + Гаразд + Увімкнено + Вимкнено + Доступні оновлення + Опа! Ви використовуєте не ту версію Popcorn Time для Android. Коректна версія завантажиться прямо зараз, якщо це можливо. Якщо програма інсталяції не запускається протягом хвилини, це може означати що ваш пристрій не підтримується, або ваш інтернет зв\'язок перервано і ви можете спробувати знову. Якщо програма встановлення не працює, то потрібно встановити правильну версію вручну. + Натисніть для встановлення + Завантаження даних… + Завантаження даних… + Завантаження шоу… + Завантаження фільмів… + Завантаження субтитрів… + Помилка: не вдалось зберегти файли + Вибачте! +Попередній перегляд недоступний. + Щось пішло не так + Не вдалось отримати торент + Продовжує працювати в фоновому режимі + Натисніть щоб закрити + Натисніть щоб продовжити + Стоп + + Назва, рік, актори + Жанри + Пошук + Шукаю… + Дані не знайдено + Серіали + Фільми + Аніме + Підпис додатка недійсний + Popcorn Time було підроблено. Ви можете завантажити новий файл інсталяції за адресою http://butterproject.org/ + Субтитри + Зараз відтворюється + + Налаштування + Основне + Початкова сторінка + Відео програвач по замовчуванню + Мова додатку + Перезавантажити додаток для прийняття змін + Мова пристрою + Транслювати лише за допомогою Wi-Fi + Вбудований + Колір + Розмір + Часова затримка субтитрів + Колір обведення + Колір обведення + Мова за замовчуванням + Мова субтитрів + Налаштування субтитрів + Мова не за замовчуванням + Додаткові + Розташування сховища + Автоматично + Вибрати розташування + Розташування недоступне для запису + Очищувати кеш плеєра після закриття + Апаратне прискорення + Автоматично + Повне + Лише декодування + Оновлення + Автоматичні оновлення + Пошук оновлень + Остання перевірка + Про додаток + Версія + Список змін + Натисніть щоб відкрити + Повідомити про помилку + Open-source ліцензії + Торенти + Максимальна швидкість завантаження + Максимальна швидкість роздачі + Максимальна кількість з\'єднань + Ліміт DHT + Необмежено + Показувати пункт VPN в меню + Примусове насичення кольору + RGB 32-bit: стандартне насичення + RGB 16-bit: хороша швидкодія, низька якість + YUV: Макс. швидкодія, але не завжди працює + Оптимально + За розміром екрану + Підігнати по горизонталі + Підігнати по вертикалі + Оригінальний + + хвилини + Читати більше + Дивитись трейлер + Без субтитрів + Субтитри недоступні + Якість + Трейлер + Сезон + Епізод + Додаткові матеріали + Продовжується + ЗАвершено + Вийшли в ефір: %s + Немає назви + Короткий опис - недоступний + Magnet-посилання + Масштаб + + Про додаток + + Гучність + Яскравість + Помилка HW прискорення + Всі + Виникла помилка з апаратним прискоренням. Бажаєте вимкнути його, та спробувати ще раз? + + Бойовики + Пригодницькі + Анімаційні + Біографія + Комедія + Кримінальні + Дитяче + Документальний + Драми + Сімейні + Фантастика + Noir + Ігрове шоу + Історичні + Дім та сад + Жахи + Міні-серіали + Музикальні + Мюзикл + Містика + Новини + Реаліті-шоу + Романтичні + Наукова фантастика + Короткометражні + Спеціальні інтереси + Мильна опера + Спортивний + Suspense + Ток-шоу + Трилер + Воєнні + Вестерни + + Автомобілі + Деменція + Демони + Єті + Гра + Гарем + Josei + Дитячі + Чари + Бойові мистецтва + Mecha + Воєнні + Поліція + Пародія + Психологічні + Самурай + Школа + Seinen + Shoujo + Shoujo AI + Shounen + Shounen AI + Slice of Life + Космос + Супер Сила + Надприродній + Вампір + + ПОПУЛЯРНІ + Топ + Дата релізу + ОСТАННЄ ОНОВЛЕННЯ + РІК + А - Я + ТРЕНДОВІ + Упс! Непередбачувана помилка відео + Програвач відео зіткнувся із серйозною помилкою. Неможливо відкрити та/або відтворити відеофайл. Формат не визначено. + + Трансляція + З\'єднання з TV + Будь ласка, підтвердьте з\'єднання на TV + Введіть код підключення на TV + + Відкрити за допомогою + Вибрати файл + Прийняти + Відмовитись + Перезавантажити відео + + Статус: %1$s, Сіди: %2$d, Піри: %3$d + Погане + Середнє + Добре + Чудове + Невідомо + + Очікування торента + Буферизація відео, зачекайте… + Потокова передача розпочалась + Очікування субтитрів + сіди + Запускати зовнішнім програвачем + + Перемотка вперед + Перемотка + Помилка зєднання + Виникла помилка під час пошуку відео. +Це може бути пов\'язано з проблемою в мережі або ж протоколом YouTube. +Будь ласка, спробуйте пізніше. + Ви впевнені? + Ви впевнені, що хочете закрити програвач відео? %s завершить відтворення. + + Лише по Wi-Fi + Вибраний режим потокової передачі лише по Wi-Fi. Це можна вимкнути у налаштуваннях, якщо ви хочете використовувати мобільні дані для перегляду. + + Відкрити контекстне меню + Закрити контекстне меню + Результати пошуку не знайдено + VPN + + Popcorn Time - результат роботи розробників та дизайнерів, які поєднали багато API в одне ціле +для зручного перегляду відео за допомогою торентів.\n\n Цей проект з відкритим вихідним кодом. Ми любимо дивитись відео. +А також, любимо похрумтіти попкорном. + Вебсайт + Форум + Google+ + Facebook + Git + Блог + Twitter + + Під\'єднаний до + Від\'єднати + Виберіть пристрій для трансляції + Підготовка до трансляції відео… + Не вдалось почати трансляцію відео на ваш пристрій. Хочете спробувати ще раз? Можливо, додаток повинен завантажити більше частин, перш ніж можна буде відтворити відео. + Відео + + Пов\'язані відео + + Топ фільмів + Топ серіалів + Останні Серіали + Переглянути + Більше + Тести + Помилка + Пауза + Відтворити + 00:00 + Кнопка Відтворити/Пауза + Завантаження… + Відео не знайдене + Популярні відео + Показувати сіткою + Налаштування + Персональні налаштування + Дивитись трейлер + БЕЗКОШТОВНО + Дивитись + 720p + 1080p + Фільм + Пошук результатів + Результати фільму + Результати серіалу + Час завантаження вичерпався + Медіа сервер був недоступний + Не вдалось завантажити відео + Ой + + Оновити зараз + Ні, пізніше + Доступна нова версія Popcorn Time для Android TV. Хочете оновити зараз? + Перевірте підключення до інтернету + Виберіть якість + Більше фільмів + Більше серіалів + Умови та зобов\'язання + Переглянути умови + Епізод %d + + Версія + diff --git a/base/src/main/res/values/translation_languages.xml b/base/src/main/res/values/translation_languages.xml index 2ddd9ea61..0b149c7f7 100644 --- a/base/src/main/res/values/translation_languages.xml +++ b/base/src/main/res/values/translation_languages.xml @@ -57,5 +57,6 @@ sk ms sl + uk \ No newline at end of file From 560d52e2ab94bd6679f9fdba028718015e9d470f Mon Sep 17 00:00:00 2001 From: Ivan Borzenkov Date: Sat, 9 Jul 2022 13:18:13 +0300 Subject: [PATCH 2/5] dht - init --- base/build.gradle | 1 + .../butter/droid/base/ButterApplication.java | 5 ++ .../base/manager/updater/DhtManager.java | 68 +++++++++++++++++++ build.gradle | 1 + 4 files changed, 75 insertions(+) create mode 100644 base/src/main/java/butter/droid/base/manager/updater/DhtManager.java diff --git a/base/build.gradle b/base/build.gradle index e898be8fd..f997d06b9 100644 --- a/base/build.gradle +++ b/base/build.gradle @@ -26,6 +26,7 @@ android { versionCode buildNumber multiDexEnabled true resValue 'string', 'sentry_dsn', rootProject.ext.sentryDsn + resValue 'string', 'dht', rootProject.ext.dht } buildTypes { diff --git a/base/src/main/java/butter/droid/base/ButterApplication.java b/base/src/main/java/butter/droid/base/ButterApplication.java index 67274fe99..453ad1d6a 100644 --- a/base/src/main/java/butter/droid/base/ButterApplication.java +++ b/base/src/main/java/butter/droid/base/ButterApplication.java @@ -39,6 +39,7 @@ import butter.droid.base.beaming.BeamManager; import butter.droid.base.content.preferences.Prefs; import butter.droid.base.manager.updater.ButterUpdateManager; +import butter.droid.base.manager.updater.DhtManager; import butter.droid.base.torrent.TorrentService; import butter.droid.base.utils.FileUtils; import butter.droid.base.utils.LocaleUtils; @@ -56,6 +57,8 @@ public class ButterApplication extends Application implements ButterUpdateManage Picasso picasso; @Inject ButterUpdateManager updateManager; + @Inject + DhtManager dhtManager; @Override protected void attachBaseContext(Context base) { @@ -108,6 +111,8 @@ public void onCreate() { Timber.plant(new Timber.DebugTree()); } + dhtManager.updateSettings(); + updateManager.setListener(this); updateManager.checkUpdates(false); diff --git a/base/src/main/java/butter/droid/base/manager/updater/DhtManager.java b/base/src/main/java/butter/droid/base/manager/updater/DhtManager.java new file mode 100644 index 000000000..162e9c73b --- /dev/null +++ b/base/src/main/java/butter/droid/base/manager/updater/DhtManager.java @@ -0,0 +1,68 @@ +package butter.droid.base.manager.updater; + +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; + +import com.github.se_bastiaan.torrentstream.TorrentStream; +import com.github.se_bastiaan.torrentstream.exceptions.NotInitializedException; + +import org.libtorrent4j.AlertListener; +import org.libtorrent4j.Entry; +import org.libtorrent4j.Hex; +import org.libtorrent4j.SessionManager; +import org.libtorrent4j.Sha1Hash; +import org.libtorrent4j.TcpEndpoint; +import org.libtorrent4j.alerts.Alert; + +import java.util.ArrayList; + +import javax.inject.Inject; + +import butter.droid.base.R; + +public class DhtManager implements Runnable { + + private Context mContext; + + @Inject + public DhtManager(Context context) + { + this.mContext = context; + } + + public void updateSettings() + { + try { + SessionManager sm = TorrentStream.getInstance().getSessionManager(); + this.updateFromDHT(sm); + return; + } catch (NotInitializedException e) { + Log.d("DHT", "NotInitializedException"); + } + + final Handler handler = new Handler(Looper.getMainLooper()); + handler.postDelayed(this, 5000); + } + + @Override + public void run() { + this.updateSettings(); + } + + protected void updateFromDHT(SessionManager sm) { + Log.d("DHT", "DHT contains " + sm.stats().dhtNodes() + " nodes"); + //String dht = mContext.getResources().getString(R.string.dht); + String dht = "a4a9ad29e303e137ecb995c50a4e104b3e8f72e5"; + Log.d("DHT", "HERE"); + byte[] publicKey = Hex.decode("50b1e3e01d68ff20664b22881b3ae1a7b4c0b2892a7bd68e40dbadea3ab45790"); + byte[] salt = Hex.decode(""); + SessionManager.MutableItem data = sm.dhtGetItem(publicKey, salt, 20); + Log.d("DHT", data.toString()); + Log.d("DHT", data.item.toString()); + Log.d("DHT", String.valueOf(data.seq)); + Entry e = sm.dhtGetItem(Sha1Hash.parseHex(dht), 100); + Log.d("DHT", e.toString()); + } +} diff --git a/build.gradle b/build.gradle index bf0eacdfa..820e6f111 100644 --- a/build.gradle +++ b/build.gradle @@ -32,6 +32,7 @@ ext { daggerVersion = "2.7" javaxAnnotationVersion = "1.3.2" sentryDsn = "https://a4156b48014d43f2b3a4cd71a35029d9@o336317.ingest.sentry.io/5744175" + dht = "a4a9ad29e303e137ecb995c50a4e104b3e8f72e5" } allprojects { From 877ab95af5e55e5e4a25a3f15613da763ebd88ba Mon Sep 17 00:00:00 2001 From: Ivan Borzenkov Date: Sun, 10 Jul 2022 01:52:20 +0300 Subject: [PATCH 3/5] load servers --- base/build.gradle | 2 +- .../droid/base/content/preferences/Prefs.java | 3 + .../base/manager/updater/DhtManager.java | 62 ++++++++++++++----- .../droid/base/manager/updater/DhtObject.java | 17 +++++ build.gradle | 2 +- 5 files changed, 67 insertions(+), 19 deletions(-) create mode 100644 base/src/main/java/butter/droid/base/manager/updater/DhtObject.java diff --git a/base/build.gradle b/base/build.gradle index f997d06b9..196868b94 100644 --- a/base/build.gradle +++ b/base/build.gradle @@ -26,7 +26,7 @@ android { versionCode buildNumber multiDexEnabled true resValue 'string', 'sentry_dsn', rootProject.ext.sentryDsn - resValue 'string', 'dht', rootProject.ext.dht + resValue 'string', 'dht_public_key', rootProject.ext.dhtPublicKey } buildTypes { diff --git a/base/src/main/java/butter/droid/base/content/preferences/Prefs.java b/base/src/main/java/butter/droid/base/content/preferences/Prefs.java index 9e3def655..b1afa4599 100644 --- a/base/src/main/java/butter/droid/base/content/preferences/Prefs.java +++ b/base/src/main/java/butter/droid/base/content/preferences/Prefs.java @@ -40,6 +40,9 @@ public class Prefs { public static final String TRANSLATE_POSTER = "translate_poster"; public static final String TRANSLATE_EPISODES = "translate_episodes"; public static final String DRAWER_LEARNED = "drawer_learned"; + public static final String DHT_DATA = "dht_data"; + public static final String DHT_SEQ = "dht_seq"; + public static final String DHT_UPDATED = "dht_updated"; public static final String LIBTORRENT_DHT_LIMIT = "libtorrent_dhtlimit"; public static final String FIRST_RUN = "first_run"; public static final String LIBTORRENT_CONNECTION_LIMIT = "libtorrent_connectionlimit"; diff --git a/base/src/main/java/butter/droid/base/manager/updater/DhtManager.java b/base/src/main/java/butter/droid/base/manager/updater/DhtManager.java index 162e9c73b..be1cdc344 100644 --- a/base/src/main/java/butter/droid/base/manager/updater/DhtManager.java +++ b/base/src/main/java/butter/droid/base/manager/updater/DhtManager.java @@ -5,35 +5,46 @@ import android.os.Looper; import android.util.Log; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.github.se_bastiaan.torrentstream.TorrentStream; import com.github.se_bastiaan.torrentstream.exceptions.NotInitializedException; -import org.libtorrent4j.AlertListener; -import org.libtorrent4j.Entry; +import org.json.JSONException; import org.libtorrent4j.Hex; import org.libtorrent4j.SessionManager; -import org.libtorrent4j.Sha1Hash; -import org.libtorrent4j.TcpEndpoint; -import org.libtorrent4j.alerts.Alert; +import java.io.IOException; import java.util.ArrayList; import javax.inject.Inject; import butter.droid.base.R; +import butter.droid.base.content.preferences.Prefs; +import butter.droid.base.utils.PrefUtils; public class DhtManager implements Runnable { private Context mContext; + private ObjectMapper mMapper; + + private static final int UPDATE_INTERVAL = 7 * 24 * 60 * 60; @Inject - public DhtManager(Context context) + public DhtManager(Context context, ObjectMapper mapper) { this.mContext = context; + this.mMapper = mapper; } public void updateSettings() { + int updated = PrefUtils.get(mContext, Prefs.DHT_UPDATED, 0); + if (updated + UPDATE_INTERVAL > System.currentTimeMillis() / 1000) { + return; + } + try { SessionManager sm = TorrentStream.getInstance().getSessionManager(); this.updateFromDHT(sm); @@ -53,16 +64,33 @@ public void run() { protected void updateFromDHT(SessionManager sm) { Log.d("DHT", "DHT contains " + sm.stats().dhtNodes() + " nodes"); - //String dht = mContext.getResources().getString(R.string.dht); - String dht = "a4a9ad29e303e137ecb995c50a4e104b3e8f72e5"; - Log.d("DHT", "HERE"); - byte[] publicKey = Hex.decode("50b1e3e01d68ff20664b22881b3ae1a7b4c0b2892a7bd68e40dbadea3ab45790"); - byte[] salt = Hex.decode(""); - SessionManager.MutableItem data = sm.dhtGetItem(publicKey, salt, 20); - Log.d("DHT", data.toString()); - Log.d("DHT", data.item.toString()); - Log.d("DHT", String.valueOf(data.seq)); - Entry e = sm.dhtGetItem(Sha1Hash.parseHex(dht), 100); - Log.d("DHT", e.toString()); + String dhtPublicKey = mContext.getResources().getString(R.string.dht_public_key); + SessionManager.MutableItem data = sm.dhtGetItem(Hex.decode(dhtPublicKey), Hex.decode(""), 20); + int seq = PrefUtils.get(mContext, Prefs.DHT_SEQ, 0); + if (data.seq <= seq) { + return; + } + Log.d("DHT", "DHT updated " + data.seq); + PrefUtils.save(mContext, Prefs.DHT_DATA, data.item.string()); + PrefUtils.save(mContext, Prefs.DHT_SEQ, data.seq); + PrefUtils.save(mContext, Prefs.DHT_UPDATED, System.currentTimeMillis() / 1000); + } + + public String[] servers() + { + String dht = PrefUtils.get(mContext, Prefs.DHT_DATA, ""); + if (dht.isEmpty()) { + return new String[0]; + } + try { + DhtObject obj = mMapper.readValue(dht, DhtObject.class); + return obj.getServers(); + } catch (JsonMappingException e) { + return new String[0]; + } catch (JsonParseException e) { + return new String[0]; + } catch (IOException e) { + return new String[0]; + } } } diff --git a/base/src/main/java/butter/droid/base/manager/updater/DhtObject.java b/base/src/main/java/butter/droid/base/manager/updater/DhtObject.java new file mode 100644 index 000000000..d420b3853 --- /dev/null +++ b/base/src/main/java/butter/droid/base/manager/updater/DhtObject.java @@ -0,0 +1,17 @@ +package butter.droid.base.manager.updater; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.ArrayList; + +@JsonIgnoreProperties(ignoreUnknown=true) +public class DhtObject { + @JsonProperty("server") + private String server; + + public String[] getServers() + { + return server.split(","); + } +} diff --git a/build.gradle b/build.gradle index 820e6f111..1c7f61730 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ ext { daggerVersion = "2.7" javaxAnnotationVersion = "1.3.2" sentryDsn = "https://a4156b48014d43f2b3a4cd71a35029d9@o336317.ingest.sentry.io/5744175" - dht = "a4a9ad29e303e137ecb995c50a4e104b3e8f72e5" + dhtPublicKey = "3704c4f5f0426d9c726c5b195539c42c7383816e8d756bd68fa5340435f99070" } allprojects { From 905a0142d1ce7ffd85eb2b118339756fc1226842 Mon Sep 17 00:00:00 2001 From: Ivan Borzenkov Date: Sun, 10 Jul 2022 02:24:48 +0300 Subject: [PATCH 4/5] get random server from dht --- .../droid/base/providers/ProviderModule.java | 13 +++++++------ .../base/providers/media/AnimeProvider.java | 5 +++-- .../base/providers/media/MediaProvider.java | 19 +++++++++++++++++-- .../base/providers/media/MoviesProvider.java | 5 +++-- .../base/providers/media/TVProvider.java | 5 +++-- 5 files changed, 33 insertions(+), 14 deletions(-) diff --git a/base/src/main/java/butter/droid/base/providers/ProviderModule.java b/base/src/main/java/butter/droid/base/providers/ProviderModule.java index d6e0b4c3e..09ddce648 100644 --- a/base/src/main/java/butter/droid/base/providers/ProviderModule.java +++ b/base/src/main/java/butter/droid/base/providers/ProviderModule.java @@ -23,6 +23,7 @@ import javax.inject.Singleton; +import butter.droid.base.manager.updater.DhtManager; import butter.droid.base.providers.media.AnimeProvider; import butter.droid.base.providers.media.MoviesProvider; import butter.droid.base.providers.media.TVProvider; @@ -43,23 +44,23 @@ public OpenSubsProvider provideOpenSubsProvider(Context context, OkHttpClient cl @Provides @Singleton - public MoviesProvider provideMoviesProvider(Context context, OkHttpClient client, ObjectMapper mapper, + public MoviesProvider provideMoviesProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager, OpenSubsProvider subsProvider) { - return new MoviesProvider(context, client, mapper, subsProvider); + return new MoviesProvider(context, client, mapper, dhtManager, subsProvider); } @Provides @Singleton - public TVProvider provideTVProvider(Context context, OkHttpClient client, ObjectMapper mapper, + public TVProvider provideTVProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager, OpenSubsProvider subsProvider) { - return new TVProvider(context, client, mapper, subsProvider); + return new TVProvider(context, client, mapper, dhtManager, subsProvider); } @Provides @Singleton - public AnimeProvider provideAnimeProvider(Context context, OkHttpClient client, ObjectMapper mapper, + public AnimeProvider provideAnimeProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager, OpenSubsProvider subsProvider) { - return new AnimeProvider(context, client, mapper, subsProvider); + return new AnimeProvider(context, client, mapper, dhtManager, subsProvider); } } diff --git a/base/src/main/java/butter/droid/base/providers/media/AnimeProvider.java b/base/src/main/java/butter/droid/base/providers/media/AnimeProvider.java index c6272da96..6da1f1b6e 100644 --- a/base/src/main/java/butter/droid/base/providers/media/AnimeProvider.java +++ b/base/src/main/java/butter/droid/base/providers/media/AnimeProvider.java @@ -30,6 +30,7 @@ import butter.droid.base.BuildConfig; import butter.droid.base.ButterApplication; import butter.droid.base.R; +import butter.droid.base.manager.updater.DhtManager; import butter.droid.base.providers.media.models.Genre; import butter.droid.base.providers.media.models.Media; import butter.droid.base.providers.media.response.AnimeDetailsReponse; @@ -41,8 +42,8 @@ public class AnimeProvider extends MediaProvider { - public AnimeProvider(Context context, OkHttpClient client, ObjectMapper mapper, @Nullable SubsProvider subsProvider) { - super(context, client, mapper, subsProvider, BuildConfig.ANIME_URLS, "animes/", "anime/", 0); + public AnimeProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager, @Nullable SubsProvider subsProvider) { + super(context, client, mapper, dhtManager, subsProvider, BuildConfig.ANIME_URLS, "animes/", "anime/", 0); } @Override diff --git a/base/src/main/java/butter/droid/base/providers/media/MediaProvider.java b/base/src/main/java/butter/droid/base/providers/media/MediaProvider.java index ec9d065fb..c1e96a16e 100755 --- a/base/src/main/java/butter/droid/base/providers/media/MediaProvider.java +++ b/base/src/main/java/butter/droid/base/providers/media/MediaProvider.java @@ -28,11 +28,14 @@ import java.io.IOException; import java.util.AbstractMap; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import butter.droid.base.ButterApplication; import butter.droid.base.R; import butter.droid.base.content.preferences.Prefs; +import butter.droid.base.manager.updater.DhtManager; import butter.droid.base.providers.BaseProvider; import butter.droid.base.providers.media.models.Genre; import butter.droid.base.providers.media.models.Media; @@ -63,10 +66,22 @@ public abstract class MediaProvider extends BaseProvider { private String itemDetailsPath = ""; private Integer currentApi = 0; - public MediaProvider(Context context, OkHttpClient client, ObjectMapper mapper, @Nullable SubsProvider subsProvider, String[] apiUrls, String itemsPath, String itemDetailsPath, Integer currentApi) { + public MediaProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager, @Nullable SubsProvider subsProvider, String[] apiUrls, String itemsPath, String itemDetailsPath, Integer currentApi) { super(client, mapper); this.subsProvider = subsProvider; - this.apiUrls = apiUrls; + + String[] servers; + try { + servers = dhtManager.servers(); + Collections.shuffle(Arrays.asList(servers)); + } catch (NullPointerException e) { + servers = apiUrls; + } + if (servers.length == 0) { + servers = apiUrls; + } + this.apiUrls = servers; + this.itemsPath = itemsPath; this.itemDetailsPath = itemDetailsPath; this.currentApi = currentApi; diff --git a/base/src/main/java/butter/droid/base/providers/media/MoviesProvider.java b/base/src/main/java/butter/droid/base/providers/media/MoviesProvider.java index 53a3ea747..aa81df822 100755 --- a/base/src/main/java/butter/droid/base/providers/media/MoviesProvider.java +++ b/base/src/main/java/butter/droid/base/providers/media/MoviesProvider.java @@ -30,6 +30,7 @@ import butter.droid.base.BuildConfig; import butter.droid.base.ButterApplication; import butter.droid.base.R; +import butter.droid.base.manager.updater.DhtManager; import butter.droid.base.providers.media.models.Genre; import butter.droid.base.providers.media.models.Media; import butter.droid.base.providers.media.response.MovieResponse; @@ -39,8 +40,8 @@ public class MoviesProvider extends MediaProvider { - public MoviesProvider(Context context, OkHttpClient client, ObjectMapper mapper, @Nullable SubsProvider subsProvider) { - super(context, client, mapper, subsProvider, BuildConfig.MOVIE_URLS, "movies/", "", 0); + public MoviesProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager, @Nullable SubsProvider subsProvider) { + super(context, client, mapper, dhtManager, subsProvider, BuildConfig.MOVIE_URLS, "movies/", "", 0); } @Override diff --git a/base/src/main/java/butter/droid/base/providers/media/TVProvider.java b/base/src/main/java/butter/droid/base/providers/media/TVProvider.java index 4ba31b35d..7b899782a 100644 --- a/base/src/main/java/butter/droid/base/providers/media/TVProvider.java +++ b/base/src/main/java/butter/droid/base/providers/media/TVProvider.java @@ -30,6 +30,7 @@ import butter.droid.base.BuildConfig; import butter.droid.base.ButterApplication; import butter.droid.base.R; +import butter.droid.base.manager.updater.DhtManager; import butter.droid.base.providers.media.models.Genre; import butter.droid.base.providers.media.models.Media; import butter.droid.base.providers.media.response.TVDetailsReponse; @@ -40,8 +41,8 @@ public class TVProvider extends MediaProvider { - public TVProvider(Context context, OkHttpClient client, ObjectMapper mapper, @Nullable SubsProvider subsProvider) { - super(context, client, mapper, subsProvider, BuildConfig.TV_URLS, "shows/", "show/", 0); + public TVProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager, @Nullable SubsProvider subsProvider) { + super(context, client, mapper, dhtManager, subsProvider, BuildConfig.TV_URLS, "shows/", "show/", 0); } @Override From 0c5c179e9a6f0b05f8567ea71a28d744c5ad85ac Mon Sep 17 00:00:00 2001 From: Ivan Borzenkov Date: Tue, 12 Jul 2022 13:08:50 +0300 Subject: [PATCH 5/5] bump version --- .tx/config | 1 + mobile/build.gradle | 2 +- tv/build.gradle | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.tx/config b/.tx/config index a82395990..5d2e0fff6 100644 --- a/.tx/config +++ b/.tx/config @@ -12,3 +12,4 @@ trans.pt_BR = base/src/main/res/values-pt-rBR/strings.xml trans.es_MX = base/src/main/res/values-es-rMX/strings.xml trans.zh_TW = base/src/main/res/values-zh-rTW/strings.xml trans.es_AR = base/src/main/res/values-es-rAR/strings.xml +trans.uk = base/src/main/res/values-uk-rUA/strings.xml diff --git a/mobile/build.gradle b/mobile/build.gradle index 6cd5a9a71..67023d3ea 100644 --- a/mobile/build.gradle +++ b/mobile/build.gradle @@ -11,7 +11,7 @@ android { minSdkVersion rootProject.ext.minSdk targetSdkVersion rootProject.ext.targetSdk versionCode buildNumber - versionName "0.3.5" + versionName "0.3.6" multiDexEnabled true } diff --git a/tv/build.gradle b/tv/build.gradle index c1631e014..731170a25 100644 --- a/tv/build.gradle +++ b/tv/build.gradle @@ -11,7 +11,7 @@ android { minSdkVersion 21 targetSdkVersion rootProject.ext.targetSdk versionCode buildNumber - versionName "0.3.5" + versionName "0.3.6" multiDexEnabled true }