6363import org .schabi .newpipe .databinding .InstanceSpinnerLayoutBinding ;
6464import org .schabi .newpipe .databinding .ToolbarLayoutBinding ;
6565import org .schabi .newpipe .error .ErrorUtil ;
66+ import org .schabi .newpipe .extractor .InstanceBasedStreamingService ;
6667import org .schabi .newpipe .extractor .NewPipe ;
6768import org .schabi .newpipe .extractor .StreamingService ;
6869import org .schabi .newpipe .extractor .exceptions .ExtractionException ;
69- import org .schabi .newpipe .extractor .services . peertube . PeertubeInstance ;
70+ import org .schabi .newpipe .extractor .instance . Instance ;
7071import org .schabi .newpipe .fragments .BackPressable ;
7172import org .schabi .newpipe .fragments .MainFragment ;
7273import org .schabi .newpipe .fragments .detail .VideoDetailFragment ;
8182import org .schabi .newpipe .util .KioskTranslator ;
8283import org .schabi .newpipe .util .Localization ;
8384import org .schabi .newpipe .util .NavigationHelper ;
84- import org .schabi .newpipe .util .PeertubeHelper ;
8585import org .schabi .newpipe .util .PermissionHelper ;
8686import org .schabi .newpipe .util .SerializedCache ;
87- import org .schabi .newpipe .util .ServiceHelper ;
8887import org .schabi .newpipe .util .StateSaver ;
8988import org .schabi .newpipe .util .TLSSocketFactoryCompat ;
9089import 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 ;
9194import org .schabi .newpipe .views .FocusOverlayView ;
9295
9396import 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 ));
0 commit comments