mirror of
				https://github.com/TeamNewPipe/NewPipe
				synced 2025-10-31 07:13:00 +00:00 
			
		
		
		
	make colector hirarchicall
remove broken commit()
This commit is contained in:
		| @@ -46,6 +46,7 @@ import org.schabi.newpipe.Localization; | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.ReCaptchaActivity; | ||||
| import org.schabi.newpipe.download.DownloadDialog; | ||||
| import org.schabi.newpipe.extractor.InfoItem; | ||||
| import org.schabi.newpipe.extractor.MediaFormat; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.stream_info.AudioStream; | ||||
| @@ -536,7 +537,7 @@ public class VideoItemDetailFragment extends Fragment { | ||||
|  | ||||
|     private void initSimilarVideos(final StreamInfo info) { | ||||
|         LinearLayout similarLayout = (LinearLayout) activity.findViewById(R.id.similar_streams_view); | ||||
|         for (final StreamInfoItem item : info.related_streams) { | ||||
|         for (final InfoItem item : info.related_streams) { | ||||
|             similarLayout.addView(infoItemBuilder.buildView(similarLayout, item)); | ||||
|         } | ||||
|         infoItemBuilder.setOnItemSelectedListener(new InfoItemBuilder.OnItemSelectedListener() { | ||||
|   | ||||
| @@ -1,9 +1,5 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
|  | ||||
| import android.icu.text.IDNA; | ||||
|  | ||||
| import static org.schabi.newpipe.extractor.InfoItem.InfoType.STREAM; | ||||
|  | ||||
| /** | ||||
|  * Created by the-scrabi on 11.02.17. | ||||
|  * | ||||
| @@ -30,6 +26,8 @@ public interface InfoItem { | ||||
|         PLAYLIST, | ||||
|         CHANNEL | ||||
|     } | ||||
|     void setInfoType(InfoType iT); | ||||
|     InfoType getInfoType(); | ||||
|  | ||||
|     InfoType infoType(); | ||||
|     String getTitle(); | ||||
|     String getLink(); | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,66 @@ | ||||
| package org.schabi.newpipe.extractor; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
|  | ||||
| import java.util.List; | ||||
| import java.util.Vector; | ||||
|  | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 12.02.17. | ||||
|  * | ||||
|  * Copyright (C) Christian Schabesberger 2017 <chris.schabesberger@mailbox.org> | ||||
|  * InfoItemCollector.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 InfoItemCollector { | ||||
|     private List<InfoItem> itemList = new Vector<>(); | ||||
|     private List<Throwable> errors = new Vector<>(); | ||||
|     private UrlIdHandler urlIdHandler; | ||||
|     private int serviceId = -1; | ||||
|  | ||||
|     public InfoItemCollector(UrlIdHandler handler, int serviceId) { | ||||
|         urlIdHandler = handler; | ||||
|         this.serviceId = serviceId; | ||||
|     } | ||||
|  | ||||
|     public List<InfoItem> getItemList() { | ||||
|         return itemList; | ||||
|     } | ||||
|     public List<Throwable> getErrors() { | ||||
|         return errors; | ||||
|     } | ||||
|     public void addFromCollector(InfoItemCollector otherC) throws ExtractionException { | ||||
|         if(serviceId != otherC.serviceId) { | ||||
|             throw new ExtractionException("Service Id does not equal: " | ||||
|                     + NewPipe.getNameOfService(serviceId) | ||||
|                     + " and " + NewPipe.getNameOfService(otherC.serviceId)); | ||||
|         } | ||||
|         errors.addAll(otherC.errors); | ||||
|         itemList.addAll(otherC.itemList); | ||||
|     } | ||||
|     protected void addError(Exception e) { | ||||
|         errors.add(e); | ||||
|     } | ||||
|     protected void addItem(InfoItem item) { | ||||
|         itemList.add(item); | ||||
|     } | ||||
|     protected int getServiceId() { | ||||
|         return serviceId; | ||||
|     } | ||||
|     protected UrlIdHandler getUrlIdHandler() { | ||||
|         return urlIdHandler; | ||||
|     } | ||||
| } | ||||
| @@ -75,7 +75,7 @@ public class ChannelInfo { | ||||
|     public String avatar_url = ""; | ||||
|     public String banner_url = ""; | ||||
|     public String feed_url = ""; | ||||
|     public List<StreamInfoItem> related_streams = null; | ||||
|     public List<InfoItem> related_streams = null; | ||||
|     public boolean hasNextPage = false; | ||||
|  | ||||
|     public List<Throwable> errors = new Vector<>(); | ||||
|   | ||||
| @@ -1,8 +1,38 @@ | ||||
| package org.schabi.newpipe.extractor.channel; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.InfoItem; | ||||
|  | ||||
| /** | ||||
|  * Created by the-scrabi on 11.02.17. | ||||
|  * Created by Christian Schabesberger on 11.02.17. | ||||
|  * | ||||
|  * Copyright (C) Christian Schabesberger 2017 <chris.schabesberger@mailbox.org> | ||||
|  * ChannelInfoItem.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 ChannelInfoItem { | ||||
| public class ChannelInfoItem implements InfoItem { | ||||
|  | ||||
|     public InfoType infoType() { | ||||
|         return InfoType.CHANNEL; | ||||
|     } | ||||
|  | ||||
|     public String getTitle() { | ||||
|         return ""; | ||||
|     } | ||||
|  | ||||
|     public String getLink() { | ||||
|         return ""; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,13 +1,13 @@ | ||||
| package org.schabi.newpipe.extractor.search; | ||||
| 
 | ||||
| import org.schabi.newpipe.extractor.InfoItemCollector; | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamInfoItemCollector; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Christian Schabesberger on 11.05.16. | ||||
|  * Created by Christian Schabesberger on 12.02.17. | ||||
|  * | ||||
|  * Copyright (C) Christian Schabesberger 2016 <chris.schabesberger@mailbox.org> | ||||
|  * StreamInfoSearchItemCollector.java is part of NewPipe. | ||||
|  * Copyright (C) Christian Schabesberger 2017 <chris.schabesberger@mailbox.org> | ||||
|  * InfoItemSearchCollector.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 | ||||
| @@ -23,11 +23,10 @@ import org.schabi.newpipe.extractor.stream_info.StreamInfoItemCollector; | ||||
|  * along with NewPipe.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| 
 | ||||
| public class StreamInfoSearchItemCollector extends StreamInfoItemCollector { | ||||
| 
 | ||||
| public class InfoItemSearchCollector extends InfoItemCollector { | ||||
|     private String suggestion = ""; | ||||
| 
 | ||||
|     public StreamInfoSearchItemCollector(UrlIdHandler handler, int serviceId) { | ||||
|     InfoItemSearchCollector(UrlIdHandler handler, int serviceId) { | ||||
|         super(handler, serviceId); | ||||
|     } | ||||
| 
 | ||||
| @@ -2,6 +2,7 @@ package org.schabi.newpipe.extractor.search; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamInfoItemCollector; | ||||
|  | ||||
| import java.io.IOException; | ||||
|  | ||||
| @@ -32,18 +33,23 @@ public abstract class SearchEngine { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private StreamInfoSearchItemCollector collector; | ||||
|     private StreamInfoItemCollector streamCollector; | ||||
|     private InfoItemSearchCollector collector; | ||||
|  | ||||
|     public SearchEngine(UrlIdHandler urlIdHandler, int serviceId) { | ||||
|         collector = new StreamInfoSearchItemCollector(urlIdHandler, serviceId); | ||||
|         streamCollector = new StreamInfoItemCollector(urlIdHandler, serviceId); | ||||
|         collector = new InfoItemSearchCollector(urlIdHandler, serviceId); | ||||
|     } | ||||
|  | ||||
|     protected StreamInfoSearchItemCollector getStreamPreviewInfoSearchCollector() { | ||||
|     protected StreamInfoItemCollector getStreamPreviewInfoCollector() { | ||||
|         return streamCollector; | ||||
|     } | ||||
|  | ||||
|     protected  InfoItemSearchCollector getInfoItemSearchCollector() { | ||||
|         return collector; | ||||
|     } | ||||
|  | ||||
|     //Result search(String query, int page); | ||||
|     public abstract StreamInfoSearchItemCollector search( | ||||
|     public abstract InfoItemSearchCollector search( | ||||
|             String query, int page, String contentCountry) | ||||
|             throws ExtractionException, IOException; | ||||
| } | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| package org.schabi.newpipe.extractor.search; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.InfoItem; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamInfoItem; | ||||
|  | ||||
| @@ -45,6 +46,6 @@ public class SearchResult { | ||||
|     } | ||||
|  | ||||
|     public String suggestion = ""; | ||||
|     public List<StreamInfoItem> resultList = new Vector<>(); | ||||
|     public List<InfoItem> resultList = new Vector<>(); | ||||
|     public List<Throwable> errors = new Vector<>(); | ||||
| } | ||||
|   | ||||
| @@ -7,8 +7,9 @@ import org.schabi.newpipe.extractor.Downloader; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
| import org.schabi.newpipe.extractor.search.InfoItemSearchCollector; | ||||
| import org.schabi.newpipe.extractor.search.SearchEngine; | ||||
| import org.schabi.newpipe.extractor.search.StreamInfoSearchItemCollector; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamInfoItemCollector; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamInfoItemExtractor; | ||||
|  | ||||
| import java.net.URLEncoder; | ||||
| @@ -45,9 +46,11 @@ public class YoutubeSearchEngine extends SearchEngine { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public StreamInfoSearchItemCollector search(String query, int page, String languageCode) | ||||
|     public InfoItemSearchCollector search(String query, int page, String languageCode) | ||||
|             throws IOException, ExtractionException { | ||||
|         StreamInfoSearchItemCollector collector = getStreamPreviewInfoSearchCollector(); | ||||
|         StreamInfoItemCollector streamCollector = getStreamPreviewInfoCollector(); | ||||
|         InfoItemSearchCollector collector = getInfoItemSearchCollector(); | ||||
|  | ||||
|  | ||||
|         Downloader downloader = NewPipe.getDownloader(); | ||||
|  | ||||
| @@ -97,13 +100,13 @@ public class YoutubeSearchEngine extends SearchEngine { | ||||
|  | ||||
|                 // video item type | ||||
|             } else if ((el = item.select("div[class*=\"yt-lockup-video\"").first()) != null) { | ||||
|                 collector.commit(extractPreviewInfo(el)); | ||||
|                 streamCollector.commit(extractPreviewInfo(el)); | ||||
|             } else { | ||||
|                 //noinspection ConstantConditions | ||||
|                 collector.addError(new Exception("unexpected element found:\"" + el + "\"")); | ||||
|                 throw new ExtractionException("unexpected element found:\"" + el + "\""); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         collector.addFromCollector(streamCollector); | ||||
|         return collector; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -2,6 +2,7 @@ package org.schabi.newpipe.extractor.stream_info; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.AbstractStreamInfo; | ||||
| import org.schabi.newpipe.extractor.DashMpdParser; | ||||
| import org.schabi.newpipe.extractor.InfoItem; | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.exceptions.ExtractionException; | ||||
|  | ||||
| @@ -246,7 +247,7 @@ public class StreamInfo extends AbstractStreamInfo { | ||||
|                 StreamInfoItemExtractor nextVideo = extractor.getNextVideo(); | ||||
|                 c.commit(nextVideo); | ||||
|                 if(c.getItemList().size() != 0) { | ||||
|                     streamInfo.next_video = c.getItemList().get(0); | ||||
|                     streamInfo.next_video = (StreamInfoItem) c.getItemList().get(0); | ||||
|                 } | ||||
|                 streamInfo.errors.addAll(c.getErrors()); | ||||
|             } | ||||
| @@ -285,7 +286,7 @@ public class StreamInfo extends AbstractStreamInfo { | ||||
|     public int dislike_count = -1; | ||||
|     public String average_rating = ""; | ||||
|     public StreamInfoItem next_video = null; | ||||
|     public List<StreamInfoItem> related_streams = null; | ||||
|     public List<InfoItem> related_streams = null; | ||||
|     //in seconds. some metadata is not passed using a StreamInfo object! | ||||
|     public int start_position = 0; | ||||
|  | ||||
|   | ||||
| @@ -21,8 +21,21 @@ package org.schabi.newpipe.extractor.stream_info; | ||||
|  */ | ||||
|  | ||||
| import org.schabi.newpipe.extractor.AbstractStreamInfo; | ||||
| import org.schabi.newpipe.extractor.InfoItem; | ||||
|  | ||||
| /**Info object for previews of unopened videos, eg search results, related videos*/ | ||||
| public class StreamInfoItem extends AbstractStreamInfo { | ||||
| public class StreamInfoItem extends AbstractStreamInfo implements InfoItem { | ||||
|     public int duration; | ||||
|  | ||||
|     public InfoType infoType() { | ||||
|         return InfoType.STREAM; | ||||
|     } | ||||
|  | ||||
|     public String getTitle() { | ||||
|         return title; | ||||
|     } | ||||
|  | ||||
|     public String getLink() { | ||||
|         return webpage_url; | ||||
|     } | ||||
| } | ||||
| @@ -1,5 +1,6 @@ | ||||
| package org.schabi.newpipe.extractor.stream_info; | ||||
|  | ||||
| import org.schabi.newpipe.extractor.InfoItemCollector; | ||||
| import org.schabi.newpipe.extractor.NewPipe; | ||||
| import org.schabi.newpipe.extractor.UrlIdHandler; | ||||
| import org.schabi.newpipe.extractor.exceptions.FoundAdException; | ||||
| @@ -28,39 +29,24 @@ import java.util.Vector; | ||||
|  * along with NewPipe.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| public class StreamInfoItemCollector { | ||||
|     private List<StreamInfoItem> itemList = new Vector<>(); | ||||
|     private List<Throwable> errors = new Vector<>(); | ||||
|     private UrlIdHandler urlIdHandler; | ||||
|     private int serviceId = -1; | ||||
| public class StreamInfoItemCollector extends InfoItemCollector { | ||||
|  | ||||
|     public StreamInfoItemCollector(UrlIdHandler handler, int serviceId) { | ||||
|         urlIdHandler = handler; | ||||
|         this.serviceId = serviceId; | ||||
|     } | ||||
|  | ||||
|     public List<StreamInfoItem> getItemList() { | ||||
|         return itemList; | ||||
|     } | ||||
|  | ||||
|     public List<Throwable> getErrors() { | ||||
|         return errors; | ||||
|     } | ||||
|  | ||||
|     public void addError(Exception e) { | ||||
|         errors.add(e); | ||||
|         super(handler, serviceId); | ||||
|     } | ||||
|  | ||||
|     public void commit(StreamInfoItemExtractor extractor) throws ParsingException { | ||||
|         try { | ||||
|             StreamInfoItem resultItem = new StreamInfoItem(); | ||||
|             // importand information | ||||
|             resultItem.service_id = serviceId; | ||||
|             resultItem.service_id = getServiceId(); | ||||
|             resultItem.webpage_url = extractor.getWebPageUrl(); | ||||
|             if (urlIdHandler == null) { | ||||
|             if (getUrlIdHandler() == null) { | ||||
|                 throw new ParsingException("Error: UrlIdHandler not set"); | ||||
|             } else if(!resultItem.webpage_url.isEmpty()) { | ||||
|                 resultItem.id = NewPipe.getService(serviceId).getUrlIdHandlerInstance().getId(resultItem.webpage_url); | ||||
|                 resultItem.id = NewPipe.getService(getServiceId()) | ||||
|                         .getUrlIdHandlerInstance() | ||||
|                         .getId(resultItem.webpage_url); | ||||
|             } | ||||
|             resultItem.title = extractor.getTitle(); | ||||
|             resultItem.stream_type = extractor.getStreamType(); | ||||
| @@ -91,7 +77,7 @@ public class StreamInfoItemCollector { | ||||
|             } catch (Exception e) { | ||||
|                 addError(e); | ||||
|             } | ||||
|             itemList.add(resultItem); | ||||
|             addItem(resultItem); | ||||
|         } catch(FoundAdException ae) { | ||||
|             System.out.println("AD_WARNING: " + ae.getMessage()); | ||||
|         } catch (Exception e) { | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| package org.schabi.newpipe.info_list; | ||||
|  | ||||
| import android.app.Activity; | ||||
| import android.util.Log; | ||||
| import android.view.LayoutInflater; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| @@ -11,6 +12,7 @@ import com.nostra13.universalimageloader.core.ImageLoader; | ||||
| import org.schabi.newpipe.ImageErrorLoadingListener; | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.extractor.AbstractStreamInfo; | ||||
| import org.schabi.newpipe.extractor.InfoItem; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamInfoItem; | ||||
|  | ||||
| /** | ||||
| @@ -55,7 +57,11 @@ public class InfoItemBuilder { | ||||
|         this.onItemSelectedListener = onItemSelectedListener; | ||||
|     } | ||||
|  | ||||
|     public void buildByHolder(InfoItemHolder holder, final StreamInfoItem info) { | ||||
|     public void buildByHolder(InfoItemHolder holder, final InfoItem i) { | ||||
|         final StreamInfoItem info = (StreamInfoItem) i; | ||||
|         if(info.infoType() != InfoItem.InfoType.STREAM) { | ||||
|             Log.e("InfoItemBuilder", "Info type not yet supported"); | ||||
|         } | ||||
|         // fill holder with information | ||||
|         holder.itemVideoTitleView.setText(info.title); | ||||
|         if(info.uploader != null && !info.uploader.isEmpty()) { | ||||
| @@ -97,7 +103,7 @@ public class InfoItemBuilder { | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     public View buildView(ViewGroup parent, final StreamInfoItem info) { | ||||
|     public View buildView(ViewGroup parent, final InfoItem info) { | ||||
|         View streamPreviewView = LayoutInflater.from(parent.getContext()) | ||||
|                 .inflate(R.layout.video_item, parent, false); | ||||
|         InfoItemHolder holder = new InfoItemHolder(streamPreviewView); | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
|  | ||||
| import org.schabi.newpipe.R; | ||||
| import org.schabi.newpipe.extractor.InfoItem; | ||||
| import org.schabi.newpipe.extractor.stream_info.StreamInfoItem; | ||||
|  | ||||
| import java.util.List; | ||||
| @@ -35,7 +36,7 @@ import java.util.Vector; | ||||
| public class InfoListAdapter extends RecyclerView.Adapter<InfoItemHolder> { | ||||
|  | ||||
|     private final InfoItemBuilder infoItemBuilder; | ||||
|     private final List<StreamInfoItem> streamList; | ||||
|     private final List<InfoItem> streamList; | ||||
|  | ||||
|     public InfoListAdapter(Activity a, View rootView) { | ||||
|         infoItemBuilder = new InfoItemBuilder(a, rootView); | ||||
| @@ -47,7 +48,7 @@ public class InfoListAdapter extends RecyclerView.Adapter<InfoItemHolder> { | ||||
|         infoItemBuilder.setOnItemSelectedListener(onItemSelectedListener); | ||||
|     } | ||||
|  | ||||
|     public void addStreamItemList(List<StreamInfoItem> videos) { | ||||
|     public void addStreamItemList(List<InfoItem> videos) { | ||||
|         if(videos!= null) { | ||||
|             streamList.addAll(videos); | ||||
|             notifyDataSetChanged(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Christian Schabesberger
					Christian Schabesberger