/* * Copyright 2013 Dmitry Monakhov. * * 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 monakhv.android.samlib.tasks; import android.content.Context; import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.PowerManager; import android.widget.Toast; import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.j256.ormlite.android.apptools.OpenHelperManager; import monakhv.android.samlib.R; import monakhv.android.samlib.data.SettingsHelper; import monakhv.android.samlib.data.backup.AuthorStatePrefs; import monakhv.samlib.db.AuthorController; import monakhv.samlib.db.TagController; import monakhv.samlib.exception.SamlibInterruptException; import monakhv.samlib.exception.SamlibParseException; import monakhv.samlib.db.entity.Author; import monakhv.samlib.db.entity.SamLibConfig; import monakhv.samlib.db.entity.Tag; import monakhv.samlib.http.HttpClientController; import monakhv.samlib.log.Log; import javax.inject.Inject; /** * The task to load Author into data base. * Take the array of full Authors URL * <p/> * Special Task for use in restore by Backup manager * * @author Dmitry Monakhov */ public class AddAuthorRestore extends AsyncTask<String, Void, Boolean> { private static final String DEBUG_TAG = "AddAuthorRestore"; private Context context = null; private int numberOfAdded; private int doubleAdd = 0; private final SharedPreferences prefs; private final AuthorController mAuthorController; private final HttpClientController mHttpClientController; @Inject public AddAuthorRestore(SettingsHelper settingsHelper,HttpClientController httpClientController,AuthorController authorController) { mAuthorController = authorController; context = settingsHelper.getContext(); numberOfAdded = 0; mHttpClientController=httpClientController; prefs = context.getSharedPreferences(AuthorStatePrefs.PREF_NAME, 0); } @Override protected Boolean doInBackground(String... texts) { TagController tagController = mAuthorController.getTagController(); PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, DEBUG_TAG); wl.acquire(); for (String url : texts) { Author a = loadAuthor(mHttpClientController, mAuthorController, url); if (a != null) { String allTags = prefs.getString(url, ""); Log.d(DEBUG_TAG, "got tags: " + allTags); long idAuthor = mAuthorController.insert(a); a = mAuthorController.getById(idAuthor); ++numberOfAdded; String[] tags = allTags.split(","); List<Tag> Tags = new ArrayList<>(); for (String tag : tags) { if (!tag.equals("")) { Log.d(DEBUG_TAG, "insert tag: " + tag); Tag nTag = tagController.getByName(tag); if (nTag != null){ Tags.add(nTag); } } } mAuthorController.syncTags(a, Tags); } } wl.release(); return true; } // @Override protected void onPostExecute(Boolean result) { OpenHelperManager.releaseHelper(); int duration = Toast.LENGTH_SHORT; CharSequence msg = ""; if (numberOfAdded == 0) { if (doubleAdd != 0) {//double is here msg = context.getText(R.string.add_error_double); } else { msg = context.getText(R.string.add_error); } } else if (numberOfAdded == 1) { msg = context.getText(R.string.add_success); } else if (numberOfAdded > 1) { msg = context.getText(R.string.add_success_multi) + " " + numberOfAdded; } Toast toast = Toast.makeText(context, msg, duration); toast.show(); } private Author loadAuthor(HttpClientController http, AuthorController sql, String url) { Author a; String text; text = testURL(url); if (text == null) { Log.e(DEBUG_TAG, "URL syntax error: " + url); return null; } Author ta = sql.getByUrl(text); if (ta != null) { Log.i(DEBUG_TAG, "Ignore Double entries: " + text); ++doubleAdd; return null; } try { a = http.addAuthor(text, new Author()); } catch (IOException ex) { Log.e(DEBUG_TAG, "DownLoad Error for URL: " + text, ex); return null; } catch (SamlibParseException ex) { Log.e(DEBUG_TAG, "Author parsing Error: " + text, ex); return null; } catch (IllegalArgumentException ex) { Log.e(DEBUG_TAG, "URL Parsing exception: " + text, ex); return null; } catch (SamlibInterruptException ex) { Log.e(DEBUG_TAG, "loadAuthor: Interrupted " + text, ex); return null; } return a; } /** * URL syntax checkout * * @param url original URL * @return reduced URL without host prefix or NULL if the syntax is wrong */ private String testURL(String url) { Log.d(DEBUG_TAG, "Got text: " + url); return SamLibConfig.reduceUrl(url); } }