2018-01-30 08:01:57 +01:00
|
|
|
package org.schabi.newpipe.util;
|
|
|
|
|
|
|
|
import android.content.Context;
|
2018-12-29 18:36:39 +01:00
|
|
|
import android.content.SharedPreferences;
|
2020-08-27 22:55:57 +02:00
|
|
|
import androidx.preference.PreferenceManager;
|
2019-11-24 16:38:06 +01:00
|
|
|
|
2019-10-04 14:59:08 +02:00
|
|
|
import androidx.annotation.DrawableRes;
|
|
|
|
import androidx.annotation.StringRes;
|
2018-01-30 08:01:57 +01:00
|
|
|
|
2019-11-24 16:38:06 +01:00
|
|
|
import com.grack.nanojson.JsonObject;
|
|
|
|
import com.grack.nanojson.JsonParser;
|
|
|
|
import com.grack.nanojson.JsonParserException;
|
|
|
|
|
2018-01-30 08:01:57 +01:00
|
|
|
import org.schabi.newpipe.R;
|
|
|
|
import org.schabi.newpipe.extractor.NewPipe;
|
|
|
|
import org.schabi.newpipe.extractor.ServiceList;
|
|
|
|
import org.schabi.newpipe.extractor.StreamingService;
|
|
|
|
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
2019-11-22 20:01:35 +01:00
|
|
|
import org.schabi.newpipe.extractor.services.peertube.PeertubeInstance;
|
2018-01-30 08:01:57 +01:00
|
|
|
|
2018-03-14 04:25:22 +01:00
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
import static org.schabi.newpipe.extractor.ServiceList.SoundCloud;
|
|
|
|
|
2020-03-31 19:20:15 +02:00
|
|
|
public final class ServiceHelper {
|
2018-02-12 19:44:35 +01:00
|
|
|
private static final StreamingService DEFAULT_FALLBACK_SERVICE = ServiceList.YouTube;
|
2018-01-30 08:01:57 +01:00
|
|
|
|
2020-03-31 19:20:15 +02:00
|
|
|
private ServiceHelper() { }
|
|
|
|
|
2018-01-30 08:01:57 +01:00
|
|
|
@DrawableRes
|
2020-03-31 19:20:15 +02:00
|
|
|
public static int getIcon(final int serviceId) {
|
2018-01-30 08:01:57 +01:00
|
|
|
switch (serviceId) {
|
|
|
|
case 0:
|
2018-02-04 01:29:24 +01:00
|
|
|
return R.drawable.place_holder_youtube;
|
2018-01-30 08:01:57 +01:00
|
|
|
case 1:
|
2018-12-29 18:36:39 +01:00
|
|
|
return R.drawable.place_holder_cloud;
|
|
|
|
case 2:
|
2018-12-23 22:41:42 +01:00
|
|
|
return R.drawable.place_holder_gadse;
|
2019-03-23 15:19:37 +01:00
|
|
|
case 3:
|
|
|
|
return R.drawable.place_holder_peertube;
|
2018-01-30 08:01:57 +01:00
|
|
|
default:
|
2018-12-29 18:36:39 +01:00
|
|
|
return R.drawable.place_holder_circle;
|
2018-01-30 08:01:57 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-31 19:20:15 +02:00
|
|
|
public static String getTranslatedFilterString(final String filter, final Context c) {
|
2019-11-23 20:04:40 +01:00
|
|
|
switch (filter) {
|
2020-03-31 19:20:15 +02:00
|
|
|
case "all":
|
|
|
|
return c.getString(R.string.all);
|
|
|
|
case "videos":
|
2020-12-23 15:14:26 +01:00
|
|
|
case "sepia_videos":
|
2020-03-21 20:53:30 +01:00
|
|
|
case "music_videos":
|
2020-03-31 19:20:15 +02:00
|
|
|
return c.getString(R.string.videos_string);
|
|
|
|
case "channels":
|
|
|
|
return c.getString(R.string.channels);
|
|
|
|
case "playlists":
|
2020-03-21 20:53:30 +01:00
|
|
|
case "music_playlists":
|
2020-03-31 19:20:15 +02:00
|
|
|
return c.getString(R.string.playlists);
|
|
|
|
case "tracks":
|
|
|
|
return c.getString(R.string.tracks);
|
|
|
|
case "users":
|
|
|
|
return c.getString(R.string.users);
|
|
|
|
case "conferences":
|
|
|
|
return c.getString(R.string.conferences);
|
|
|
|
case "events":
|
|
|
|
return c.getString(R.string.events);
|
2020-03-17 11:39:01 +01:00
|
|
|
case "music_songs":
|
2020-03-21 20:53:30 +01:00
|
|
|
return c.getString(R.string.songs);
|
2020-03-17 11:39:01 +01:00
|
|
|
case "music_albums":
|
2020-03-21 20:53:30 +01:00
|
|
|
return c.getString(R.string.albums);
|
2020-03-17 11:39:01 +01:00
|
|
|
case "music_artists":
|
2020-03-21 20:53:30 +01:00
|
|
|
return c.getString(R.string.artists);
|
2020-03-31 19:20:15 +02:00
|
|
|
default:
|
|
|
|
return filter;
|
2018-07-19 16:18:57 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-08 15:50:46 +01:00
|
|
|
/**
|
|
|
|
* Get a resource string with instructions for importing subscriptions for each service.
|
|
|
|
*
|
2020-03-31 19:20:15 +02:00
|
|
|
* @param serviceId service to get the instructions for
|
2018-03-08 15:50:46 +01:00
|
|
|
* @return the string resource containing the instructions or -1 if the service don't support it
|
|
|
|
*/
|
|
|
|
@StringRes
|
2020-03-31 19:20:15 +02:00
|
|
|
public static int getImportInstructions(final int serviceId) {
|
2018-03-08 15:50:46 +01:00
|
|
|
switch (serviceId) {
|
|
|
|
case 0:
|
|
|
|
return R.string.import_youtube_instructions;
|
|
|
|
case 1:
|
|
|
|
return R.string.import_soundcloud_instructions;
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* For services that support importing from a channel url, return a hint that will
|
|
|
|
* be used in the EditText that the user will type in his channel url.
|
|
|
|
*
|
2020-03-31 19:20:15 +02:00
|
|
|
* @param serviceId service to get the hint for
|
2018-03-08 15:50:46 +01:00
|
|
|
* @return the hint's string resource or -1 if the service don't support it
|
|
|
|
*/
|
|
|
|
@StringRes
|
2020-03-31 19:20:15 +02:00
|
|
|
public static int getImportInstructionsHint(final int serviceId) {
|
2018-03-08 15:50:46 +01:00
|
|
|
switch (serviceId) {
|
|
|
|
case 1:
|
|
|
|
return R.string.import_soundcloud_instructions_hint;
|
|
|
|
default:
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-31 19:20:15 +02:00
|
|
|
public static int getSelectedServiceId(final Context context) {
|
2018-01-30 08:01:57 +01:00
|
|
|
final String serviceName = PreferenceManager.getDefaultSharedPreferences(context)
|
2020-03-31 19:20:15 +02:00
|
|
|
.getString(context.getString(R.string.current_service_key),
|
|
|
|
context.getString(R.string.default_service_value));
|
2018-01-30 08:01:57 +01:00
|
|
|
|
|
|
|
int serviceId;
|
|
|
|
try {
|
|
|
|
serviceId = NewPipe.getService(serviceName).getServiceId();
|
2020-08-16 10:24:58 +02:00
|
|
|
} catch (final ExtractionException e) {
|
2018-01-30 08:01:57 +01:00
|
|
|
serviceId = DEFAULT_FALLBACK_SERVICE.getServiceId();
|
|
|
|
}
|
|
|
|
|
|
|
|
return serviceId;
|
|
|
|
}
|
|
|
|
|
2020-03-31 19:20:15 +02:00
|
|
|
public static void setSelectedServiceId(final Context context, final int serviceId) {
|
2018-01-30 08:01:57 +01:00
|
|
|
String serviceName;
|
|
|
|
try {
|
2018-02-12 19:44:35 +01:00
|
|
|
serviceName = NewPipe.getService(serviceId).getServiceInfo().getName();
|
2020-08-16 10:24:58 +02:00
|
|
|
} catch (final ExtractionException e) {
|
2018-02-12 19:44:35 +01:00
|
|
|
serviceName = DEFAULT_FALLBACK_SERVICE.getServiceInfo().getName();
|
2018-01-30 08:01:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
setSelectedServicePreferences(context, serviceName);
|
|
|
|
}
|
|
|
|
|
2020-03-31 19:20:15 +02:00
|
|
|
public static void setSelectedServiceId(final Context context, final String serviceName) {
|
2020-08-16 10:24:58 +02:00
|
|
|
final int serviceId = NewPipe.getIdOfService(serviceName);
|
2020-03-31 19:20:15 +02:00
|
|
|
if (serviceId == -1) {
|
|
|
|
setSelectedServicePreferences(context,
|
|
|
|
DEFAULT_FALLBACK_SERVICE.getServiceInfo().getName());
|
|
|
|
} else {
|
|
|
|
setSelectedServicePreferences(context, serviceName);
|
|
|
|
}
|
2018-01-30 08:01:57 +01:00
|
|
|
}
|
|
|
|
|
2020-03-31 19:20:15 +02:00
|
|
|
private static void setSelectedServicePreferences(final Context context,
|
|
|
|
final String serviceName) {
|
2018-01-30 08:01:57 +01:00
|
|
|
PreferenceManager.getDefaultSharedPreferences(context).edit().
|
|
|
|
putString(context.getString(R.string.current_service_key), serviceName).apply();
|
|
|
|
}
|
2018-03-14 04:25:22 +01:00
|
|
|
|
|
|
|
public static long getCacheExpirationMillis(final int serviceId) {
|
|
|
|
if (serviceId == SoundCloud.getServiceId()) {
|
|
|
|
return TimeUnit.MILLISECONDS.convert(5, TimeUnit.MINUTES);
|
|
|
|
} else {
|
|
|
|
return TimeUnit.MILLISECONDS.convert(1, TimeUnit.HOURS);
|
|
|
|
}
|
|
|
|
}
|
2018-03-30 18:41:11 +02:00
|
|
|
|
|
|
|
public static boolean isBeta(final StreamingService s) {
|
2019-11-23 20:04:40 +01:00
|
|
|
switch (s.getServiceInfo().getName()) {
|
2020-03-31 19:20:15 +02:00
|
|
|
case "YouTube":
|
|
|
|
return false;
|
|
|
|
default:
|
|
|
|
return true;
|
2018-03-30 18:41:11 +02:00
|
|
|
}
|
|
|
|
}
|
2018-12-29 18:36:39 +01:00
|
|
|
|
2020-03-31 19:20:15 +02:00
|
|
|
public static void initService(final Context context, final int serviceId) {
|
2019-11-24 16:38:06 +01:00
|
|
|
if (serviceId == ServiceList.PeerTube.getServiceId()) {
|
2020-08-16 10:24:58 +02:00
|
|
|
final SharedPreferences sharedPreferences = PreferenceManager
|
2020-03-31 19:20:15 +02:00
|
|
|
.getDefaultSharedPreferences(context);
|
2020-08-16 10:24:58 +02:00
|
|
|
final String json = sharedPreferences.getString(context.getString(
|
2020-03-31 19:20:15 +02:00
|
|
|
R.string.peertube_selected_instance_key), null);
|
2019-11-24 16:38:06 +01:00
|
|
|
if (null == json) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2020-08-16 10:24:58 +02:00
|
|
|
final JsonObject jsonObject;
|
2019-11-24 16:38:06 +01:00
|
|
|
try {
|
|
|
|
jsonObject = JsonParser.object().from(json);
|
2020-08-16 10:24:58 +02:00
|
|
|
} catch (final JsonParserException e) {
|
2019-11-24 16:38:06 +01:00
|
|
|
return;
|
|
|
|
}
|
2020-08-16 10:24:58 +02:00
|
|
|
final String name = jsonObject.getString("name");
|
|
|
|
final String url = jsonObject.getString("url");
|
|
|
|
final PeertubeInstance instance = new PeertubeInstance(url, name);
|
2019-11-22 20:01:35 +01:00
|
|
|
ServiceList.PeerTube.setInstance(instance);
|
2018-12-29 18:36:39 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-31 19:20:15 +02:00
|
|
|
public static void initServices(final Context context) {
|
2020-08-16 10:24:58 +02:00
|
|
|
for (final StreamingService s : ServiceList.all()) {
|
2018-12-29 18:36:39 +01:00
|
|
|
initService(context, s.getServiceId());
|
|
|
|
}
|
|
|
|
}
|
2018-01-30 08:01:57 +01:00
|
|
|
}
|