/* * Copyright (C) 2014 Freddie (Musenkishi) Lust-Hed * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.musenkishi.wally.dataprovider; import android.net.Uri; import com.musenkishi.wally.dataprovider.models.DataProviderError; import com.musenkishi.wally.models.filters.FilterAspectRatioKeys; import com.musenkishi.wally.models.filters.FilterBoardsKeys; import com.musenkishi.wally.models.filters.FilterGroupsStructure; import com.musenkishi.wally.models.filters.FilterPurityKeys; import com.musenkishi.wally.models.filters.FilterResolutionKeys; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import java.io.IOException; import java.net.MalformedURLException; import java.util.concurrent.TimeUnit; /** * Created by Musenkishi on 2014-03-01 15:31. * No threading shall take place in this class. */ public class NetworkDataProvider { public static final String WALLHAVEN_BASE_URL = "http://alpha.wallhaven.cc/"; public static final String PATH_TOPLIST = "toplist"; public static final String PATH_RANDOM = "random"; public static final String PATH_SEARCH = "search"; public static final String PATH_LATEST = "latest"; public static final int THUMBS_PER_PAGE = 24; public NetworkDataProvider() { } private Uri buildWallhavenUrl(int page, String path, FilterGroupsStructure filterGroupsStructure) { String sorting = "views"; if (PATH_SEARCH.equalsIgnoreCase(path)) { sorting = "relevance"; } else if (PATH_RANDOM.equalsIgnoreCase(path)) { sorting = "random"; } else if (PATH_LATEST.equalsIgnoreCase(path)) { sorting = "date_added"; } Uri.Builder builder = new Uri.Builder(); builder.scheme("http").authority("alpha.wallhaven.cc") .appendEncodedPath("search") .appendQueryParameter(FilterBoardsKeys.PARAMETER_KEY, filterGroupsStructure.getBoardsFilter()) .appendQueryParameter(FilterResolutionKeys.PARAMETER_KEY, filterGroupsStructure.getResolutionFilter().getValue()) .appendQueryParameter(FilterPurityKeys.PARAMETER_KEY, filterGroupsStructure.getPurityFilter()) .appendQueryParameter(FilterAspectRatioKeys.PARAMETER_KEY, filterGroupsStructure.getAspectRatioFilter().getValue()) .appendQueryParameter("sorting", sorting) .appendQueryParameter("order", "desc") .appendQueryParameter("page", page+"") ; return builder.build(); } public String getDataSync(String path, int index, FilterGroupsStructure filterGroupsStructure){ Uri uri = buildWallhavenUrl(index, path, filterGroupsStructure); String url = uri.toString(); return getDataSync(url); } public String getDataSync(String url){ try { OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(10, TimeUnit.SECONDS); client.setReadTimeout(10, TimeUnit.SECONDS); Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute(); return response.body().string(); } catch (MalformedURLException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; } } public void getData(String path, int index, FilterGroupsStructure filterGroupsStructure, final OnDataReceivedListener onDataReceivedListener) { Uri uri = buildWallhavenUrl(index, path, filterGroupsStructure); String url = uri.toString(); getData(url, onDataReceivedListener); } public void getData(String url, final OnDataReceivedListener onDataReceivedListener) { try { OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(10, TimeUnit.SECONDS); client.setReadTimeout(10, TimeUnit.SECONDS); Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute(); if (onDataReceivedListener != null) { onDataReceivedListener.onData(response.body().string(), url); } } catch (MalformedURLException e) { if (onDataReceivedListener != null) { DataProviderError dataProviderError = new DataProviderError( DataProviderError.Type.NETWORK, 400, "MalformedURLException"); onDataReceivedListener.onError(dataProviderError); } e.printStackTrace(); } catch (IOException e) { if (onDataReceivedListener != null) { DataProviderError dataProviderError = new DataProviderError( DataProviderError.Type.NETWORK, 400, "IOException"); onDataReceivedListener.onError(dataProviderError); } e.printStackTrace(); } } public void getData(String path, String query, String color, int index, FilterGroupsStructure filterGroupsStructure, OnDataReceivedListener onDataReceivedListener) { Uri uri = buildWallhavenUrl(index, path, filterGroupsStructure); if (color != null) { uri = uri.buildUpon().appendQueryParameter("color", color).build(); } uri = uri.buildUpon().appendQueryParameter("q", query).build(); String url = uri.toString(); getData(url, onDataReceivedListener); } public interface OnDataReceivedListener { abstract void onData(String data, String url); abstract void onError(DataProviderError error); } }