/* * 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.app.DownloadManager; import android.content.Context; import android.net.Uri; import android.os.Environment; import com.musenkishi.wally.dataprovider.models.DataProviderError; import com.musenkishi.wally.dataprovider.models.SaveImageRequest; import com.musenkishi.wally.dataprovider.util.Parser; import com.musenkishi.wally.models.ExceptionReporter; import com.musenkishi.wally.models.Filter; import com.musenkishi.wally.models.Image; import com.musenkishi.wally.models.ImagePage; import com.musenkishi.wally.models.filters.FilterGroupsStructure; import java.io.File; import java.util.ArrayList; import static com.musenkishi.wally.dataprovider.NetworkDataProvider.OnDataReceivedListener; /** * <strong>No threading shall take place here.</strong> * Use this class to get and set data. * Created by Musenkishi on 2014-02-28. */ public class DataProvider { private static final String TAG = "DataProvider"; private SharedPreferencesDataProvider sharedPreferencesDataProvider; private DownloadManager downloadManager; private Parser parser; public interface OnImagesReceivedListener { abstract void onImagesReceived(ArrayList<Image> images); abstract void onError(DataProviderError dataProviderError); } public interface OnPageReceivedListener { abstract void onPageReceived(ImagePage imagePage); abstract void onError(DataProviderError dataProviderError); } public DataProvider(Context context, ExceptionReporter.OnReportListener onReportListener) { sharedPreferencesDataProvider = new SharedPreferencesDataProvider(context); parser = new Parser(onReportListener); downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); } public SharedPreferencesDataProvider getSharedPreferencesDataProviderInstance(){ return sharedPreferencesDataProvider; } public DownloadManager getDownloadManager() { return downloadManager; } public void getImages(String path, String query, String color, int index, FilterGroupsStructure filterGroupsStructure, final OnImagesReceivedListener onImagesReceivedListener) { new NetworkDataProvider().getData(path, query, color, index, filterGroupsStructure, new OnDataReceivedListener() { @Override public void onData(String data, String url) { ArrayList<Image> images = parser.parseImages(data); if (onImagesReceivedListener != null) { onImagesReceivedListener.onImagesReceived(images); } } @Override public void onError(DataProviderError dataProviderError) { if (onImagesReceivedListener != null) { onImagesReceivedListener.onError(dataProviderError); } } }); } public ArrayList<Image> getImagesSync(String path, int index, FilterGroupsStructure filterGroupsStructure){ String data = new NetworkDataProvider().getDataSync(path, index, filterGroupsStructure); if (data != null) { return parser.parseImages(data); } else { return null; } } /** */ public void getImages(String path, int index, FilterGroupsStructure filterGroupsStructure, final OnImagesReceivedListener onImagesReceivedListener) { new NetworkDataProvider().getData(path, index, filterGroupsStructure, new OnDataReceivedListener() { @Override public void onData(String data, String url) { ArrayList<Image> images = parser.parseImages(data); if (onImagesReceivedListener != null) { if (!images.isEmpty()){ onImagesReceivedListener.onImagesReceived(images); } else { DataProviderError noImagesError = new DataProviderError(DataProviderError.Type.LOCAL, 204, "No images"); onImagesReceivedListener.onError(noImagesError); } } } @Override public void onError(DataProviderError dataProviderError) { if (onImagesReceivedListener != null) { onImagesReceivedListener.onError(dataProviderError); } } }); } public ImagePage getPageDataSync(String imagePageUrl){ String data = new NetworkDataProvider().getDataSync(imagePageUrl); return parser.parseImagePage(data, imagePageUrl); } public void getPageData(String imagePageUrl, final OnPageReceivedListener onPageReceivedListener) { new NetworkDataProvider().getData(imagePageUrl, new OnDataReceivedListener() { @Override public void onData(String data, String url) { ImagePage imagePage = parser.parseImagePage(data, url); if (onPageReceivedListener != null) { onPageReceivedListener.onPageReceived(imagePage); } } @Override public void onError(DataProviderError error) { if (onPageReceivedListener != null) { onPageReceivedListener.onError(error); } } }); } public void setTimeSpan(String tag, Filter<String, String> timespan){ sharedPreferencesDataProvider.setTimespan(tag, timespan); } public Filter<String, String> getTimespan(String tag){ return sharedPreferencesDataProvider.getTimespan(tag); } public void setBoards(String tag, String paramValue){ sharedPreferencesDataProvider.setBoards(tag, paramValue); } public String getBoards(String tag) { return sharedPreferencesDataProvider.getBoards(tag); } public void setPurity(String tag, String paramValue){ sharedPreferencesDataProvider.setPurity(tag, paramValue); } public String getPurity(String tag) { return sharedPreferencesDataProvider.getPurity(tag); } public void setAspectRatio(String tag, Filter<String, String> aspectRatio){ sharedPreferencesDataProvider.setAspectRatio(tag, aspectRatio); } public Filter<String, String> getAspectRatio(String tag) { return sharedPreferencesDataProvider.getAspectRatio(tag); } public void setResolutionOption(String tag, String paramValue){ sharedPreferencesDataProvider.setResolutionOption(tag, paramValue); } public String getResolutionOption(String tag) { return sharedPreferencesDataProvider.getResolutionOption(tag); } public void setResolution(String tag, Filter<String, String> resolution){ sharedPreferencesDataProvider.setResolution(tag, resolution); } public Filter<String, String> getResolution(String tag) { return sharedPreferencesDataProvider.getResolution(tag); } public SaveImageRequest downloadImageIfNeeded(Uri path, String filename, String notificationTitle){ FileManager fileManager = new FileManager(); if (fileManager.fileExists(filename)){ File file = fileManager.getFile(filename); Uri fileUri = Uri.fromFile(file); return new SaveImageRequest(fileUri); } else { String type = ".png"; //fallback to ".png" if (path.toString().lastIndexOf(".") != -1) { //-1 means there are no punctuations in the path type = path.toString().substring(path.toString().lastIndexOf(".")); } DownloadManager.Request request = new DownloadManager.Request(path); request.setTitle(notificationTitle); request.setVisibleInDownloadsUi(false); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE); request.allowScanningByMediaScanner(); request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, "/Wally/" + filename + type); return new SaveImageRequest(downloadManager.enqueue(request)); } } public Uri getFilePath(String filename) { FileManager fileManager = new FileManager(); if (fileManager.fileExists(filename)) { File file = fileManager.getFile(filename); Uri fileUri = Uri.fromFile(file); return fileUri; } return null; } }