Skip to content

Commit 0d65c19

Browse files
committed
Add YT-plugable API changes and support invidious
* Reworked managing of instances * Made YT proxyable * Reworked UIs * Added UIs for management (still in progress)
1 parent e21b664 commit 0d65c19

103 files changed

Lines changed: 1454 additions & 989 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/src/main/java/org/schabi/newpipe/App.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
import org.schabi.newpipe.settings.NewPipeSettings;
2222
import org.schabi.newpipe.util.Localization;
2323
import org.schabi.newpipe.util.PicassoHelper;
24-
import org.schabi.newpipe.util.ServiceHelper;
2524
import org.schabi.newpipe.util.StateSaver;
25+
import org.schabi.newpipe.util.services.ServiceHelper;
2626

2727
import java.io.IOException;
2828
import java.io.InterruptedIOException;

app/src/main/java/org/schabi/newpipe/MainActivity.java

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,11 @@
6363
import org.schabi.newpipe.databinding.InstanceSpinnerLayoutBinding;
6464
import org.schabi.newpipe.databinding.ToolbarLayoutBinding;
6565
import org.schabi.newpipe.error.ErrorUtil;
66+
import org.schabi.newpipe.extractor.InstanceBasedStreamingService;
6667
import org.schabi.newpipe.extractor.NewPipe;
6768
import org.schabi.newpipe.extractor.StreamingService;
6869
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
69-
import org.schabi.newpipe.extractor.services.peertube.PeertubeInstance;
70+
import org.schabi.newpipe.extractor.instance.Instance;
7071
import org.schabi.newpipe.fragments.BackPressable;
7172
import org.schabi.newpipe.fragments.MainFragment;
7273
import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
@@ -81,13 +82,15 @@
8182
import org.schabi.newpipe.util.KioskTranslator;
8283
import org.schabi.newpipe.util.Localization;
8384
import org.schabi.newpipe.util.NavigationHelper;
84-
import org.schabi.newpipe.util.PeertubeHelper;
8585
import org.schabi.newpipe.util.PermissionHelper;
8686
import org.schabi.newpipe.util.SerializedCache;
87-
import org.schabi.newpipe.util.ServiceHelper;
8887
import org.schabi.newpipe.util.StateSaver;
8988
import org.schabi.newpipe.util.TLSSocketFactoryCompat;
9089
import org.schabi.newpipe.util.ThemeHelper;
90+
import org.schabi.newpipe.util.services.InstanceManager;
91+
import org.schabi.newpipe.util.services.PeertubeInstanceManager;
92+
import org.schabi.newpipe.util.services.ServiceHelper;
93+
import org.schabi.newpipe.util.services.YoutubeLikeInstanceManager;
9194
import org.schabi.newpipe.views.FocusOverlayView;
9295

9396
import java.util.ArrayList;
@@ -389,24 +392,30 @@ private void showServices() {
389392
.setIcon(ServiceHelper.getIcon(s.getServiceId()));
390393

391394
// peertube specifics
392-
if (s.getServiceId() == 3) {
393-
enhancePeertubeMenu(s, menuItem);
395+
InstanceManager<?> instanceManager = null;
396+
if (s.getServiceId() == 0) {
397+
instanceManager = YoutubeLikeInstanceManager.MANAGER;
398+
} else if (s.getServiceId() == 3) {
399+
instanceManager = PeertubeInstanceManager.MANAGER;
400+
}
401+
if (instanceManager != null) {
402+
enhanceServiceMenu(menuItem, instanceManager);
394403
}
395404
}
396405
drawerLayoutBinding.navigation.getMenu()
397406
.getItem(ServiceHelper.getSelectedServiceId(this))
398407
.setChecked(true);
399408
}
400409

