mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 15:23:00 +00:00 
			
		
		
		
	Merge remote-tracking branch 'origin/master'
This commit is contained in:
		| @@ -4,8 +4,7 @@ import android.test.AndroidTestCase; | ||||
|  | ||||
| import org.schabi.newpipe.Downloader; | ||||
| import org.schabi.newpipe.extractor.ChannelExtractor; | ||||
| import org.schabi.newpipe.extractor.SearchEngine; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
|  | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 12.09.16. | ||||
| @@ -33,7 +32,7 @@ public class YoutubeChannelExtractorTest extends AndroidTestCase  { | ||||
|     @Override | ||||
|     public void setUp() throws Exception { | ||||
|         super.setUp(); | ||||
|         extractor = ServiceList.getService("Youtube") | ||||
|         extractor = NewPipe.getService("Youtube") | ||||
|                 .getChannelExtractorInstance("https://www.youtube.com/channel/UCYJ61XIK64sp6ZFFS8sctxw", 0, new Downloader()); | ||||
|     } | ||||
|  | ||||
| @@ -67,13 +66,13 @@ public class YoutubeChannelExtractorTest extends AndroidTestCase  { | ||||
|     } | ||||
|  | ||||
|     public void testGetNextPage() throws Exception { | ||||
|         extractor = ServiceList.getService("Youtube") | ||||
|         extractor = NewPipe.getService("Youtube") | ||||
|                 .getChannelExtractorInstance("https://www.youtube.com/channel/UCYJ61XIK64sp6ZFFS8sctxw", 1, new Downloader()); | ||||
|         assertTrue("next page didn't have content", !extractor.getStreams().getItemList().isEmpty()); | ||||
|     } | ||||
|  | ||||
|     public void testGetNextNextPageUrl() throws Exception { | ||||
|         extractor = ServiceList.getService("Youtube") | ||||
|         extractor = NewPipe.getService("Youtube") | ||||
|                 .getChannelExtractorInstance("https://www.youtube.com/channel/UCYJ61XIK64sp6ZFFS8sctxw", 2, new Downloader()); | ||||
|         assertTrue("next page didn't have content", extractor.hasNextPage()); | ||||
|     } | ||||
|   | ||||
| @@ -2,15 +2,11 @@ package org.schabi.newpipe.extractor.youtube; | ||||
|  | ||||
| import android.test.AndroidTestCase; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.AbstractVideoInfo; | ||||
| import org.schabi.newpipe.extractor.SearchResult; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.StreamPreviewInfo; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.SearchEngine; | ||||
| import org.schabi.newpipe.Downloader; | ||||
|  | ||||
| import java.io.PrintWriter; | ||||
| import java.io.StringWriter; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
| @@ -40,7 +36,7 @@ public class YoutubeSearchEngineTest extends AndroidTestCase { | ||||
|     @Override | ||||
|     public void setUp() throws Exception { | ||||
|         super.setUp(); | ||||
|         SearchEngine engine = ServiceList.getService("Youtube") | ||||
|         SearchEngine engine = NewPipe.getService("Youtube") | ||||
|                 .getSearchEngineInstance(new Downloader()); | ||||
|  | ||||
|         result = engine.search("this is something boring", | ||||
|   | ||||
| @@ -6,9 +6,9 @@ import org.schabi.newpipe.Downloader; | ||||
| import org.schabi.newpipe.extractor.AbstractVideoInfo; | ||||
| import org.schabi.newpipe.extractor.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.ParsingException; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.StreamExtractor; | ||||
| import org.schabi.newpipe.extractor.VideoStream; | ||||
| import org.schabi.newpipe.extractor.stream_info.VideoStream; | ||||
|  | ||||
| import java.io.IOException; | ||||
|  | ||||
| @@ -37,7 +37,7 @@ public class YoutubeStreamExtractorDefaultTest extends AndroidTestCase { | ||||
|     private StreamExtractor extractor; | ||||
|  | ||||
|     public void setUp() throws IOException, ExtractionException { | ||||
|         extractor = ServiceList.getService("Youtube") | ||||
|         extractor = NewPipe.getService("Youtube") | ||||
|                 .getExtractorInstance("https://www.youtube.com/watch?v=YQHsXMglC9A", new Downloader()); | ||||
|     } | ||||
|  | ||||
| @@ -48,7 +48,7 @@ public class YoutubeStreamExtractorDefaultTest extends AndroidTestCase { | ||||
|  | ||||
|     public void testGetValidTimeStamp() throws ExtractionException, IOException { | ||||
|         StreamExtractor extractor = | ||||
|                 ServiceList.getService("Youtube") | ||||
|                 NewPipe.getService("Youtube") | ||||
|                         .getExtractorInstance("https://youtu.be/FmG385_uUys?t=174", new Downloader()); | ||||
|         assertTrue(Integer.toString(extractor.getTimeStamp()), | ||||
|                 extractor.getTimeStamp() == 174); | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import android.test.AndroidTestCase; | ||||
|  | ||||
| import org.schabi.newpipe.Downloader; | ||||
| import org.schabi.newpipe.extractor.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.services.youtube.YoutubeStreamExtractor; | ||||
|  | ||||
| import java.io.IOException; | ||||
| @@ -39,7 +39,7 @@ public class YoutubeStreamExtractorGemaTest extends AndroidTestCase { | ||||
|     public void testGemaError() throws IOException, ExtractionException { | ||||
|         if(testActive) { | ||||
|             try { | ||||
|                 ServiceList.getService("Youtube") | ||||
|                 NewPipe.getService("Youtube") | ||||
|                         .getExtractorInstance("https://www.youtube.com/watch?v=3O1_3zBUKM8", | ||||
|                         new Downloader()); | ||||
|             } catch(YoutubeStreamExtractor.GemaException ge) { | ||||
|   | ||||
| @@ -2,11 +2,8 @@ package org.schabi.newpipe.extractor.youtube; | ||||
|  | ||||
| import android.test.AndroidTestCase; | ||||
|  | ||||
| import org.schabi.newpipe.Downloader; | ||||
| import org.schabi.newpipe.extractor.AbstractVideoInfo; | ||||
| import org.schabi.newpipe.extractor.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.ParsingException; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.StreamExtractor; | ||||
|  | ||||
| import java.io.IOException; | ||||
| @@ -39,7 +36,7 @@ public class YoutubeStreamExtractorLiveStreamTest extends AndroidTestCase { | ||||
|     public void setUp() throws IOException, ExtractionException { | ||||
|         //todo: make the extractor not throw over a livestream | ||||
|         /* | ||||
|         extractor = ServiceList.getService("Youtube") | ||||
|         extractor = NewPipe.getService("Youtube") | ||||
|                 .getExtractorInstance("https://www.youtube.com/watch?v=J0s6NjqdjLE", new Downloader()); | ||||
|                 */ | ||||
|     } | ||||
|   | ||||
| @@ -4,10 +4,10 @@ import android.test.AndroidTestCase; | ||||
|  | ||||
| import org.schabi.newpipe.Downloader; | ||||
| import org.schabi.newpipe.extractor.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.ParsingException; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.StreamExtractor; | ||||
| import org.schabi.newpipe.extractor.VideoStream; | ||||
| import org.schabi.newpipe.extractor.stream_info.VideoStream; | ||||
|  | ||||
| import java.io.IOException; | ||||
|  | ||||
| @@ -16,7 +16,7 @@ public class YoutubeStreamExtractorRestrictedTest extends AndroidTestCase { | ||||
|     private StreamExtractor extractor; | ||||
|  | ||||
|     public void setUp() throws IOException, ExtractionException { | ||||
|         extractor = ServiceList.getService("Youtube") | ||||
|         extractor = NewPipe.getService("Youtube") | ||||
|                 .getExtractorInstance("https://www.youtube.com/watch?v=i6JTvzrpBy0", | ||||
|                         new Downloader()); | ||||
|     } | ||||
| @@ -27,7 +27,7 @@ public class YoutubeStreamExtractorRestrictedTest extends AndroidTestCase { | ||||
|     } | ||||
|  | ||||
|     public void testGetValidTimeStamp() throws ExtractionException, IOException { | ||||
|         StreamExtractor extractor=ServiceList.getService("Youtube") | ||||
|         StreamExtractor extractor= NewPipe.getService("Youtube") | ||||
|                 .getExtractorInstance("https://youtu.be/FmG385_uUys?t=174", | ||||
|                         new Downloader()); | ||||
|         assertTrue(Integer.toString(extractor.getTimeStamp()), | ||||
|   | ||||
| @@ -29,6 +29,7 @@ | ||||
|         <activity | ||||
|             android:name=".detail.VideoItemDetailActivity" | ||||
|             android:label="@string/title_videoitem_detail" | ||||
|             android:launchMode="singleTask" | ||||
|             android:theme="@style/AppTheme"> | ||||
|             <meta-data | ||||
|                 android:name="android.support.PARENT_ACTIVITY" | ||||
|   | ||||
| @@ -11,6 +11,7 @@ import org.acra.config.ACRAConfiguration; | ||||
| import org.acra.config.ACRAConfigurationException; | ||||
| import org.acra.config.ConfigurationBuilder; | ||||
| import org.acra.sender.ReportSenderFactory; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.report.AcraReportSenderFactory; | ||||
| import org.schabi.newpipe.report.ErrorActivity; | ||||
| import org.schabi.newpipe.settings.SettingsActivity; | ||||
| @@ -60,6 +61,9 @@ public class App extends Application { | ||||
|                             "Could not initialize ACRA crash report", R.string.app_ui_crash)); | ||||
|         } | ||||
|  | ||||
|         //init NewPipe | ||||
|         NewPipe.init(new Downloader()); | ||||
|  | ||||
|         // Initialize image loader | ||||
|         ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).build(); | ||||
|         ImageLoader.getInstance().init(config); | ||||
|   | ||||
| @@ -20,12 +20,12 @@ import com.nostra13.universalimageloader.core.ImageLoader; | ||||
|  | ||||
| import org.schabi.newpipe.detail.VideoItemDetailActivity; | ||||
| import org.schabi.newpipe.detail.VideoItemDetailFragment; | ||||
| import org.schabi.newpipe.extractor.ChannelExtractor; | ||||
| import org.schabi.newpipe.extractor.ChannelInfo; | ||||
| import org.schabi.newpipe.extractor.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.ParsingException; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.StreamingService; | ||||
| import org.schabi.newpipe.extractor.channel.ChannelExtractor; | ||||
| import org.schabi.newpipe.extractor.channel.ChannelInfo; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
| import org.schabi.newpipe.info_list.InfoItemBuilder; | ||||
| import org.schabi.newpipe.info_list.InfoListAdapter; | ||||
| import org.schabi.newpipe.report.ErrorActivity; | ||||
| @@ -188,11 +188,11 @@ public class ChannelActivity extends AppCompatActivity { | ||||
|             public void run() { | ||||
|                 StreamingService service = null; | ||||
|                 try { | ||||
|                     service = ServiceList.getService(serviceId); | ||||
|                     service = NewPipe.getService(serviceId); | ||||
|                     ChannelExtractor extractor = service.getChannelExtractorInstance( | ||||
|                             channelUrl, pageNumber, new Downloader()); | ||||
|                             channelUrl, pageNumber); | ||||
|  | ||||
|                     final ChannelInfo info = ChannelInfo.getInfo(extractor, new Downloader()); | ||||
|                     final ChannelInfo info = ChannelInfo.getInfo(extractor); | ||||
|  | ||||
|  | ||||
|                     h.post(new Runnable() { | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import com.nostra13.universalimageloader.core.assist.FailReason; | ||||
| import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; | ||||
|  | ||||
| import org.schabi.newpipe.report.ErrorActivity; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
|  | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 01.08.16. | ||||
| @@ -50,7 +50,7 @@ public class ImageErrorLoadingListener implements ImageLoadingListener { | ||||
|         ErrorActivity.reportError(activity, | ||||
|                 failReason.getCause(), null, rootView, | ||||
|                 ErrorActivity.ErrorInfo.make(ErrorActivity.LOAD_IMAGE, | ||||
|                         ServiceList.getNameOfService(serviceId), imageUri, | ||||
|                         NewPipe.getNameOfService(serviceId), imageUri, | ||||
|                         R.string.could_not_load_image)); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -14,7 +14,7 @@ import android.widget.ArrayAdapter; | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.settings.SettingsActivity; | ||||
| import org.schabi.newpipe.extractor.MediaFormat; | ||||
| import org.schabi.newpipe.extractor.VideoStream; | ||||
| import org.schabi.newpipe.extractor.stream_info.VideoStream; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| @@ -111,6 +111,9 @@ class ActionBarHandler { | ||||
|  | ||||
|  | ||||
|     private int getDefaultResolution(final List<VideoStream> videoStreams) { | ||||
|         if (defaultPreferences == null) | ||||
|             return 0; | ||||
|  | ||||
|         String defaultResolution = defaultPreferences | ||||
|                 .getString(activity.getString(R.string.default_resolution_key), | ||||
|                         activity.getString(R.string.default_resolution_value)); | ||||
|   | ||||
| @@ -6,19 +6,35 @@ import android.util.Log; | ||||
| import android.view.View; | ||||
|  | ||||
| import org.schabi.newpipe.Downloader; | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamExtractor; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamInfo; | ||||
| import org.schabi.newpipe.report.ErrorActivity; | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.extractor.ParsingException; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.StreamExtractor; | ||||
| import org.schabi.newpipe.extractor.StreamInfo; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.StreamingService; | ||||
| import org.schabi.newpipe.extractor.services.youtube.YoutubeStreamExtractor; | ||||
|  | ||||
| import java.io.IOException; | ||||
|  | ||||
| /** | ||||
|  * Created by the-scrabi on 02.08.16. | ||||
|  * Created by Christian Schabesberger on 02.08.16. | ||||
|  * | ||||
|  * Copyright (C) Christian Schabesberger 2016 <chris.schabesberger@mailbox.org> | ||||
|  * StreamInfoWorker.java is part of NewPipe. | ||||
|  * | ||||
|  * NewPipe is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * NewPipe is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with NewPipe.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| public class StreamInfoWorker { | ||||
| @@ -51,7 +67,7 @@ public class StreamInfoWorker { | ||||
|             StreamInfo streamInfo = null; | ||||
|             StreamingService service = null; | ||||
|             try { | ||||
|                 service = ServiceList.getService(serviceId); | ||||
|                 service = NewPipe.getService(serviceId); | ||||
|             } catch (Exception e) { | ||||
|                 e.printStackTrace(); | ||||
|                 ErrorActivity.reportError(h, a, e, VideoItemDetailFragment.class, null, | ||||
| @@ -60,8 +76,8 @@ public class StreamInfoWorker { | ||||
|                 return; | ||||
|             } | ||||
|             try { | ||||
|                 streamExtractor = service.getExtractorInstance(videoUrl, new Downloader()); | ||||
|                 streamInfo = StreamInfo.getVideoInfo(streamExtractor, new Downloader()); | ||||
|                 streamExtractor = service.getExtractorInstance(videoUrl); | ||||
|                 streamInfo = StreamInfo.getVideoInfo(streamExtractor); | ||||
|  | ||||
|                 final StreamInfo info = streamInfo; | ||||
|                 h.post(new Runnable() { | ||||
|   | ||||
| @@ -14,7 +14,7 @@ import android.widget.Toast; | ||||
| import org.schabi.newpipe.App; | ||||
| import org.schabi.newpipe.MainActivity; | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.StreamingService; | ||||
|  | ||||
|  | ||||
| @@ -68,12 +68,28 @@ public class VideoItemDetailActivity extends AppCompatActivity { | ||||
|         // http://developer.android.com/guide/components/fragments.html | ||||
|         // | ||||
|  | ||||
|         Bundle arguments = new Bundle(); | ||||
|         if (savedInstanceState == null) { | ||||
|             handleIntent(getIntent()); | ||||
|         } else { | ||||
|             videoUrl = savedInstanceState.getString(VideoItemDetailFragment.VIDEO_URL); | ||||
|             currentStreamingService = savedInstanceState.getInt(VideoItemDetailFragment.STREAMING_SERVICE); | ||||
|             addFragment(savedInstanceState); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void onNewIntent(Intent intent) { | ||||
|         super.onNewIntent(intent); | ||||
|         setIntent(intent); | ||||
|         handleIntent(intent); | ||||
|     } | ||||
|  | ||||
|     private void handleIntent(Intent intent) { | ||||
|         Bundle arguments = new Bundle(); | ||||
|         // this means the video was called though another app | ||||
|             if (getIntent().getData() != null) { | ||||
|                 videoUrl = getIntent().getData().toString(); | ||||
|                 StreamingService[] serviceList = ServiceList.getServices(); | ||||
|         if (intent.getData() != null) { | ||||
|             videoUrl = intent.getData().toString(); | ||||
|             StreamingService[] serviceList = NewPipe.getServices(); | ||||
|             //StreamExtractor videoExtractor = null; | ||||
|             for (int i = 0; i < serviceList.length; i++) { | ||||
|                 if (serviceList[i].getUrlIdHandlerInstance().acceptUrl(videoUrl)) { | ||||
| @@ -95,25 +111,23 @@ public class VideoItemDetailActivity extends AppCompatActivity { | ||||
|                     PreferenceManager.getDefaultSharedPreferences(this) | ||||
|                             .getBoolean(getString(R.string.autoplay_through_intent_key), false)); | ||||
|         } else { | ||||
|                 videoUrl = getIntent().getStringExtra(VideoItemDetailFragment.VIDEO_URL); | ||||
|                 currentStreamingService = getIntent().getIntExtra(VideoItemDetailFragment.STREAMING_SERVICE, -1); | ||||
|             videoUrl = intent.getStringExtra(VideoItemDetailFragment.VIDEO_URL); | ||||
|             currentStreamingService = intent.getIntExtra(VideoItemDetailFragment.STREAMING_SERVICE, -1); | ||||
|             arguments.putString(VideoItemDetailFragment.VIDEO_URL, videoUrl); | ||||
|             arguments.putInt(VideoItemDetailFragment.STREAMING_SERVICE, currentStreamingService); | ||||
|             arguments.putBoolean(VideoItemDetailFragment.AUTO_PLAY, false); | ||||
|         } | ||||
|         addFragment(arguments); | ||||
|  | ||||
|         } else { | ||||
|             videoUrl = savedInstanceState.getString(VideoItemDetailFragment.VIDEO_URL); | ||||
|             currentStreamingService = savedInstanceState.getInt(VideoItemDetailFragment.STREAMING_SERVICE); | ||||
|             arguments = savedInstanceState; | ||||
|     } | ||||
|  | ||||
|     private void addFragment(final Bundle arguments) { | ||||
|         // Create the detail fragment and add it to the activity | ||||
|         // using a fragment transaction. | ||||
|         fragment = new VideoItemDetailFragment(); | ||||
|         fragment.setArguments(arguments); | ||||
|         getSupportFragmentManager().beginTransaction() | ||||
|                 .add(R.id.videoitem_detail_container, fragment) | ||||
|                 .replace(R.id.videoitem_detail_container, fragment) | ||||
|                 .commit(); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -43,18 +43,18 @@ import java.util.Vector; | ||||
|  | ||||
| import org.schabi.newpipe.ActivityCommunicator; | ||||
| import org.schabi.newpipe.ChannelActivity; | ||||
| import org.schabi.newpipe.extractor.StreamPreviewInfo; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamInfo; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfo; | ||||
| import org.schabi.newpipe.info_list.InfoItemBuilder; | ||||
| import org.schabi.newpipe.report.ErrorActivity; | ||||
| import org.schabi.newpipe.ImageErrorLoadingListener; | ||||
| import org.schabi.newpipe.Localization; | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.download.DownloadDialog; | ||||
| import org.schabi.newpipe.extractor.AudioStream; | ||||
| import org.schabi.newpipe.extractor.stream_info.AudioStream; | ||||
| import org.schabi.newpipe.extractor.MediaFormat; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.StreamInfo; | ||||
| import org.schabi.newpipe.extractor.VideoStream; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.stream_info.VideoStream; | ||||
| import org.schabi.newpipe.player.BackgroundPlayer; | ||||
| import org.schabi.newpipe.player.PlayVideoActivity; | ||||
| import org.schabi.newpipe.player.ExoPlayerActivity; | ||||
| @@ -306,7 +306,7 @@ public class VideoItemDetailFragment extends Fragment { | ||||
|                             ErrorActivity.reportError(getActivity(), | ||||
|                                     failReason.getCause(), null, rootView, | ||||
|                                     ErrorActivity.ErrorInfo.make(ErrorActivity.LOAD_IMAGE, | ||||
|                                             ServiceList.getNameOfService(info.service_id), imageUri, | ||||
|                                             NewPipe.getNameOfService(info.service_id), imageUri, | ||||
|                                             R.string.could_not_load_thumbnails)); | ||||
|                         } | ||||
|  | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| 
 | ||||
| /** | ||||
|  * Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org> | ||||
|  * AbstractVideoInfo.java is part of NewPipe. | ||||
|  * Copyright (C) Christian Schabesberger 2016 <chris.schabesberger@mailbox.org> | ||||
|  * AbstractStreamInfo.java is part of NewPipe. | ||||
|  * | ||||
|  * NewPipe is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
| @@ -19,7 +19,7 @@ package org.schabi.newpipe.extractor; | ||||
|  */ | ||||
| 
 | ||||
| /**Common properties between StreamInfo and StreamPreviewInfo.*/ | ||||
| public abstract class AbstractVideoInfo { | ||||
| public abstract class AbstractStreamInfo { | ||||
|     public static enum StreamType { | ||||
|         NONE,   // placeholder to check if stream type was checked or not | ||||
|         VIDEO_STREAM, | ||||
| @@ -2,6 +2,8 @@ package org.schabi.newpipe.extractor; | ||||
|  | ||||
| import android.util.Xml; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
| import org.schabi.newpipe.extractor.stream_info.AudioStream; | ||||
| import org.xmlpull.v1.XmlPullParser; | ||||
|  | ||||
| import java.io.IOException; | ||||
| @@ -40,10 +42,10 @@ public class DashMpdParser { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public static List<AudioStream> getAudioStreams(String dashManifestUrl, | ||||
|                                                              Downloader downloader) | ||||
|     public static List<AudioStream> getAudioStreams(String dashManifestUrl) | ||||
|             throws DashMpdParsingException { | ||||
|         String dashDoc; | ||||
|         Downloader downloader = NewPipe.getDownloader(); | ||||
|         try { | ||||
|             dashDoc = downloader.download(dashManifestUrl); | ||||
|         } catch(IOException ioe) { | ||||
|   | ||||
| @@ -1,12 +1,13 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| 
 | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.services.youtube.YoutubeService; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 23.08.15. | ||||
|  * | ||||
|  * Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org> | ||||
|  * ServiceList.java is part of NewPipe. | ||||
|  * NewPipe.java is part of NewPipe. | ||||
|  * | ||||
|  * NewPipe is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
| @@ -26,20 +27,24 @@ import org.schabi.newpipe.extractor.services.youtube.YoutubeService; | ||||
|  * Currently only Youtube until the API becomes more stable.*/ | ||||
| 
 | ||||
| @SuppressWarnings("ALL") | ||||
| public class ServiceList { | ||||
| public class NewPipe { | ||||
| 
 | ||||
|     private ServiceList() { | ||||
|     private NewPipe() { | ||||
|     } | ||||
| 
 | ||||
|     private static final String TAG = ServiceList.class.toString(); | ||||
|     private static final StreamingService[] services = { | ||||
|     private static final String TAG = NewPipe.class.toString(); | ||||
| 
 | ||||
|     private static final StreamingService[] serviceList = { | ||||
|         new YoutubeService(0) | ||||
|     }; | ||||
| 
 | ||||
|     private static Downloader downloader = null; | ||||
| 
 | ||||
|     public static StreamingService[] getServices() { | ||||
|         return services; | ||||
|         return serviceList; | ||||
|     } | ||||
|     public static StreamingService getService(int serviceId)throws ExtractionException { | ||||
|         for(StreamingService s : services) { | ||||
|         for(StreamingService s : serviceList) { | ||||
|             if(s.getServiceId() == serviceId) { | ||||
|                 return s; | ||||
|             } | ||||
| @@ -47,7 +52,7 @@ public class ServiceList { | ||||
|         throw new ExtractionException("Service not known: " + Integer.toString(serviceId)); | ||||
|     } | ||||
|     public static StreamingService getService(String serviceName) throws ExtractionException { | ||||
|         return services[getIdOfService(serviceName)]; | ||||
|         return serviceList[getIdOfService(serviceName)]; | ||||
|     } | ||||
|     public static String getNameOfService(int id) { | ||||
|         try { | ||||
| @@ -59,11 +64,19 @@ public class ServiceList { | ||||
|         } | ||||
|     } | ||||
|     public static int getIdOfService(String serviceName) throws ExtractionException { | ||||
|         for(int i = 0; i < services.length; i++) { | ||||
|             if(services[i].getServiceInfo().name.equals(serviceName)) { | ||||
|         for(int i = 0; i < serviceList.length; i++) { | ||||
|             if(serviceList[i].getServiceInfo().name.equals(serviceName)) { | ||||
|                 return i; | ||||
|             } | ||||
|         } | ||||
|         throw new ExtractionException("Error: Service " + serviceName + " not known."); | ||||
|     } | ||||
| 
 | ||||
|     public static void init(Downloader d) { | ||||
|         downloader = d; | ||||
|     } | ||||
| 
 | ||||
|     public static Downloader getDownloader() { | ||||
|         return downloader; | ||||
|     } | ||||
| } | ||||
| @@ -1,5 +1,7 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
|  | ||||
| import java.io.UnsupportedEncodingException; | ||||
| import java.net.URLDecoder; | ||||
| import java.util.HashMap; | ||||
|   | ||||
| @@ -1,5 +1,11 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.channel.ChannelExtractor; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.search.SearchEngine; | ||||
| import org.schabi.newpipe.extractor.search.SuggestionExtractor; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamExtractor; | ||||
|  | ||||
| import java.io.IOException; | ||||
|  | ||||
| /** | ||||
| @@ -35,13 +41,14 @@ public abstract class StreamingService { | ||||
|  | ||||
|     public abstract ServiceInfo getServiceInfo(); | ||||
|  | ||||
|     public abstract StreamExtractor getExtractorInstance(String url, Downloader downloader) | ||||
|     public abstract StreamExtractor getExtractorInstance(String url) | ||||
|             throws IOException, ExtractionException; | ||||
|     public abstract SearchEngine getSearchEngineInstance(Downloader downloader); | ||||
|     public abstract SearchEngine getSearchEngineInstance(); | ||||
|     public abstract UrlIdHandler getUrlIdHandlerInstance(); | ||||
|     public abstract UrlIdHandler getChannelUrlIdHandlerInstance(); | ||||
|     public abstract ChannelExtractor getChannelExtractorInstance(String url, int page, Downloader downloader) | ||||
|     public abstract ChannelExtractor getChannelExtractorInstance(String url, int page) | ||||
|             throws ExtractionException, IOException; | ||||
|     public abstract SuggestionExtractor getSuggestionExtractorInstance(); | ||||
|  | ||||
|     public final int getServiceId() { | ||||
|         return serviceId; | ||||
|   | ||||
| @@ -1,5 +1,7 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
|  | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 26.07.16. | ||||
|  * | ||||
|   | ||||
| @@ -1,4 +1,9 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.channel; | ||||
| 
 | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfoCollector; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| @@ -26,15 +31,13 @@ public abstract class ChannelExtractor { | ||||
|     private int serviceId; | ||||
|     private String url; | ||||
|     private UrlIdHandler urlIdHandler; | ||||
|     private Downloader downloader; | ||||
|     private StreamPreviewInfoCollector previewInfoCollector; | ||||
|     private int page = -1; | ||||
| 
 | ||||
|     public ChannelExtractor(UrlIdHandler urlIdHandler, String url, int page, Downloader dl, int serviceId) | ||||
|     public ChannelExtractor(UrlIdHandler urlIdHandler, String url, int page, int serviceId) | ||||
|             throws ExtractionException, IOException { | ||||
|         this.url = url; | ||||
|         this.page = page; | ||||
|         this.downloader = dl; | ||||
|         this.serviceId = serviceId; | ||||
|         this.urlIdHandler = urlIdHandler; | ||||
|         previewInfoCollector = new StreamPreviewInfoCollector(urlIdHandler, serviceId); | ||||
| @@ -42,7 +45,6 @@ public abstract class ChannelExtractor { | ||||
| 
 | ||||
|     public String getUrl() { return url; } | ||||
|     public UrlIdHandler getUrlIdHandler() { return urlIdHandler; } | ||||
|     public Downloader getDownloader() { return downloader; } | ||||
|     public StreamPreviewInfoCollector getStreamPreviewInfoCollector() { | ||||
|         return previewInfoCollector; | ||||
|     } | ||||
| @@ -1,4 +1,8 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.channel; | ||||
| 
 | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfo; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfoCollector; | ||||
| 
 | ||||
| import java.util.List; | ||||
| import java.util.Vector; | ||||
| @@ -30,7 +34,7 @@ public class ChannelInfo { | ||||
|         errors.add(e); | ||||
|     } | ||||
| 
 | ||||
|     public static ChannelInfo getInfo(ChannelExtractor extractor, Downloader dl) | ||||
|     public static ChannelInfo getInfo(ChannelExtractor extractor) | ||||
|         throws ParsingException { | ||||
|         ChannelInfo info = new ChannelInfo(); | ||||
| 
 | ||||
| @@ -1,4 +1,4 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.exceptions; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 30.01.16. | ||||
| @@ -24,11 +24,9 @@ public class ExtractionException extends Exception { | ||||
|     public ExtractionException(String message) { | ||||
|         super(message); | ||||
|     } | ||||
| 
 | ||||
|     public ExtractionException(Throwable cause) { | ||||
|         super(cause); | ||||
|     } | ||||
| 
 | ||||
|     public ExtractionException(String message, Throwable cause) { | ||||
|         super(message, cause); | ||||
|     } | ||||
| @@ -1,4 +1,4 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.exceptions; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 12.09.16. | ||||
| @@ -1,4 +1,4 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.exceptions; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 31.01.16. | ||||
| @@ -1,4 +1,7 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.search; | ||||
| 
 | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.util.List; | ||||
| @@ -41,12 +44,8 @@ public abstract class SearchEngine { | ||||
|         return collector; | ||||
|     } | ||||
| 
 | ||||
|     public abstract List<String> suggestionList( | ||||
|             String query,String contentCountry, Downloader dl) | ||||
|             throws ExtractionException, IOException; | ||||
| 
 | ||||
|     //Result search(String query, int page); | ||||
|     public abstract StreamPreviewInfoSearchCollector search( | ||||
|             String query, int page, String contentCountry, Downloader dl) | ||||
|             String query, int page, String contentCountry) | ||||
|             throws ExtractionException, IOException; | ||||
| } | ||||
| @@ -1,4 +1,7 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.search; | ||||
| 
 | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfo; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.util.List; | ||||
| @@ -26,10 +29,10 @@ import java.util.Vector; | ||||
| 
 | ||||
| public class SearchResult { | ||||
|     public static SearchResult getSearchResult(SearchEngine engine, String query, | ||||
|                                                int page, String languageCode, Downloader dl) | ||||
|                                                int page, String languageCode) | ||||
|             throws ExtractionException, IOException { | ||||
| 
 | ||||
|         SearchResult result = engine.search(query, page, languageCode, dl).getSearchResult(); | ||||
|         SearchResult result = engine.search(query, page, languageCode).getSearchResult(); | ||||
|         if(result.resultList.isEmpty()) { | ||||
|             if(result.suggestion.isEmpty()) { | ||||
|                 throw new ExtractionException("Empty result despite no error"); | ||||
| @@ -1,4 +1,7 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.search; | ||||
| 
 | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfoCollector; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 11.05.16. | ||||
| @@ -0,0 +1,43 @@ | ||||
| package org.schabi.newpipe.extractor.search; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.List; | ||||
|  | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 28.09.16. | ||||
|  * | ||||
|  * Copyright (C) Christian Schabesberger 2016 <chris.schabesberger@mailbox.org> | ||||
|  * SuggestionExtractor.java is part of NewPipe. | ||||
|  * | ||||
|  * NewPipe is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * NewPipe is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with NewPipe.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| public abstract class SuggestionExtractor { | ||||
|  | ||||
|     private int serviceId; | ||||
|  | ||||
|     public SuggestionExtractor(int serviceId) { | ||||
|         this.serviceId = serviceId; | ||||
|     } | ||||
|  | ||||
|     public abstract List<String> suggestionList( | ||||
|             String query,String contentCountry) | ||||
|             throws ExtractionException, IOException; | ||||
|  | ||||
|     public int getServiceId() { | ||||
|         return serviceId; | ||||
|     } | ||||
| } | ||||
| @@ -7,15 +7,16 @@ import org.json.JSONObject; | ||||
| import org.jsoup.Jsoup; | ||||
| import org.jsoup.nodes.Document; | ||||
| import org.jsoup.nodes.Element; | ||||
| import org.schabi.newpipe.extractor.AbstractVideoInfo; | ||||
| import org.schabi.newpipe.extractor.ChannelExtractor; | ||||
| import org.schabi.newpipe.extractor.AbstractStreamInfo; | ||||
| import org.schabi.newpipe.extractor.Downloader; | ||||
| import org.schabi.newpipe.extractor.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.Parser; | ||||
| import org.schabi.newpipe.extractor.ParsingException; | ||||
| import org.schabi.newpipe.extractor.StreamPreviewInfoCollector; | ||||
| import org.schabi.newpipe.extractor.StreamPreviewInfoExtractor; | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.channel.ChannelExtractor; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfoCollector; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfoExtractor; | ||||
|  | ||||
|  | ||||
| import java.io.IOException; | ||||
| @@ -46,7 +47,6 @@ public class YoutubeChannelExtractor extends ChannelExtractor { | ||||
|  | ||||
|     // private CSSOMParser cssParser = new CSSOMParser(new SACParserCSS3()); | ||||
|  | ||||
|     private Downloader downloader; | ||||
|     private Document doc = null; | ||||
|  | ||||
|     private boolean isAjaxPage = false; | ||||
| @@ -59,12 +59,13 @@ public class YoutubeChannelExtractor extends ChannelExtractor { | ||||
|     // this request url. | ||||
|     private static String nextPageUrl = ""; | ||||
|  | ||||
|     public YoutubeChannelExtractor(UrlIdHandler urlIdHandler, String url, int page, Downloader dl, int serviceId) | ||||
|     public YoutubeChannelExtractor(UrlIdHandler urlIdHandler, String url, int page, int serviceId) | ||||
|             throws ExtractionException, IOException { | ||||
|         super(urlIdHandler, url, page, dl, serviceId); | ||||
|         super(urlIdHandler, url, page, serviceId); | ||||
|  | ||||
|         Downloader downloader = NewPipe.getDownloader(); | ||||
|  | ||||
|         url = urlIdHandler.cleanUrl(url) ; //+ "/video?veiw=0&flow=list&sort=dd"; | ||||
|         downloader = dl; | ||||
|  | ||||
|         if(page == 0) { | ||||
|             if (isUserUrl(url)) { | ||||
| @@ -162,8 +163,8 @@ public class YoutubeChannelExtractor extends ChannelExtractor { | ||||
|             if (li.select("div[class=\"feed-item-dismissable\"]").first() != null) { | ||||
|                 collector.commit(new StreamPreviewInfoExtractor() { | ||||
|                     @Override | ||||
|                     public AbstractVideoInfo.StreamType getStreamType() throws ParsingException { | ||||
|                         return AbstractVideoInfo.StreamType.VIDEO_STREAM; | ||||
|                     public AbstractStreamInfo.StreamType getStreamType() throws ParsingException { | ||||
|                         return AbstractStreamInfo.StreamType.VIDEO_STREAM; | ||||
|                     } | ||||
|  | ||||
|                     @Override | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| package org.schabi.newpipe.extractor.services.youtube; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.Parser; | ||||
| import org.schabi.newpipe.extractor.ParsingException; | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
|  | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 25.07.16. | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| package org.schabi.newpipe.extractor.services.youtube; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.ParsingException; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
|  | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 02.03.16. | ||||
|   | ||||
| @@ -4,26 +4,16 @@ import org.jsoup.Jsoup; | ||||
| import org.jsoup.nodes.Document; | ||||
| import org.jsoup.nodes.Element; | ||||
| import org.schabi.newpipe.extractor.Downloader; | ||||
| import org.schabi.newpipe.extractor.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.ParsingException; | ||||
| import org.schabi.newpipe.extractor.SearchEngine; | ||||
| import org.schabi.newpipe.extractor.StreamPreviewInfoExtractor; | ||||
| import org.schabi.newpipe.extractor.StreamPreviewInfoSearchCollector; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.w3c.dom.Node; | ||||
| import org.w3c.dom.NodeList; | ||||
| import org.xml.sax.InputSource; | ||||
| import org.xml.sax.SAXException; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.search.SearchEngine; | ||||
| import org.schabi.newpipe.extractor.search.StreamPreviewInfoSearchCollector; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfoExtractor; | ||||
|  | ||||
| import java.net.URLEncoder; | ||||
| import java.io.ByteArrayInputStream; | ||||
| import java.io.IOException; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| import javax.xml.parsers.DocumentBuilder; | ||||
| import javax.xml.parsers.DocumentBuilderFactory; | ||||
| import javax.xml.parsers.ParserConfigurationException; | ||||
|  | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 09.08.15. | ||||
| @@ -55,20 +45,11 @@ public class YoutubeSearchEngine extends SearchEngine { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public StreamPreviewInfoSearchCollector search(String query, int page, String languageCode, Downloader downloader) | ||||
|     public StreamPreviewInfoSearchCollector search(String query, int page, String languageCode) | ||||
|             throws IOException, ExtractionException { | ||||
|         StreamPreviewInfoSearchCollector collector = getStreamPreviewInfoSearchCollector(); | ||||
|  | ||||
|         /* Cant use Uri.Bilder since it's android code. | ||||
|         // Android code is baned from the extractor side. | ||||
|         Uri.Builder builder = new Uri.Builder(); | ||||
|         builder.scheme("https") | ||||
|                 .authority("www.youtube.com") | ||||
|                 .appendPath("results") | ||||
|                 .appendQueryParameter("search_query", query) | ||||
|                 .appendQueryParameter("page", Integer.toString(page)) | ||||
|                 .appendQueryParameter("filters", "video"); | ||||
|                 */ | ||||
|         Downloader downloader = NewPipe.getDownloader(); | ||||
|  | ||||
|         String url = "https://www.youtube.com/results" | ||||
|                 + "?search_query=" + URLEncoder.encode(query, CHARSET_UTF_8) | ||||
| @@ -126,66 +107,6 @@ public class YoutubeSearchEngine extends SearchEngine { | ||||
|         return collector; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<String> suggestionList(String query, String contentCountry, Downloader dl) | ||||
|             throws IOException, ParsingException { | ||||
|  | ||||
|         List<String> suggestions = new ArrayList<>(); | ||||
|  | ||||
|         /* Cant use Uri.Bilder since it's android code. | ||||
|         // Android code is baned from the extractor side. | ||||
|         Uri.Builder builder = new Uri.Builder(); | ||||
|         builder.scheme("https") | ||||
|                 .authority("suggestqueries.google.com") | ||||
|                 .appendPath("complete") | ||||
|                 .appendPath("search") | ||||
|                 .appendQueryParameter("client", "") | ||||
|                 .appendQueryParameter("output", "toolbar") | ||||
|                 .appendQueryParameter("ds", "yt") | ||||
|                 .appendQueryParameter("hl",contentCountry) | ||||
|                 .appendQueryParameter("q", query); | ||||
|                 */ | ||||
|         String url = "https://suggestqueries.google.com/complete/search" | ||||
|                 + "?client=" + "" | ||||
|                 + "&output=" + "toolbar" | ||||
|                 + "&ds=" + "yt" | ||||
|                 + "&hl=" + URLEncoder.encode(contentCountry, CHARSET_UTF_8) | ||||
|                 + "&q=" + URLEncoder.encode(query, CHARSET_UTF_8); | ||||
|  | ||||
|  | ||||
|         String response = dl.download(url); | ||||
|  | ||||
|         //TODO: Parse xml data using Jsoup not done | ||||
|         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); | ||||
|         DocumentBuilder dBuilder; | ||||
|         org.w3c.dom.Document doc = null; | ||||
|  | ||||
|         try { | ||||
|             dBuilder = dbFactory.newDocumentBuilder(); | ||||
|             doc = dBuilder.parse(new InputSource( | ||||
|                     new ByteArrayInputStream(response.getBytes(CHARSET_UTF_8)))); | ||||
|             doc.getDocumentElement().normalize(); | ||||
|         } catch (ParserConfigurationException | SAXException | IOException e) { | ||||
|             throw new ParsingException("Could not parse document."); | ||||
|         } | ||||
|  | ||||
|         try { | ||||
|             NodeList nList = doc.getElementsByTagName("CompleteSuggestion"); | ||||
|             for (int temp = 0; temp < nList.getLength(); temp++) { | ||||
|  | ||||
|                 NodeList nList1 = doc.getElementsByTagName("suggestion"); | ||||
|                 Node nNode1 = nList1.item(temp); | ||||
|                 if (nNode1.getNodeType() == Node.ELEMENT_NODE) { | ||||
|                     org.w3c.dom.Element eElement = (org.w3c.dom.Element) nNode1; | ||||
|                     suggestions.add(eElement.getAttribute("data")); | ||||
|                 } | ||||
|             } | ||||
|             return suggestions; | ||||
|         } catch(Exception e) { | ||||
|             throw new ParsingException("Could not get suggestions form document.", e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private StreamPreviewInfoExtractor extractPreviewInfo(final Element item) { | ||||
|         return new YoutubeStreamPreviewInfoExtractor(item); | ||||
|     } | ||||
|   | ||||
| @@ -1,12 +1,12 @@ | ||||
| package org.schabi.newpipe.extractor.services.youtube; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.ChannelExtractor; | ||||
| import org.schabi.newpipe.extractor.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.Downloader; | ||||
| import org.schabi.newpipe.extractor.StreamExtractor; | ||||
| import org.schabi.newpipe.extractor.StreamingService; | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.SearchEngine; | ||||
| import org.schabi.newpipe.extractor.channel.ChannelExtractor; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.search.SearchEngine; | ||||
| import org.schabi.newpipe.extractor.search.SuggestionExtractor; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamExtractor; | ||||
|  | ||||
| import java.io.IOException; | ||||
|  | ||||
| @@ -44,18 +44,18 @@ public class YoutubeService extends StreamingService { | ||||
|         return serviceInfo; | ||||
|     } | ||||
|     @Override | ||||
|     public StreamExtractor getExtractorInstance(String url, Downloader downloader) | ||||
|     public StreamExtractor getExtractorInstance(String url) | ||||
|             throws ExtractionException, IOException { | ||||
|         UrlIdHandler urlIdHandler = new YoutubeStreamUrlIdHandler(); | ||||
|         if(urlIdHandler.acceptUrl(url)) { | ||||
|             return new YoutubeStreamExtractor(urlIdHandler, url, downloader, getServiceId()); | ||||
|             return new YoutubeStreamExtractor(urlIdHandler, url, getServiceId()); | ||||
|         } | ||||
|         else { | ||||
|             throw new IllegalArgumentException("supplied String is not a valid Youtube URL"); | ||||
|         } | ||||
|     } | ||||
|     @Override | ||||
|     public SearchEngine getSearchEngineInstance(Downloader downloader) { | ||||
|     public SearchEngine getSearchEngineInstance() { | ||||
|         return new YoutubeSearchEngine(getUrlIdHandlerInstance(), getServiceId()); | ||||
|     } | ||||
|  | ||||
| @@ -70,8 +70,13 @@ public class YoutubeService extends StreamingService { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public ChannelExtractor getChannelExtractorInstance(String url, int page, Downloader downloader) | ||||
|     public ChannelExtractor getChannelExtractorInstance(String url, int page) | ||||
|         throws ExtractionException, IOException { | ||||
|         return new YoutubeChannelExtractor(getChannelUrlIdHandlerInstance(), url, page, downloader, getServiceId()); | ||||
|         return new YoutubeChannelExtractor(getChannelUrlIdHandlerInstance(), url, page, getServiceId()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public SuggestionExtractor getSuggestionExtractorInstance() { | ||||
|         return new YoutubeSuggestionExtractor(getServiceId()); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -8,19 +8,20 @@ import org.jsoup.nodes.Element; | ||||
| import org.mozilla.javascript.Context; | ||||
| import org.mozilla.javascript.Function; | ||||
| import org.mozilla.javascript.ScriptableObject; | ||||
| import org.schabi.newpipe.extractor.AbstractVideoInfo; | ||||
| import org.schabi.newpipe.extractor.AudioStream; | ||||
| import org.schabi.newpipe.extractor.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.AbstractStreamInfo; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
| import org.schabi.newpipe.extractor.stream_info.AudioStream; | ||||
| import org.schabi.newpipe.extractor.Downloader; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.Parser; | ||||
| import org.schabi.newpipe.extractor.ParsingException; | ||||
| import org.schabi.newpipe.extractor.StreamInfo; | ||||
| import org.schabi.newpipe.extractor.StreamPreviewInfoCollector; | ||||
| import org.schabi.newpipe.extractor.StreamPreviewInfoExtractor; | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.StreamExtractor; | ||||
| import org.schabi.newpipe.extractor.MediaFormat; | ||||
| import org.schabi.newpipe.extractor.VideoStream; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamExtractor; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamInfo; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfoCollector; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfoExtractor; | ||||
| import org.schabi.newpipe.extractor.stream_info.VideoStream; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.List; | ||||
| @@ -185,15 +186,12 @@ public class YoutubeStreamExtractor extends StreamExtractor { | ||||
|     UrlIdHandler urlidhandler = new YoutubeStreamUrlIdHandler(); | ||||
|     String pageUrl = ""; | ||||
|  | ||||
|     private Downloader downloader; | ||||
|  | ||||
|     public YoutubeStreamExtractor(UrlIdHandler urlIdHandler, String pageUrl, | ||||
|                                   Downloader dl, int serviceId) | ||||
|     public YoutubeStreamExtractor(UrlIdHandler urlIdHandler, String pageUrl, int serviceId) | ||||
|             throws ExtractionException, IOException { | ||||
|         super(urlIdHandler ,pageUrl, dl, serviceId); | ||||
|         super(urlIdHandler, pageUrl, serviceId); | ||||
|         //most common videoInfo fields are now set in our superclass, for all services | ||||
|         downloader = dl; | ||||
|         this.pageUrl = pageUrl; | ||||
|         Downloader downloader = NewPipe.getDownloader(); | ||||
|         String pageContent = downloader.download(urlidhandler.cleanUrl(pageUrl)); | ||||
|         doc = Jsoup.parse(pageContent, pageUrl); | ||||
|         JSONObject ytPlayerConfig; | ||||
| @@ -284,6 +282,7 @@ public class YoutubeStreamExtractor extends StreamExtractor { | ||||
|  | ||||
|     private String getPlayerUrlFromRestrictedVideo(String pageUrl) throws ParsingException { | ||||
|         try { | ||||
|             Downloader downloader = NewPipe.getDownloader(); | ||||
|             String playerUrl = ""; | ||||
|             String videoId = urlidhandler.getId(pageUrl); | ||||
|             String embedUrl = "https://www.youtube.com/embed/" + videoId; | ||||
| @@ -710,7 +709,7 @@ public class YoutubeStreamExtractor extends StreamExtractor { | ||||
|     private StreamPreviewInfoExtractor extractVideoPreviewInfo(final Element li) { | ||||
|         return new StreamPreviewInfoExtractor() { | ||||
|             @Override | ||||
|             public AbstractVideoInfo.StreamType getStreamType() throws ParsingException { | ||||
|             public AbstractStreamInfo.StreamType getStreamType() throws ParsingException { | ||||
|                 return null; | ||||
|             } | ||||
|  | ||||
| @@ -788,6 +787,7 @@ public class YoutubeStreamExtractor extends StreamExtractor { | ||||
|         String decryptionCode; | ||||
|  | ||||
|         try { | ||||
|             Downloader downloader = NewPipe.getDownloader(); | ||||
|             String playerCode = downloader.download(playerUrl); | ||||
|  | ||||
|             decryptionFuncName = | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| package org.schabi.newpipe.extractor.services.youtube; | ||||
|  | ||||
| import org.jsoup.nodes.Element; | ||||
| import org.schabi.newpipe.extractor.AbstractVideoInfo; | ||||
| import org.schabi.newpipe.extractor.AbstractStreamInfo; | ||||
| import org.schabi.newpipe.extractor.Parser; | ||||
| import org.schabi.newpipe.extractor.ParsingException; | ||||
| import org.schabi.newpipe.extractor.StreamPreviewInfoExtractor; | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfoExtractor; | ||||
|  | ||||
| /** | ||||
|  * Copyright (C) Christian Schabesberger 2016 <chris.schabesberger@mailbox.org> | ||||
| @@ -146,11 +146,11 @@ public class YoutubeStreamPreviewInfoExtractor implements StreamPreviewInfoExtra | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public AbstractVideoInfo.StreamType getStreamType() { | ||||
|     public AbstractStreamInfo.StreamType getStreamType() { | ||||
|         if(isLiveStream(item)) { | ||||
|             return AbstractVideoInfo.StreamType.LIVE_STREAM; | ||||
|             return AbstractStreamInfo.StreamType.LIVE_STREAM; | ||||
|         } else { | ||||
|             return AbstractVideoInfo.StreamType.VIDEO_STREAM; | ||||
|             return AbstractStreamInfo.StreamType.VIDEO_STREAM; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| package org.schabi.newpipe.extractor.services.youtube; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.FoundAdException; | ||||
| import org.schabi.newpipe.extractor.Parser; | ||||
| import org.schabi.newpipe.extractor.ParsingException; | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.exceptions.FoundAdException; | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
|  | ||||
| import java.io.UnsupportedEncodingException; | ||||
| import java.net.URLDecoder; | ||||
|   | ||||
| @@ -0,0 +1,100 @@ | ||||
| package org.schabi.newpipe.extractor.services.youtube; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.Downloader; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
| import org.schabi.newpipe.extractor.search.SuggestionExtractor; | ||||
| import org.w3c.dom.Node; | ||||
| import org.w3c.dom.NodeList; | ||||
| import org.xml.sax.InputSource; | ||||
| import org.xml.sax.SAXException; | ||||
|  | ||||
| import java.io.ByteArrayInputStream; | ||||
| import java.io.IOException; | ||||
| import java.net.URLEncoder; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| import java.util.Vector; | ||||
|  | ||||
| import javax.xml.parsers.DocumentBuilder; | ||||
| import javax.xml.parsers.DocumentBuilderFactory; | ||||
| import javax.xml.parsers.ParserConfigurationException; | ||||
|  | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 28.09.16. | ||||
|  * | ||||
|  * Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org> | ||||
|  * YoutubeSuggestionExtractor.java is part of NewPipe. | ||||
|  * | ||||
|  * NewPipe is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * NewPipe is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU General Public License | ||||
|  * along with NewPipe.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| public class YoutubeSuggestionExtractor extends SuggestionExtractor { | ||||
|  | ||||
|     public static final String CHARSET_UTF_8 = "UTF-8"; | ||||
|  | ||||
|     public YoutubeSuggestionExtractor(int serviceId) { | ||||
|         super(serviceId); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public List<String> suggestionList( | ||||
|             String query, String contentCountry) | ||||
|             throws ExtractionException, IOException { | ||||
|         List<String> suggestions = new ArrayList<>(); | ||||
|  | ||||
|         Downloader dl = NewPipe.getDownloader(); | ||||
|  | ||||
|         String url = "https://suggestqueries.google.com/complete/search" | ||||
|                 + "?client=" + "" | ||||
|                 + "&output=" + "toolbar" | ||||
|                 + "&ds=" + "yt" | ||||
|                 + "&hl=" + URLEncoder.encode(contentCountry, CHARSET_UTF_8) | ||||
|                 + "&q=" + URLEncoder.encode(query, CHARSET_UTF_8); | ||||
|  | ||||
|  | ||||
|         String response = dl.download(url); | ||||
|  | ||||
|         //TODO: Parse xml data using Jsoup not done | ||||
|         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); | ||||
|         DocumentBuilder dBuilder; | ||||
|         org.w3c.dom.Document doc = null; | ||||
|  | ||||
|         try { | ||||
|             dBuilder = dbFactory.newDocumentBuilder(); | ||||
|             doc = dBuilder.parse(new InputSource( | ||||
|                     new ByteArrayInputStream(response.getBytes(CHARSET_UTF_8)))); | ||||
|             doc.getDocumentElement().normalize(); | ||||
|         } catch (ParserConfigurationException | SAXException | IOException e) { | ||||
|             throw new ParsingException("Could not parse document."); | ||||
|         } | ||||
|  | ||||
|         try { | ||||
|             NodeList nList = doc.getElementsByTagName("CompleteSuggestion"); | ||||
|             for (int temp = 0; temp < nList.getLength(); temp++) { | ||||
|  | ||||
|                 NodeList nList1 = doc.getElementsByTagName("suggestion"); | ||||
|                 Node nNode1 = nList1.item(temp); | ||||
|                 if (nNode1.getNodeType() == Node.ELEMENT_NODE) { | ||||
|                     org.w3c.dom.Element eElement = (org.w3c.dom.Element) nNode1; | ||||
|                     suggestions.add(eElement.getAttribute("data")); | ||||
|                 } | ||||
|             } | ||||
|             return suggestions; | ||||
|         } catch(Exception e) { | ||||
|             throw new ParsingException("Could not get suggestions form document.", e); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,4 +1,4 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.stream_info; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 04.03.16. | ||||
| @@ -1,4 +1,4 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.stream_info; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 10.08.15. | ||||
| @@ -20,6 +20,10 @@ package org.schabi.newpipe.extractor; | ||||
|  * along with NewPipe.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| 
 | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
| 
 | ||||
| import java.util.List; | ||||
| 
 | ||||
| /**Scrapes information from a video streaming service (eg, YouTube).*/ | ||||
| @@ -31,7 +35,6 @@ public abstract class StreamExtractor { | ||||
|     private int serviceId; | ||||
|     private String url; | ||||
|     private UrlIdHandler urlIdHandler; | ||||
|     private Downloader downloader; | ||||
|     private StreamPreviewInfoCollector previewInfoCollector; | ||||
| 
 | ||||
|     public class ExctractorInitException extends ExtractionException { | ||||
| @@ -55,7 +58,7 @@ public abstract class StreamExtractor { | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     public StreamExtractor(UrlIdHandler urlIdHandler, String url, Downloader dl, int serviceId) { | ||||
|     public StreamExtractor(UrlIdHandler urlIdHandler, String url, int serviceId) { | ||||
|         this.serviceId = serviceId; | ||||
|         this.urlIdHandler = urlIdHandler; | ||||
|         previewInfoCollector = new StreamPreviewInfoCollector(urlIdHandler, serviceId); | ||||
| @@ -73,10 +76,6 @@ public abstract class StreamExtractor { | ||||
|         return urlIdHandler; | ||||
|     } | ||||
| 
 | ||||
|     public Downloader getDownloader() { | ||||
|         return downloader; | ||||
|     } | ||||
| 
 | ||||
|     public abstract int getTimeStamp() throws ParsingException; | ||||
|     public abstract String getTitle() throws ParsingException; | ||||
|     public abstract String getDescription() throws ParsingException; | ||||
| @@ -1,4 +1,9 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.stream_info; | ||||
| 
 | ||||
| import org.schabi.newpipe.extractor.AbstractStreamInfo; | ||||
| import org.schabi.newpipe.extractor.DashMpdParser; | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.util.List; | ||||
| @@ -26,7 +31,7 @@ import java.util.Vector; | ||||
| 
 | ||||
| /**Info object for opened videos, ie the video ready to play.*/ | ||||
| @SuppressWarnings("ALL") | ||||
| public class StreamInfo extends AbstractVideoInfo { | ||||
| public class StreamInfo extends AbstractStreamInfo { | ||||
| 
 | ||||
|     public static class StreamExctractException extends ExtractionException { | ||||
|         StreamExctractException(String message) { | ||||
| @@ -39,7 +44,7 @@ public class StreamInfo extends AbstractVideoInfo { | ||||
|     /**Creates a new StreamInfo object from an existing AbstractVideoInfo. | ||||
|      * All the shared properties are copied to the new StreamInfo.*/ | ||||
|     @SuppressWarnings("WeakerAccess") | ||||
|     public StreamInfo(AbstractVideoInfo avi) { | ||||
|     public StreamInfo(AbstractStreamInfo avi) { | ||||
|         this.id = avi.id; | ||||
|         this.title = avi.title; | ||||
|         this.uploader = avi.uploader; | ||||
| @@ -67,19 +72,19 @@ public class StreamInfo extends AbstractVideoInfo { | ||||
| 
 | ||||
|     /**Fills out the video info fields which are common to all services. | ||||
|      * Probably needs to be overridden by subclasses*/ | ||||
|     public static StreamInfo getVideoInfo(StreamExtractor extractor, Downloader downloader) | ||||
|     public static StreamInfo getVideoInfo(StreamExtractor extractor) | ||||
|             throws ExtractionException, IOException { | ||||
|         StreamInfo streamInfo = new StreamInfo(); | ||||
| 
 | ||||
|         streamInfo = extractImportantData(streamInfo, extractor, downloader); | ||||
|         streamInfo = extractStreams(streamInfo, extractor, downloader); | ||||
|         streamInfo = extractOptionalData(streamInfo, extractor, downloader); | ||||
|         streamInfo = extractImportantData(streamInfo, extractor); | ||||
|         streamInfo = extractStreams(streamInfo, extractor); | ||||
|         streamInfo = extractOptionalData(streamInfo, extractor); | ||||
| 
 | ||||
|         return streamInfo; | ||||
|     } | ||||
| 
 | ||||
|     private static StreamInfo extractImportantData( | ||||
|             StreamInfo streamInfo, StreamExtractor extractor, Downloader downloader) | ||||
|             StreamInfo streamInfo, StreamExtractor extractor) | ||||
|             throws ExtractionException, IOException { | ||||
|         /* ---- importand data, withoug the video can't be displayed goes here: ---- */ | ||||
|         // if one of these is not available an exception is ment to be thrown directly into the frontend. | ||||
| @@ -105,7 +110,7 @@ public class StreamInfo extends AbstractVideoInfo { | ||||
|     } | ||||
| 
 | ||||
|     private static StreamInfo extractStreams( | ||||
|             StreamInfo streamInfo, StreamExtractor extractor, Downloader downloader) | ||||
|             StreamInfo streamInfo, StreamExtractor extractor) | ||||
|             throws ExtractionException, IOException { | ||||
|         /* ---- stream extraction goes here ---- */ | ||||
|         // At least one type of stream has to be available, | ||||
| @@ -132,7 +137,7 @@ public class StreamInfo extends AbstractVideoInfo { | ||||
|             // same as the quick and dirty aboth | ||||
|             try { | ||||
|                 streamInfo.audio_streams.addAll( | ||||
|                         DashMpdParser.getAudioStreams(streamInfo.dashMpdUrl, downloader)); | ||||
|                         DashMpdParser.getAudioStreams(streamInfo.dashMpdUrl)); | ||||
|             } catch(Exception e) { | ||||
|                 streamInfo.addException( | ||||
|                         new ExtractionException("Couldn't get audio streams from dash mpd", e)); | ||||
| @@ -166,7 +171,7 @@ public class StreamInfo extends AbstractVideoInfo { | ||||
|     } | ||||
| 
 | ||||
|     private static StreamInfo extractOptionalData( | ||||
|             StreamInfo streamInfo, StreamExtractor extractor, Downloader downloader) { | ||||
|             StreamInfo streamInfo, StreamExtractor extractor) { | ||||
|         /*  ---- optional data goes here: ---- */ | ||||
|         // If one of these failes, the frontend neets to handle that they are not available. | ||||
|         // Exceptions are therfore not thrown into the frontend, but stored into the error List, | ||||
| @@ -1,4 +1,4 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.stream_info; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 26.08.15. | ||||
| @@ -20,7 +20,9 @@ package org.schabi.newpipe.extractor; | ||||
|  * along with NewPipe.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| 
 | ||||
| import org.schabi.newpipe.extractor.AbstractStreamInfo; | ||||
| 
 | ||||
| /**Info object for previews of unopened videos, eg search results, related videos*/ | ||||
| public class StreamPreviewInfo extends AbstractVideoInfo { | ||||
| public class StreamPreviewInfo extends AbstractStreamInfo { | ||||
|     public int duration; | ||||
| } | ||||
| @@ -1,5 +1,8 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.stream_info; | ||||
| 
 | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.exceptions.FoundAdException; | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
| import org.schabi.newpipe.extractor.services.youtube.YoutubeStreamUrlIdHandler; | ||||
| 
 | ||||
| import java.util.List; | ||||
| @@ -1,4 +1,7 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.stream_info; | ||||
| 
 | ||||
| import org.schabi.newpipe.extractor.AbstractStreamInfo; | ||||
| import org.schabi.newpipe.extractor.exceptions.ParsingException; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 28.02.16. | ||||
| @@ -21,7 +24,7 @@ package org.schabi.newpipe.extractor; | ||||
|  */ | ||||
| 
 | ||||
| public interface StreamPreviewInfoExtractor { | ||||
|     AbstractVideoInfo.StreamType getStreamType() throws ParsingException; | ||||
|     AbstractStreamInfo.StreamType getStreamType() throws ParsingException; | ||||
|     String getWebPageUrl() throws ParsingException; | ||||
|     String getTitle() throws ParsingException; | ||||
|     int getDuration() throws ParsingException; | ||||
| @@ -1,4 +1,4 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
| package org.schabi.newpipe.extractor.stream_info; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 04.03.16. | ||||
| @@ -10,8 +10,8 @@ import com.nostra13.universalimageloader.core.ImageLoader; | ||||
|  | ||||
| import org.schabi.newpipe.ImageErrorLoadingListener; | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.extractor.AbstractVideoInfo; | ||||
| import org.schabi.newpipe.extractor.StreamPreviewInfo; | ||||
| import org.schabi.newpipe.extractor.AbstractStreamInfo; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfo; | ||||
|  | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 26.09.16. | ||||
| @@ -66,7 +66,7 @@ public class InfoItemBuilder { | ||||
|         if(info.duration > 0) { | ||||
|             holder.itemDurationView.setText(getDurationString(info.duration)); | ||||
|         } else { | ||||
|             if(info.stream_type == AbstractVideoInfo.StreamType.LIVE_STREAM) { | ||||
|             if(info.stream_type == AbstractStreamInfo.StreamType.LIVE_STREAM) { | ||||
|                 holder.itemDurationView.setText(R.string.duration_live); | ||||
|             } else { | ||||
|                 holder.itemDurationView.setVisibility(View.GONE); | ||||
|   | ||||
| @@ -6,13 +6,8 @@ import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
|  | ||||
| import com.nostra13.universalimageloader.core.DisplayImageOptions; | ||||
| import com.nostra13.universalimageloader.core.ImageLoader; | ||||
|  | ||||
| import org.schabi.newpipe.ImageErrorLoadingListener; | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.extractor.AbstractVideoInfo; | ||||
| import org.schabi.newpipe.extractor.StreamPreviewInfo; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamPreviewInfo; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Vector; | ||||
|   | ||||
| @@ -18,13 +18,13 @@ import android.view.inputmethod.InputMethodManager; | ||||
| import android.widget.ProgressBar; | ||||
| import android.widget.Toast; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.search.SearchResult; | ||||
| import org.schabi.newpipe.info_list.InfoItemBuilder; | ||||
| import org.schabi.newpipe.report.ErrorActivity; | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.detail.VideoItemDetailActivity; | ||||
| import org.schabi.newpipe.detail.VideoItemDetailFragment; | ||||
| import org.schabi.newpipe.extractor.SearchResult; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.info_list.InfoListAdapter; | ||||
|  | ||||
| /** | ||||
| @@ -72,7 +72,7 @@ public class SearchInfoItemFragment extends Fragment { | ||||
|                     ErrorActivity.reportError(a, e, null, | ||||
|                             a.findViewById(android.R.id.content), | ||||
|                             ErrorActivity.ErrorInfo.make(ErrorActivity.SEARCHED, | ||||
|                                     ServiceList.getNameOfService(streamingServiceId), | ||||
|                                     NewPipe.getNameOfService(streamingServiceId), | ||||
|                                     "Could not get widget with focus", R.string.general_error)); | ||||
|                 } | ||||
|                 // clear focus | ||||
| @@ -137,13 +137,13 @@ public class SearchInfoItemFragment extends Fragment { | ||||
|             streamingServiceId = savedInstanceState.getInt(STREAMING_SERVICE); | ||||
|         } else { | ||||
|             try { | ||||
|                 streamingServiceId = ServiceList.getIdOfService("Youtube"); | ||||
|                 streamingServiceId = NewPipe.getIdOfService("Youtube"); | ||||
|             } catch(Exception e) { | ||||
|                 e.printStackTrace(); | ||||
|                 ErrorActivity.reportError(getActivity(), e, null, | ||||
|                         getActivity().findViewById(android.R.id.content), | ||||
|                         ErrorActivity.ErrorInfo.make(ErrorActivity.SEARCHED, | ||||
|                                 ServiceList.getNameOfService(streamingServiceId), | ||||
|                                 NewPipe.getNameOfService(streamingServiceId), | ||||
|                                 "", R.string.general_error)); | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -7,13 +7,12 @@ import android.preference.PreferenceManager; | ||||
| import android.util.Log; | ||||
| import android.view.View; | ||||
|  | ||||
| import org.schabi.newpipe.Downloader; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.search.SearchEngine; | ||||
| import org.schabi.newpipe.extractor.search.SearchResult; | ||||
| import org.schabi.newpipe.report.ErrorActivity; | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.extractor.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.SearchEngine; | ||||
| import org.schabi.newpipe.extractor.SearchResult; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
|  | ||||
| import java.io.IOException; | ||||
|  | ||||
| @@ -85,8 +84,8 @@ public class SearchWorker { | ||||
|             SearchEngine engine = null; | ||||
|  | ||||
|             try { | ||||
|                 engine = ServiceList.getService(serviceId) | ||||
|                         .getSearchEngineInstance(new Downloader()); | ||||
|                 engine = NewPipe.getService(serviceId) | ||||
|                         .getSearchEngineInstance(); | ||||
|             } catch(ExtractionException e) { | ||||
|                 ErrorActivity.reportError(h, a, e, null, null, | ||||
|                         ErrorActivity.ErrorInfo.make(ErrorActivity.SEARCHED, | ||||
| @@ -100,8 +99,7 @@ public class SearchWorker { | ||||
|                 String searchLanguage = sp.getString(searchLanguageKey, | ||||
|                         a.getString(R.string.default_language_value)); | ||||
|                 result = SearchResult | ||||
|                         .getSearchResult(engine, query, page, searchLanguage, new Downloader()); | ||||
|  | ||||
|                         .getSearchResult(engine, query, page, searchLanguage); | ||||
|                 if(runs) { | ||||
|                     h.post(new ResultRunnable(result, requestId)); | ||||
|                 } | ||||
|   | ||||
| @@ -6,12 +6,11 @@ import android.os.Handler; | ||||
| import android.preference.PreferenceManager; | ||||
| import android.widget.Toast; | ||||
|  | ||||
| import org.schabi.newpipe.Downloader; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.search.SuggestionExtractor; | ||||
| import org.schabi.newpipe.report.ErrorActivity; | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.extractor.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.SearchEngine; | ||||
| import org.schabi.newpipe.extractor.ServiceList; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.List; | ||||
| @@ -70,18 +69,18 @@ public class SuggestionSearchRunnable implements Runnable{ | ||||
|     @Override | ||||
|     public void run() { | ||||
|         try { | ||||
|             SearchEngine engine = | ||||
|                     ServiceList.getService(serviceId).getSearchEngineInstance(new Downloader()); | ||||
|             SuggestionExtractor se = | ||||
|                     NewPipe.getService(serviceId).getSuggestionExtractorInstance(); | ||||
|             SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(a); | ||||
|             String searchLanguageKey = a.getString(R.string.search_language_key); | ||||
|             String searchLanguage = sp.getString(searchLanguageKey, | ||||
|                     a.getString(R.string.default_language_value)); | ||||
|             List<String> suggestions = engine.suggestionList(query,searchLanguage,new Downloader()); | ||||
|             List<String> suggestions = se.suggestionList(query, searchLanguage); | ||||
|             h.post(new SuggestionResultRunnable(suggestions, adapter)); | ||||
|         } catch (ExtractionException e) { | ||||
|             ErrorActivity.reportError(h, a, e, null, a.findViewById(android.R.id.content), | ||||
|                     ErrorActivity.ErrorInfo.make(ErrorActivity.SEARCHED, | ||||
|                             ServiceList.getNameOfService(serviceId), query, R.string.parsing_error)); | ||||
|                             NewPipe.getNameOfService(serviceId), query, R.string.parsing_error)); | ||||
|             e.printStackTrace(); | ||||
|         } catch (IOException e) { | ||||
|             postNewErrorToast(h, R.string.network_error); | ||||
| @@ -89,7 +88,7 @@ public class SuggestionSearchRunnable implements Runnable{ | ||||
|         } catch (Exception e) { | ||||
|             ErrorActivity.reportError(h, a, e, null, a.findViewById(android.R.id.content), | ||||
|                     ErrorActivity.ErrorInfo.make(ErrorActivity.SEARCHED, | ||||
|                             ServiceList.getNameOfService(serviceId), query, R.string.general_error)); | ||||
|                             NewPipe.getNameOfService(serviceId), query, R.string.general_error)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Weblate
					Weblate