Skip to content

Commit 8121959

Browse files
committed
Merge branch 'development'
2 parents cac0264 + 0c5c179 commit 8121959

File tree

16 files changed

+457
-16
lines changed

16 files changed

+457
-16
lines changed

.tx/config

+1
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ trans.pt_BR = base/src/main/res/values-pt-rBR/strings.xml
1212
trans.es_MX = base/src/main/res/values-es-rMX/strings.xml
1313
trans.zh_TW = base/src/main/res/values-zh-rTW/strings.xml
1414
trans.es_AR = base/src/main/res/values-es-rAR/strings.xml
15+
trans.uk = base/src/main/res/values-uk-rUA/strings.xml

base/build.gradle

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ android {
2626
versionCode buildNumber
2727
multiDexEnabled true
2828
resValue 'string', 'sentry_dsn', rootProject.ext.sentryDsn
29+
resValue 'string', 'dht_public_key', rootProject.ext.dhtPublicKey
2930
}
3031

3132
buildTypes {

base/src/main/java/butter/droid/base/ButterApplication.java

+5
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import butter.droid.base.beaming.BeamManager;
4040
import butter.droid.base.content.preferences.Prefs;
4141
import butter.droid.base.manager.updater.ButterUpdateManager;
42+
import butter.droid.base.manager.updater.DhtManager;
4243
import butter.droid.base.torrent.TorrentService;
4344
import butter.droid.base.utils.FileUtils;
4445
import butter.droid.base.utils.LocaleUtils;
@@ -56,6 +57,8 @@ public class ButterApplication extends Application implements ButterUpdateManage
5657
Picasso picasso;
5758
@Inject
5859
ButterUpdateManager updateManager;
60+
@Inject
61+
DhtManager dhtManager;
5962

6063
@Override
6164
protected void attachBaseContext(Context base) {
@@ -108,6 +111,8 @@ public void onCreate() {
108111
Timber.plant(new Timber.DebugTree());
109112
}
110113

114+
dhtManager.updateSettings();
115+
111116
updateManager.setListener(this);
112117
updateManager.checkUpdates(false);
113118

base/src/main/java/butter/droid/base/content/preferences/Prefs.java

+3
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ public class Prefs {
4040
public static final String TRANSLATE_POSTER = "translate_poster";
4141
public static final String TRANSLATE_EPISODES = "translate_episodes";
4242
public static final String DRAWER_LEARNED = "drawer_learned";
43+
public static final String DHT_DATA = "dht_data";
44+
public static final String DHT_SEQ = "dht_seq";
45+
public static final String DHT_UPDATED = "dht_updated";
4346
public static final String LIBTORRENT_DHT_LIMIT = "libtorrent_dhtlimit";
4447
public static final String FIRST_RUN = "first_run";
4548
public static final String LIBTORRENT_CONNECTION_LIMIT = "libtorrent_connectionlimit";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package butter.droid.base.manager.updater;
2+
3+
import android.content.Context;
4+
import android.os.Handler;
5+
import android.os.Looper;
6+
import android.util.Log;
7+
8+
import com.fasterxml.jackson.core.JsonParseException;
9+
import com.fasterxml.jackson.databind.JsonMappingException;
10+
import com.fasterxml.jackson.databind.ObjectMapper;
11+
import com.github.se_bastiaan.torrentstream.TorrentStream;
12+
import com.github.se_bastiaan.torrentstream.exceptions.NotInitializedException;
13+
14+
import org.json.JSONException;
15+
import org.libtorrent4j.Hex;
16+
import org.libtorrent4j.SessionManager;
17+
18+
import java.io.IOException;
19+
import java.util.ArrayList;
20+
21+
import javax.inject.Inject;
22+
23+
import butter.droid.base.R;
24+
import butter.droid.base.content.preferences.Prefs;
25+
import butter.droid.base.utils.PrefUtils;
26+
27+
public class DhtManager implements Runnable {
28+
29+
private Context mContext;
30+
private ObjectMapper mMapper;
31+
32+
private static final int UPDATE_INTERVAL = 7 * 24 * 60 * 60;
33+
34+
@Inject
35+
public DhtManager(Context context, ObjectMapper mapper)
36+
{
37+
this.mContext = context;
38+
this.mMapper = mapper;
39+
}
40+
41+
public void updateSettings()
42+
{
43+
int updated = PrefUtils.get(mContext, Prefs.DHT_UPDATED, 0);
44+
if (updated + UPDATE_INTERVAL > System.currentTimeMillis() / 1000) {
45+
return;
46+
}
47+
48+
try {
49+
SessionManager sm = TorrentStream.getInstance().getSessionManager();
50+
this.updateFromDHT(sm);
51+
return;
52+
} catch (NotInitializedException e) {
53+
Log.d("DHT", "NotInitializedException");
54+
}
55+
56+
final Handler handler = new Handler(Looper.getMainLooper());
57+
handler.postDelayed(this, 5000);
58+
}
59+
60+
@Override
61+
public void run() {
62+
this.updateSettings();
63+
}
64+
65+
protected void updateFromDHT(SessionManager sm) {
66+
Log.d("DHT", "DHT contains " + sm.stats().dhtNodes() + " nodes");
67+
String dhtPublicKey = mContext.getResources().getString(R.string.dht_public_key);
68+
SessionManager.MutableItem data = sm.dhtGetItem(Hex.decode(dhtPublicKey), Hex.decode(""), 20);
69+
int seq = PrefUtils.get(mContext, Prefs.DHT_SEQ, 0);
70+
if (data.seq <= seq) {
71+
return;
72+
}
73+
Log.d("DHT", "DHT updated " + data.seq);
74+
PrefUtils.save(mContext, Prefs.DHT_DATA, data.item.string());
75+
PrefUtils.save(mContext, Prefs.DHT_SEQ, data.seq);
76+
PrefUtils.save(mContext, Prefs.DHT_UPDATED, System.currentTimeMillis() / 1000);
77+
}
78+
79+
public String[] servers()
80+
{
81+
String dht = PrefUtils.get(mContext, Prefs.DHT_DATA, "");
82+
if (dht.isEmpty()) {
83+
return new String[0];
84+
}
85+
try {
86+
DhtObject obj = mMapper.readValue(dht, DhtObject.class);
87+
return obj.getServers();
88+
} catch (JsonMappingException e) {
89+
return new String[0];
90+
} catch (JsonParseException e) {
91+
return new String[0];
92+
} catch (IOException e) {
93+
return new String[0];
94+
}
95+
}
96+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package butter.droid.base.manager.updater;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
6+
import java.util.ArrayList;
7+
8+
@JsonIgnoreProperties(ignoreUnknown=true)
9+
public class DhtObject {
10+
@JsonProperty("server")
11+
private String server;
12+
13+
public String[] getServers()
14+
{
15+
return server.split(",");
16+
}
17+
}

base/src/main/java/butter/droid/base/providers/ProviderModule.java

+7-6
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import javax.inject.Singleton;
2525

26+
import butter.droid.base.manager.updater.DhtManager;
2627
import butter.droid.base.providers.media.AnimeProvider;
2728
import butter.droid.base.providers.media.MoviesProvider;
2829
import butter.droid.base.providers.media.TVProvider;
@@ -43,23 +44,23 @@ public OpenSubsProvider provideOpenSubsProvider(Context context, OkHttpClient cl
4344

4445
@Provides
4546
@Singleton
46-
public MoviesProvider provideMoviesProvider(Context context, OkHttpClient client, ObjectMapper mapper,
47+
public MoviesProvider provideMoviesProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager,
4748
OpenSubsProvider subsProvider) {
48-
return new MoviesProvider(context, client, mapper, subsProvider);
49+
return new MoviesProvider(context, client, mapper, dhtManager, subsProvider);
4950
}
5051

5152
@Provides
5253
@Singleton
53-
public TVProvider provideTVProvider(Context context, OkHttpClient client, ObjectMapper mapper,
54+
public TVProvider provideTVProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager,
5455
OpenSubsProvider subsProvider) {
55-
return new TVProvider(context, client, mapper, subsProvider);
56+
return new TVProvider(context, client, mapper, dhtManager, subsProvider);
5657
}
5758

5859
@Provides
5960
@Singleton
60-
public AnimeProvider provideAnimeProvider(Context context, OkHttpClient client, ObjectMapper mapper,
61+
public AnimeProvider provideAnimeProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager,
6162
OpenSubsProvider subsProvider) {
62-
return new AnimeProvider(context, client, mapper, subsProvider);
63+
return new AnimeProvider(context, client, mapper, dhtManager, subsProvider);
6364
}
6465

6566
}

base/src/main/java/butter/droid/base/providers/media/AnimeProvider.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import butter.droid.base.BuildConfig;
3131
import butter.droid.base.ButterApplication;
3232
import butter.droid.base.R;
33+
import butter.droid.base.manager.updater.DhtManager;
3334
import butter.droid.base.providers.media.models.Genre;
3435
import butter.droid.base.providers.media.models.Media;
3536
import butter.droid.base.providers.media.response.AnimeDetailsReponse;
@@ -41,8 +42,8 @@
4142

4243
public class AnimeProvider extends MediaProvider {
4344

44-
public AnimeProvider(Context context, OkHttpClient client, ObjectMapper mapper, @Nullable SubsProvider subsProvider) {
45-
super(context, client, mapper, subsProvider, BuildConfig.ANIME_URLS, "animes/", "anime/", 0);
45+
public AnimeProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager, @Nullable SubsProvider subsProvider) {
46+
super(context, client, mapper, dhtManager, subsProvider, BuildConfig.ANIME_URLS, "animes/", "anime/", 0);
4647
}
4748

4849
@Override

base/src/main/java/butter/droid/base/providers/media/MediaProvider.java

+17-2
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@
2828
import java.io.IOException;
2929
import java.util.AbstractMap;
3030
import java.util.ArrayList;
31+
import java.util.Arrays;
32+
import java.util.Collections;
3133
import java.util.List;
3234

3335
import butter.droid.base.ButterApplication;
3436
import butter.droid.base.R;
3537
import butter.droid.base.content.preferences.Prefs;
38+
import butter.droid.base.manager.updater.DhtManager;
3639
import butter.droid.base.providers.BaseProvider;
3740
import butter.droid.base.providers.media.models.Genre;
3841
import butter.droid.base.providers.media.models.Media;
@@ -63,10 +66,22 @@ public abstract class MediaProvider extends BaseProvider {
6366
private String itemDetailsPath = "";
6467
private Integer currentApi = 0;
6568

66-
public MediaProvider(Context context, OkHttpClient client, ObjectMapper mapper, @Nullable SubsProvider subsProvider, String[] apiUrls, String itemsPath, String itemDetailsPath, Integer currentApi) {
69+
public MediaProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager, @Nullable SubsProvider subsProvider, String[] apiUrls, String itemsPath, String itemDetailsPath, Integer currentApi) {
6770
super(client, mapper);
6871
this.subsProvider = subsProvider;
69-
this.apiUrls = apiUrls;
72+
73+
String[] servers;
74+
try {
75+
servers = dhtManager.servers();
76+
Collections.shuffle(Arrays.asList(servers));
77+
} catch (NullPointerException e) {
78+
servers = apiUrls;
79+
}
80+
if (servers.length == 0) {
81+
servers = apiUrls;
82+
}
83+
this.apiUrls = servers;
84+
7085
this.itemsPath = itemsPath;
7186
this.itemDetailsPath = itemDetailsPath;
7287
this.currentApi = currentApi;

base/src/main/java/butter/droid/base/providers/media/MoviesProvider.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import butter.droid.base.BuildConfig;
3131
import butter.droid.base.ButterApplication;
3232
import butter.droid.base.R;
33+
import butter.droid.base.manager.updater.DhtManager;
3334
import butter.droid.base.providers.media.models.Genre;
3435
import butter.droid.base.providers.media.models.Media;
3536
import butter.droid.base.providers.media.response.MovieResponse;
@@ -39,8 +40,8 @@
3940

4041
public class MoviesProvider extends MediaProvider {
4142

42-
public MoviesProvider(Context context, OkHttpClient client, ObjectMapper mapper, @Nullable SubsProvider subsProvider) {
43-
super(context, client, mapper, subsProvider, BuildConfig.MOVIE_URLS, "movies/", "", 0);
43+
public MoviesProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager, @Nullable SubsProvider subsProvider) {
44+
super(context, client, mapper, dhtManager, subsProvider, BuildConfig.MOVIE_URLS, "movies/", "", 0);
4445
}
4546

4647
@Override

base/src/main/java/butter/droid/base/providers/media/TVProvider.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import butter.droid.base.BuildConfig;
3131
import butter.droid.base.ButterApplication;
3232
import butter.droid.base.R;
33+
import butter.droid.base.manager.updater.DhtManager;
3334
import butter.droid.base.providers.media.models.Genre;
3435
import butter.droid.base.providers.media.models.Media;
3536
import butter.droid.base.providers.media.response.TVDetailsReponse;
@@ -40,8 +41,8 @@
4041

4142
public class TVProvider extends MediaProvider {
4243

43-
public TVProvider(Context context, OkHttpClient client, ObjectMapper mapper, @Nullable SubsProvider subsProvider) {
44-
super(context, client, mapper, subsProvider, BuildConfig.TV_URLS, "shows/", "show/", 0);
44+
public TVProvider(Context context, OkHttpClient client, ObjectMapper mapper, DhtManager dhtManager, @Nullable SubsProvider subsProvider) {
45+
super(context, client, mapper, dhtManager, subsProvider, BuildConfig.TV_URLS, "shows/", "show/", 0);
4546
}
4647

4748
@Override

0 commit comments

Comments
 (0)