/* * Nextcloud Android client application * * @author Tobias Kaminsky * Copyright (C) 2019 Tobias Kaminsky * Copyright (C) 2019 Nextcloud GmbH * * This program 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. * * This program 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 this program. If not, see . */ package com.owncloud.android.ui.asynctasks; import android.os.AsyncTask; import com.nextcloud.client.account.User; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.files.SearchRemoteOperation; import com.owncloud.android.ui.activity.ToolbarActivity; import com.owncloud.android.ui.adapter.OCFileListAdapter; import com.owncloud.android.ui.fragment.ExtendedListFragment; import com.owncloud.android.ui.fragment.PhotoFragment; import java.lang.ref.WeakReference; public class PhotoSearchTask extends AsyncTask { private int columnCount; private User user; private WeakReference photoFragmentWeakReference; private SearchRemoteOperation searchRemoteOperation; private FileDataStorageManager storageManager; public PhotoSearchTask(int columnsCount, PhotoFragment photoFragment, User user, SearchRemoteOperation searchRemoteOperation, FileDataStorageManager storageManager) { this.columnCount = columnsCount; this.user = user; this.photoFragmentWeakReference = new WeakReference<>(photoFragment); this.searchRemoteOperation = searchRemoteOperation; this.storageManager = storageManager; } @Override protected void onPreExecute() { super.onPreExecute(); if (photoFragmentWeakReference.get() == null) { return; } PhotoFragment photoFragment = photoFragmentWeakReference.get(); photoFragment.setPhotoSearchQueryRunning(true); } @Override protected RemoteOperationResult doInBackground(Void... voids) { if (photoFragmentWeakReference.get() == null) { return new RemoteOperationResult(new Exception("Photo fragment is null")); } PhotoFragment photoFragment = photoFragmentWeakReference.get(); OCFileListAdapter adapter = photoFragment.getAdapter(); if (isCancelled()) { return new RemoteOperationResult(new Exception("Cancelled")); } else { int limit = 15 * columnCount; long timestamp = -1; if (adapter.getLastTimestamp() > 0) { timestamp = adapter.getLastTimestamp(); } searchRemoteOperation.setLimit(limit); searchRemoteOperation.setTimestamp(timestamp); if (photoFragment.getContext() != null) { return searchRemoteOperation.execute(user.toPlatformAccount(), photoFragment.getContext()); } else { return new RemoteOperationResult(new IllegalStateException("No context available")); } } } @Override protected void onPostExecute(RemoteOperationResult result) { if (photoFragmentWeakReference.get() != null) { PhotoFragment photoFragment = photoFragmentWeakReference.get(); if (result.isSuccess() && result.getData() != null && !isCancelled()) { if (result.getData() == null || result.getData().size() == 0) { photoFragment.setSearchDidNotFindNewPhotos(true); } else { OCFileListAdapter adapter = photoFragment.getAdapter(); adapter.setData(result.getData(), ExtendedListFragment.SearchType.PHOTO_SEARCH, storageManager, null, false); adapter.notifyDataSetChanged(); Log_OC.d(this, "Search: count: " + result.getData().size() + " total: " + adapter.getFiles().size()); } } final ToolbarActivity fileDisplayActivity = (ToolbarActivity) photoFragment.getActivity(); if (fileDisplayActivity != null) { fileDisplayActivity.setIndeterminate(false); } if (!result.isSuccess() && !isCancelled()) { photoFragment.setEmptyListMessage(ExtendedListFragment.SearchType.PHOTO_SEARCH); } photoFragment.setPhotoSearchQueryRunning(false); } } }