401-
private void enhancePeertubeMenu(final StreamingService s, final MenuItem menuItem) {
402-
final PeertubeInstance currentInstance = PeertubeHelper.getCurrentInstance();
403-
menuItem.setTitle(currentInstance.getName() + (ServiceHelper.isBeta(s) ? " (beta)" : ""));
404-
final Spinner spinner = InstanceSpinnerLayoutBinding.inflate(LayoutInflater.from(this))
405-
.getRoot();
406-
final List<PeertubeInstance> instances = PeertubeHelper.getInstanceList(this);
410+
private <I extends Instance> void enhanceServiceMenu(final MenuItem menuItem,
411+
final InstanceManager<I> manager) {
412+
final I currentInstance = manager.getCurrentInstance();
413+
menuItem.setTitle(currentInstance.getName());
414+
415+
final List<I> allInstances = manager.getInstanceList(getApplicationContext());
407416
final List<String> items = new ArrayList<>();
408417
int defaultSelect = 0;
409-
for (final PeertubeInstance instance : instances) {
418+
for (final I instance : allInstances) {
410419
items.add(instance.getName());
411420
if (instance.getUrl().equals(currentInstance.getUrl())) {
412421
defaultSelect = items.size() - 1;
@@ -415,29 +424,34 @@ private void enhancePeertubeMenu(final StreamingService s, final MenuItem menuIt
415424
final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
416425
R.layout.instance_spinner_item, items);
417426
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
427+
428+
final Spinner spinner =
429+
InstanceSpinnerLayoutBinding.inflate(LayoutInflater.from(this)).getRoot();
418430
spinner.setAdapter(adapter);
419431
spinner.setSelection(defaultSelect, false);
420432
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
421433
@Override
422434
public void onItemSelected(final AdapterView<?> parent, final View view,
423435
final int position, final long id) {
424-
final PeertubeInstance newInstance = instances.get(position);
425-
if (newInstance.getUrl().equals(PeertubeHelper.getCurrentInstance().getUrl())) {
436+
final I newInstance = allInstances.get(position);
437+
if (newInstance.getUrl().equals(manager.getCurrentInstance().getUrl())) {
426438
return;
427439
}
428-
PeertubeHelper.selectInstance(newInstance, getApplicationContext());
440+
441+
manager.saveCurrentInstance(newInstance, getApplicationContext());
442+
429443
changeService(menuItem);
430444
mainBinding.getRoot().closeDrawers();
431445
new Handler(Looper.getMainLooper()).postDelayed(() -> {
432-
getSupportFragmentManager().popBackStack(null,
433-
FragmentManager.POP_BACK_STACK_INCLUSIVE);
446+
getSupportFragmentManager()
447+
.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
434448
ActivityCompat.recreate(MainActivity.this);
435449
}, 300);
436450
}
437451

438452
@Override
439453
public void onNothingSelected(final AdapterView<?> parent) {
440-
454+
// Do nothing
441455
}
442456
});
443457
menuItem.setActionView(spinner);
@@ -466,8 +480,17 @@ protected void onResume() {
466480
mainBinding.getRoot().closeDrawer(GravityCompat.START, false);
467481
try {
468482
final int selectedServiceId = ServiceHelper.getSelectedServiceId(this);
469-
final String selectedServiceName = NewPipe.getService(selectedServiceId)
470-
.getServiceInfo().getName();
483+
final StreamingService service = NewPipe.getService(selectedServiceId);
484+
String selectedServiceName = service.getServiceInfo().getName();
485+
if (service instanceof InstanceBasedStreamingService) {
486+
final Instance instance =
487+
((InstanceBasedStreamingService) service).getInstance();
488+
selectedServiceName =
489+
(instance.getServiceName() != null
490+
? instance.getServiceName() + " / "
491+
: "") + instance.getName();
492+
}
493+
471494
drawerHeaderBinding.drawerHeaderServiceView.setText(selectedServiceName);
472495
drawerHeaderBinding.drawerHeaderServiceIcon.setImageResource(ServiceHelper
473496
.getIcon(selectedServiceId));

app/src/main/java/org/schabi/newpipe/error/ErrorInfo.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import org.schabi.newpipe.extractor.exceptions.AccountTerminatedException
1212
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException
1313
import org.schabi.newpipe.extractor.exceptions.ContentNotSupportedException
1414
import org.schabi.newpipe.extractor.exceptions.ExtractionException
15-
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor.DeobfuscateException
15+
import org.schabi.newpipe.extractor.services.youtube.youtube.extractors.YoutubeStreamExtractor.DeobfuscateException
1616
import org.schabi.newpipe.ktx.isNetworkRelated
1717
import java.io.PrintWriter
1818
import java.io.StringWriter

app/src/main/java/org/schabi/newpipe/error/ErrorPanelHelper.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import org.schabi.newpipe.extractor.utils.Utils.isNullOrEmpty
3030
import org.schabi.newpipe.ktx.animate
3131
import org.schabi.newpipe.ktx.isInterruptedCaused
3232
import org.schabi.newpipe.ktx.isNetworkRelated
33-
import org.schabi.newpipe.util.ServiceHelper
33+
import org.schabi.newpipe.util.services.ServiceHelper
3434
import java.util.concurrent.TimeUnit
3535

3636
class ErrorPanelHelper(

app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.schabi.newpipe.settings.tabs.Tab;
2929
import org.schabi.newpipe.settings.tabs.TabsManager;
3030
import org.schabi.newpipe.util.NavigationHelper;
31-
import org.schabi.newpipe.util.ServiceHelper;
31+
import org.schabi.newpipe.util.services.ServiceHelper;
3232

3333
import java.util.ArrayList;
3434
import java.util.List;

app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/DefaultKioskFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
99
import org.schabi.newpipe.extractor.kiosk.KioskList;
1010
import org.schabi.newpipe.util.KioskTranslator;
11-
import org.schabi.newpipe.util.ServiceHelper;
11+
import org.schabi.newpipe.util.services.ServiceHelper;
1212

1313
public class DefaultKioskFragment extends KioskFragment {
1414

app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
import org.schabi.newpipe.extractor.ListExtractor;
3838
import org.schabi.newpipe.extractor.ServiceList;
3939
import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
40-
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
40+
import org.schabi.newpipe.extractor.services.youtube.shared.YoutubePlaylistHelper;
4141
import org.schabi.newpipe.extractor.stream.StreamInfoItem;
4242
import org.schabi.newpipe.fragments.list.BaseListInfoFragment;
4343
import org.schabi.newpipe.info_list.dialog.InfoItemDialog;
@@ -286,8 +286,8 @@ public void handleResult(@NonNull final PlaylistInfo result) {
286286

287287
final String avatarUrl = result.getUploaderAvatarUrl();
288288
if (result.getServiceId() == ServiceList.YouTube.getServiceId()
289-
&& (YoutubeParsingHelper.isYoutubeMixId(result.getId())
290-
|| YoutubeParsingHelper.isYoutubeMusicMixId(result.getId()))) {
289+
&& (YoutubePlaylistHelper.isYoutubeMixId(result.getId())
290+
|| YoutubePlaylistHelper.isYoutubeMusicMixId(result.getId()))) {
291291
// this is an auto-generated playlist (e.g. Youtube mix), so a radio is shown
292292
final ShapeAppearanceModel model = ShapeAppearanceModel.builder()
293293
.setAllCorners(CornerFamily.ROUNDED, 0f)

app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
import org.schabi.newpipe.extractor.search.SearchExtractor;
5454
import org.schabi.newpipe.extractor.search.SearchInfo;
5555
import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeSearchQueryHandlerFactory;
56-
import org.schabi.newpipe.extractor.services.youtube.linkHandler.YoutubeSearchQueryHandlerFactory;
56+
import org.schabi.newpipe.extractor.services.youtube.youtube.linkHandler.YoutubeSearchQueryHandlerFactory;
5757
import org.schabi.newpipe.fragments.BackPressable;
5858
import org.schabi.newpipe.fragments.list.BaseListFragment;
5959
import org.schabi.newpipe.ktx.AnimationType;
@@ -65,7 +65,7 @@
6565
import org.schabi.newpipe.util.ExtractorHelper;
6666
import org.schabi.newpipe.util.KeyboardUtil;
6767
import org.schabi.newpipe.util.NavigationHelper;
68-
import org.schabi.newpipe.util.ServiceHelper;
68+
import org.schabi.newpipe.util.services.ServiceHelper;
6969

7070
import java.util.ArrayList;
7171
import java.util.Arrays;

app/src/main/java/org/schabi/newpipe/local/subscription/SubscriptionsImportFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import org.schabi.newpipe.streams.io.NoFileManagerSafeGuard;
3434
import org.schabi.newpipe.streams.io.StoredFileHelper;
3535
import org.schabi.newpipe.util.Constants;
36-
import org.schabi.newpipe.util.ServiceHelper;
36+
import org.schabi.newpipe.util.services.ServiceHelper;
3737

3838
import java.util.Collections;
3939
import java.util.List;

app/src/main/java/org/schabi/newpipe/local/subscription/item/FeedImportExportItem.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ import org.schabi.newpipe.databinding.FeedImportExportGroupBinding
1414
import org.schabi.newpipe.extractor.NewPipe
1515
import org.schabi.newpipe.extractor.exceptions.ExtractionException
1616
import org.schabi.newpipe.ktx.animateRotation
17-
import org.schabi.newpipe.util.ServiceHelper
1817
import org.schabi.newpipe.util.ThemeHelper
18+
import org.schabi.newpipe.util.services.ServiceHelper
1919
import org.schabi.newpipe.views.CollapsibleView
2020

2121
class FeedImportExportItem(

0 commit comments

Comments
 (0)