mirror of
				https://github.com/TeamPiped/Piped-Backend.git
				synced 2024-08-14 23:51:41 +00:00 
			
		
		
		
	Add support for search filters and simplify continuations.
This commit is contained in:
		
							parent
							
								
									73b527a288
								
							
						
					
					
						commit
						0129cc58ce
					
				
					 3 changed files with 23 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -131,8 +131,8 @@ public class ServerLauncher extends MultithreadedHttpServerLauncher {
 | 
			
		|||
            }
 | 
			
		||||
        })).map("/search", AsyncServlet.ofBlocking(executor, request -> {
 | 
			
		||||
            try {
 | 
			
		||||
                return getJsonResponse(ResponseHelper.searchResponse(request.getQueryParameter("q")),
 | 
			
		||||
                        "public, max-age=600");
 | 
			
		||||
                return getJsonResponse(ResponseHelper.searchResponse(request.getQueryParameter("q"),
 | 
			
		||||
                        request.getQueryParameter("filter")), "public, max-age=600");
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                return getErrorResponse(e);
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -140,7 +140,7 @@ public class ServerLauncher extends MultithreadedHttpServerLauncher {
 | 
			
		|||
            try {
 | 
			
		||||
                return getJsonResponse(
 | 
			
		||||
                        ResponseHelper.searchPageResponse(request.getQueryParameter("q"),
 | 
			
		||||
                                request.getQueryParameter("url"), request.getQueryParameter("id")),
 | 
			
		||||
                                request.getQueryParameter("filter"), request.getQueryParameter("nextpage")),
 | 
			
		||||
                        "public, max-age=3600");
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                return getErrorResponse(e);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ import java.net.URL;
 | 
			
		|||
import java.net.http.HttpRequest;
 | 
			
		||||
import java.net.http.HttpRequest.BodyPublishers;
 | 
			
		||||
import java.net.http.HttpResponse.BodyHandlers;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.concurrent.CompletableFuture;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
| 
						 | 
				
			
			@ -285,10 +286,11 @@ public class ResponseHelper {
 | 
			
		|||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static final byte[] searchResponse(String q) throws IOException, ExtractionException, InterruptedException {
 | 
			
		||||
    public static final byte[] searchResponse(String q, String filter)
 | 
			
		||||
            throws IOException, ExtractionException, InterruptedException {
 | 
			
		||||
 | 
			
		||||
        final SearchInfo info = SearchInfo.getInfo(Constants.YOUTUBE_SERVICE,
 | 
			
		||||
                Constants.YOUTUBE_SERVICE.getSearchQHFactory().fromQuery(q));
 | 
			
		||||
                Constants.YOUTUBE_SERVICE.getSearchQHFactory().fromQuery(q, Collections.singletonList(filter), null));
 | 
			
		||||
 | 
			
		||||
        ObjectArrayList<SearchItem> items = new ObjectArrayList<>();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -298,7 +300,7 @@ public class ResponseHelper {
 | 
			
		|||
                StreamInfoItem stream = (StreamInfoItem) item;
 | 
			
		||||
                items.add(new SearchStream(item.getName(), rewriteURL(item.getThumbnailUrl()),
 | 
			
		||||
                        item.getUrl().substring(23), stream.getTextualUploadDate(), stream.getUploaderName(),
 | 
			
		||||
                        stream.getUploaderUrl().substring(23), stream.getViewCount(), stream.getDuration(),
 | 
			
		||||
                        optionalSubstring(stream.getUploaderUrl(), 23), stream.getViewCount(), stream.getDuration(),
 | 
			
		||||
                        stream.isUploaderVerified()));
 | 
			
		||||
                break;
 | 
			
		||||
            case CHANNEL:
 | 
			
		||||
| 
						 | 
				
			
			@ -319,17 +321,19 @@ public class ResponseHelper {
 | 
			
		|||
 | 
			
		||||
        Page nextpage = info.getNextPage();
 | 
			
		||||
 | 
			
		||||
        return nextpage != null
 | 
			
		||||
                ? Constants.mapper.writeValueAsBytes(new SearchResults(nextpage.getUrl(), nextpage.getId(), items))
 | 
			
		||||
                : Constants.mapper.writeValueAsBytes(new SearchResults(null, null, items));
 | 
			
		||||
        return Constants.mapper
 | 
			
		||||
                .writeValueAsBytes(new SearchResults(items, Constants.mapper.writeValueAsString(nextpage)));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static final byte[] searchPageResponse(String q, String url, String id)
 | 
			
		||||
    public static final byte[] searchPageResponse(String q, String filter, String prevpageStr)
 | 
			
		||||
            throws IOException, ExtractionException, InterruptedException {
 | 
			
		||||
 | 
			
		||||
        Page prevpage = Constants.mapper.readValue(prevpageStr, Page.class);
 | 
			
		||||
 | 
			
		||||
        InfoItemsPage<InfoItem> pages = SearchInfo.getMoreItems(Constants.YOUTUBE_SERVICE,
 | 
			
		||||
                Constants.YOUTUBE_SERVICE.getSearchQHFactory().fromQuery(q), new Page(url, id));
 | 
			
		||||
                Constants.YOUTUBE_SERVICE.getSearchQHFactory().fromQuery(q, Collections.singletonList(filter), null),
 | 
			
		||||
                prevpage);
 | 
			
		||||
 | 
			
		||||
        ObjectArrayList<SearchItem> items = new ObjectArrayList<>();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -360,9 +364,8 @@ public class ResponseHelper {
 | 
			
		|||
 | 
			
		||||
        Page nextpage = pages.getNextPage();
 | 
			
		||||
 | 
			
		||||
        return nextpage != null
 | 
			
		||||
                ? Constants.mapper.writeValueAsBytes(new SearchResults(nextpage.getUrl(), nextpage.getId(), items))
 | 
			
		||||
                : Constants.mapper.writeValueAsBytes(new SearchResults(null, null, items));
 | 
			
		||||
        return Constants.mapper
 | 
			
		||||
                .writeValueAsBytes(new SearchResults(items, Constants.mapper.writeValueAsString(nextpage)));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -441,6 +444,10 @@ public class ResponseHelper {
 | 
			
		|||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static final String optionalSubstring(String s, int index) {
 | 
			
		||||
        return s == null || s.isEmpty() ? null : s.substring(index);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static String rewriteURL(final String old) {
 | 
			
		||||
 | 
			
		||||
        if (Constants.debug)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,12 +5,11 @@ import me.kavin.piped.utils.obj.search.SearchItem;
 | 
			
		|||
 | 
			
		||||
public class SearchResults {
 | 
			
		||||
 | 
			
		||||
    public String nextpage, id;
 | 
			
		||||
    public ObjectArrayList<SearchItem> items;
 | 
			
		||||
    public String nextpage;
 | 
			
		||||
 | 
			
		||||
    public SearchResults(String nextpage, String id, ObjectArrayList<SearchItem> items) {
 | 
			
		||||
    public SearchResults(ObjectArrayList<SearchItem> items, String nextpage) {
 | 
			
		||||
        this.nextpage = nextpage;
 | 
			
		||||
        this.id = id;
 | 
			
		||||
        this.items = items;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue