Skip to content

Commit

Permalink
Merge branch 'development'
Browse files Browse the repository at this point in the history
  • Loading branch information
ivan1986 committed Jul 12, 2022
2 parents cac0264 + 0c5c179 commit 8121959
Show file tree
Hide file tree
Showing 16 changed files with 457 additions and 16 deletions.
1 change: 1 addition & 0 deletions .tx/config
Original file line number Diff line number Diff line change
Expand Up @@ -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
1 change: 1 addition & 0 deletions base/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ android {
versionCode buildNumber
multiDexEnabled true
resValue 'string', 'sentry_dsn', rootProject.ext.sentryDsn
resValue 'string', 'dht_public_key', rootProject.ext.dhtPublicKey
}

buildTypes {
Expand Down
5 changes: 5 additions & 0 deletions base/src/main/java/butter/droid/base/ButterApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -108,6 +111,8 @@ public void onCreate() {
Timber.plant(new Timber.DebugTree());
}

dhtManager.updateSettings();

updateManager.setListener(this);
updateManager.checkUpdates(false);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package butter.droid.base.manager.updater;

import android.content.Context;
import android.os.Handler;
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.json.JSONException;
import org.libtorrent4j.Hex;
import org.libtorrent4j.SessionManager;

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, 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);
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 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];
}
}
}
Original file line number Diff line number Diff line change
@@ -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(",");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand Down

0 comments on commit 8121959

Please sign in to comment.