mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 15:23:00 +00:00 
			
		
		
		
	made stream type part of abstractVideoinfo
This commit is contained in:
		| @@ -3,6 +3,7 @@ package org.schabi.newpipe.extractor.youtube; | |||||||
| import android.test.AndroidTestCase; | import android.test.AndroidTestCase; | ||||||
|  |  | ||||||
| import org.apache.commons.lang.exception.ExceptionUtils; | import org.apache.commons.lang.exception.ExceptionUtils; | ||||||
|  | import org.schabi.newpipe.extractor.AbstractVideoInfo; | ||||||
| import org.schabi.newpipe.extractor.SearchResult; | import org.schabi.newpipe.extractor.SearchResult; | ||||||
| import org.schabi.newpipe.extractor.ServiceList; | import org.schabi.newpipe.extractor.ServiceList; | ||||||
| import org.schabi.newpipe.extractor.StreamPreviewInfo; | import org.schabi.newpipe.extractor.StreamPreviewInfo; | ||||||
| @@ -14,7 +15,7 @@ import org.schabi.newpipe.extractor.services.youtube.YoutubeService; | |||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Created by the-scrabi on 29.12.15. |  * Created by Christian Schabesberger on 29.12.15. | ||||||
|  * |  * | ||||||
|  * Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org> |  * Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org> | ||||||
|  * YoutubeSearchEngineTest.java is part of NewPipe. |  * YoutubeSearchEngineTest.java is part of NewPipe. | ||||||
| @@ -100,6 +101,14 @@ public class YoutubeSearchEngineTest extends AndroidTestCase { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public void testStreamType() { | ||||||
|  |         for(StreamPreviewInfo i : result.resultList) { | ||||||
|  |             assertTrue("not a livestream and not a video", | ||||||
|  |                     i.stream_type == AbstractVideoInfo.StreamType.VIDEO_STREAM || | ||||||
|  |                     i.stream_type == AbstractVideoInfo.StreamType.LIVE_STREAM); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public void testIfSuggestionsAreReplied() { |     public void testIfSuggestionsAreReplied() { | ||||||
|         assertEquals(suggestionReply.size() > 0, true); |         assertEquals(suggestionReply.size() > 0, true); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -3,18 +3,17 @@ package org.schabi.newpipe.extractor.youtube; | |||||||
| import android.test.AndroidTestCase; | import android.test.AndroidTestCase; | ||||||
|  |  | ||||||
| import org.schabi.newpipe.Downloader; | import org.schabi.newpipe.Downloader; | ||||||
|  | import org.schabi.newpipe.extractor.AbstractVideoInfo; | ||||||
| import org.schabi.newpipe.extractor.ExtractionException; | import org.schabi.newpipe.extractor.ExtractionException; | ||||||
| import org.schabi.newpipe.extractor.ParsingException; | import org.schabi.newpipe.extractor.ParsingException; | ||||||
| import org.schabi.newpipe.extractor.ServiceList; | import org.schabi.newpipe.extractor.ServiceList; | ||||||
| import org.schabi.newpipe.extractor.StreamExtractor; | import org.schabi.newpipe.extractor.StreamExtractor; | ||||||
| import org.schabi.newpipe.extractor.VideoStream; | import org.schabi.newpipe.extractor.VideoStream; | ||||||
| import org.schabi.newpipe.extractor.services.youtube.YoutubeStreamExtractor; |  | ||||||
| import org.schabi.newpipe.extractor.StreamInfo; |  | ||||||
|  |  | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Created by the-scrabi on 30.12.15. |  * Created by Christian Schabesberger on 30.12.15. | ||||||
|  * |  * | ||||||
|  * Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org> |  * Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org> | ||||||
|  * YoutubeVideoExtractorDefault.java is part of NewPipe. |  * YoutubeVideoExtractorDefault.java is part of NewPipe. | ||||||
| @@ -37,10 +36,6 @@ public class YoutubeStreamExtractorDefaultTest extends AndroidTestCase { | |||||||
|     private StreamExtractor extractor; |     private StreamExtractor extractor; | ||||||
|  |  | ||||||
|     public void setUp() throws IOException, ExtractionException { |     public void setUp() throws IOException, ExtractionException { | ||||||
|         /* some anonymus video test |  | ||||||
|         extractor = new YoutubeStreamExtractor("https://www.youtube.com/watch?v=FmG385_uUys", |  | ||||||
|                 new Downloader()); */ |  | ||||||
|         /* some vevo video (suggested to test against) */ |  | ||||||
|         extractor = ServiceList.getService("Youtube") |         extractor = ServiceList.getService("Youtube") | ||||||
|                 .getExtractorInstance("https://www.youtube.com/watch?v=YQHsXMglC9A", new Downloader()); |                 .getExtractorInstance("https://www.youtube.com/watch?v=YQHsXMglC9A", new Downloader()); | ||||||
|     } |     } | ||||||
| @@ -107,6 +102,10 @@ public class YoutubeStreamExtractorDefaultTest extends AndroidTestCase { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public void testStreamType() throws ParsingException { | ||||||
|  |         assertTrue(extractor.getStreamType() == AbstractVideoInfo.StreamType.VIDEO_STREAM); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public void testGetDashMpd() throws ParsingException { |     public void testGetDashMpd() throws ParsingException { | ||||||
|         assertTrue(extractor.getDashMpdUrl(), |         assertTrue(extractor.getDashMpdUrl(), | ||||||
|                 extractor.getDashMpdUrl() != null || !extractor.getDashMpdUrl().isEmpty()); |                 extractor.getDashMpdUrl() != null || !extractor.getDashMpdUrl().isEmpty()); | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ import org.schabi.newpipe.extractor.services.youtube.YoutubeStreamExtractor; | |||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * Created by the-scrabi on 30.12.15. |  * Created by Christian Schabesberger on 30.12.15. | ||||||
|  * |  * | ||||||
|  * Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org> |  * Copyright (C) Christian Schabesberger 2015 <chris.schabesberger@mailbox.org> | ||||||
|  * YoutubeVideoExtractorGema.java is part of NewPipe. |  * YoutubeVideoExtractorGema.java is part of NewPipe. | ||||||
|   | |||||||
| @@ -7,9 +7,7 @@ import org.schabi.newpipe.extractor.ExtractionException; | |||||||
| import org.schabi.newpipe.extractor.ParsingException; | import org.schabi.newpipe.extractor.ParsingException; | ||||||
| import org.schabi.newpipe.extractor.ServiceList; | import org.schabi.newpipe.extractor.ServiceList; | ||||||
| import org.schabi.newpipe.extractor.StreamExtractor; | import org.schabi.newpipe.extractor.StreamExtractor; | ||||||
| import org.schabi.newpipe.extractor.StreamInfo; |  | ||||||
| import org.schabi.newpipe.extractor.VideoStream; | import org.schabi.newpipe.extractor.VideoStream; | ||||||
| import org.schabi.newpipe.extractor.services.youtube.YoutubeStreamExtractor; |  | ||||||
|  |  | ||||||
| import java.io.IOException; | import java.io.IOException; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -0,0 +1,52 @@ | |||||||
|  | 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; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Created by Christian Schabesberger on 11.03.16. | ||||||
|  |  * | ||||||
|  |  * Copyright (C) Christian Schabesberger 2016 <chris.schabesberger@mailbox.org> | ||||||
|  |  * YoutubestreamExtractorLiveStreamTest.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 YoutubestreamExtractorLiveStreamTest extends AndroidTestCase { | ||||||
|  |  | ||||||
|  |     private StreamExtractor extractor; | ||||||
|  |  | ||||||
|  |     public void setUp() throws IOException, ExtractionException { | ||||||
|  |         //todo: make the extractor not throw over a livestream | ||||||
|  |         /* | ||||||
|  |         extractor = ServiceList.getService("Youtube") | ||||||
|  |                 .getExtractorInstance("https://www.youtube.com/watch?v=J0s6NjqdjLE", new Downloader()); | ||||||
|  |                 */ | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public void testStreamType() throws ParsingException { | ||||||
|  |         assertTrue(true); | ||||||
|  |         // assertTrue(extractor.getStreamType() == AbstractVideoInfo.StreamType.LIVE_STREAM); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| @@ -6,6 +6,7 @@ import android.view.ViewGroup; | |||||||
| import android.widget.ImageView; | import android.widget.ImageView; | ||||||
| import android.widget.TextView; | import android.widget.TextView; | ||||||
|  |  | ||||||
|  | import org.schabi.newpipe.extractor.AbstractVideoInfo; | ||||||
| import org.schabi.newpipe.extractor.StreamPreviewInfo; | import org.schabi.newpipe.extractor.StreamPreviewInfo; | ||||||
|  |  | ||||||
| import com.nostra13.universalimageloader.core.DisplayImageOptions; | import com.nostra13.universalimageloader.core.DisplayImageOptions; | ||||||
| @@ -76,7 +77,11 @@ public class VideoInfoItemViewCreator { | |||||||
|         if(info.duration > 0) { |         if(info.duration > 0) { | ||||||
|             holder.itemDurationView.setText(getDurationString(info.duration)); |             holder.itemDurationView.setText(getDurationString(info.duration)); | ||||||
|         } else { |         } else { | ||||||
|             holder.itemDurationView.setVisibility(View.GONE); |             if(info.stream_type == AbstractVideoInfo.StreamType.LIVE_STREAM) { | ||||||
|  |                 holder.itemDurationView.setText(R.string.duration_live); | ||||||
|  |             } else { | ||||||
|  |                 holder.itemDurationView.setVisibility(View.GONE); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         if(info.view_count >= 0) { |         if(info.view_count >= 0) { | ||||||
|             holder.itemViewCountView.setText(shortViewCount(info.view_count)); |             holder.itemViewCountView.setText(shortViewCount(info.view_count)); | ||||||
| @@ -84,7 +89,7 @@ public class VideoInfoItemViewCreator { | |||||||
|             holder.itemViewCountView.setVisibility(View.GONE); |             holder.itemViewCountView.setVisibility(View.GONE); | ||||||
|         } |         } | ||||||
|         if(!info.upload_date.isEmpty()) { |         if(!info.upload_date.isEmpty()) { | ||||||
|             holder.itemUploadDateView.setText(info.upload_date+" • "); |             holder.itemUploadDateView.setText(info.upload_date + " • "); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         holder.itemThumbnailView.setImageResource(R.drawable.dummy_thumbnail); |         holder.itemThumbnailView.setImageResource(R.drawable.dummy_thumbnail); | ||||||
|   | |||||||
| @@ -22,6 +22,16 @@ import android.graphics.Bitmap; | |||||||
|  |  | ||||||
| /**Common properties between StreamInfo and StreamPreviewInfo.*/ | /**Common properties between StreamInfo and StreamPreviewInfo.*/ | ||||||
| public abstract class AbstractVideoInfo { | public abstract class AbstractVideoInfo { | ||||||
|  |     public static enum StreamType { | ||||||
|  |         NONE,   // placeholder to check if stream type was checked or not | ||||||
|  |         VIDEO_STREAM, | ||||||
|  |         AUDIO_STREAM, | ||||||
|  |         LIVE_STREAM, | ||||||
|  |         AUDIO_LIVE_STREAM, | ||||||
|  |         FILE | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public StreamType stream_type; | ||||||
|     public int service_id = -1; |     public int service_id = -1; | ||||||
|     public String id = ""; |     public String id = ""; | ||||||
|     public String title = ""; |     public String title = ""; | ||||||
|   | |||||||
| @@ -242,16 +242,6 @@ public class StreamInfo extends AbstractVideoInfo { | |||||||
|         return streamInfo; |         return streamInfo; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static enum StreamType { |  | ||||||
|         NONE,   // placeholder to check if stream type was checked or not |  | ||||||
|         VIDEO_STREAM, |  | ||||||
|         AUDIO_STREAM, |  | ||||||
|         LIVE_STREAM, |  | ||||||
|         AUDIO_LIVE_STREAM, |  | ||||||
|         FILE |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public StreamType stream_type; |  | ||||||
|     public String uploader_thumbnail_url = ""; |     public String uploader_thumbnail_url = ""; | ||||||
|     public String description = ""; |     public String description = ""; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -56,6 +56,7 @@ public class StreamPreviewInfoCollector { | |||||||
|                 resultItem.id = (new YoutubeStreamUrlIdHandler()).getVideoId(resultItem.webpage_url); |                 resultItem.id = (new YoutubeStreamUrlIdHandler()).getVideoId(resultItem.webpage_url); | ||||||
|             } |             } | ||||||
|             resultItem.title = extractor.getTitle(); |             resultItem.title = extractor.getTitle(); | ||||||
|  |             resultItem.stream_type = extractor.getStreamType(); | ||||||
|  |  | ||||||
|             // optional iformation |             // optional iformation | ||||||
|             try { |             try { | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ package org.schabi.newpipe.extractor; | |||||||
|  */ |  */ | ||||||
|  |  | ||||||
| public interface StreamPreviewInfoExtractor { | public interface StreamPreviewInfoExtractor { | ||||||
|  |     AbstractVideoInfo.StreamType getStreamType() throws ParsingException; | ||||||
|     String getWebPageUrl() throws ParsingException; |     String getWebPageUrl() throws ParsingException; | ||||||
|     String getTitle() throws ParsingException; |     String getTitle() throws ParsingException; | ||||||
|     int getDuration() throws ParsingException; |     int getDuration() throws ParsingException; | ||||||
|   | |||||||
| @@ -3,6 +3,7 @@ package org.schabi.newpipe.extractor.services.youtube; | |||||||
| import org.jsoup.Jsoup; | import org.jsoup.Jsoup; | ||||||
| import org.jsoup.nodes.Document; | import org.jsoup.nodes.Document; | ||||||
| import org.jsoup.nodes.Element; | import org.jsoup.nodes.Element; | ||||||
|  | import org.schabi.newpipe.extractor.AbstractVideoInfo; | ||||||
| import org.schabi.newpipe.extractor.Downloader; | import org.schabi.newpipe.extractor.Downloader; | ||||||
| import org.schabi.newpipe.extractor.ExtractionException; | import org.schabi.newpipe.extractor.ExtractionException; | ||||||
| import org.schabi.newpipe.extractor.Parser; | import org.schabi.newpipe.extractor.Parser; | ||||||
| @@ -303,6 +304,15 @@ public class YoutubeSearchEngine extends SearchEngine { | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             @Override | ||||||
|  |             public AbstractVideoInfo.StreamType getStreamType() { | ||||||
|  |                 if(isLiveStream(item)) { | ||||||
|  |                     return AbstractVideoInfo.StreamType.LIVE_STREAM; | ||||||
|  |                 } else { | ||||||
|  |                     return AbstractVideoInfo.StreamType.VIDEO_STREAM; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|             private boolean isLiveStream(Element item) { |             private boolean isLiveStream(Element item) { | ||||||
|                 Element bla = item.select("span[class*=\"yt-badge-live\"]").first(); |                 Element bla = item.select("span[class*=\"yt-badge-live\"]").first(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -77,6 +77,7 @@ | |||||||
|     <string name="content">Content</string> |     <string name="content">Content</string> | ||||||
|     <string name="show_age_restricted_content_title">Show age restricted content</string> |     <string name="show_age_restricted_content_title">Show age restricted content</string> | ||||||
|     <string name="video_is_age_restricted">Video is Age restricted. Enable age restricted videos in the settings first.</string> |     <string name="video_is_age_restricted">Video is Age restricted. Enable age restricted videos in the settings first.</string> | ||||||
|  |     <string name="duration_live">live</string> | ||||||
|  |  | ||||||
|     <!-- error strings --> |     <!-- error strings --> | ||||||
|     <string name="general_error">Error</string> |     <string name="general_error">Error</string> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Christian Schabesberger
					Christian Schabesberger