/** * Copyright (c) 2015 unfoldingWord * http://creativecommons.org/licenses/MIT/ * See LICENSE file for details. * Contributors: * PJ Fechner <pj@actsmedia.com> */ package runnables; import android.content.Context; import org.json.JSONException; import org.json.JSONObject; import model.UWDatabaseModel; import model.daoModels.AudioBook; import model.daoModels.Book; import model.daoModels.DaoSession; import model.parsers.MediaType; import services.UWUpdaterService; import tasks.ModelCreator; import tasks.ModelSaveOrUpdater; /** * Created by PJ Fechner on 6/17/15. * Runnable for updating a list of books */ public class UpdateAudioBookRunnable implements Runnable{ private static final String TAG = "UpdateBooksRunnable"; public static final String SOURCES_JSON_KEY = "src_list"; private JSONObject jsonModel; private UWUpdaterService updater; private Book parent; public UpdateAudioBookRunnable(JSONObject jsonModel, UWUpdaterService updater, Book parent) { this.jsonModel = jsonModel; this.updater = updater; this.parent = parent; } @Override public void run() { updateModel(jsonModel); } private void updateModel(final JSONObject jsonObject){ if(!jsonObject.keys().hasNext()){ updater.runnableFinished(); return; } new ModelCreator(new AudioBook(), parent, new ModelCreator.ModelCreationListener() { @Override public void modelWasCreated(UWDatabaseModel model) { if(model instanceof AudioBook) { UWDatabaseModel shouldContinueUpdate = new AudioBookSaveOrUpdater(updater.getApplicationContext()).start(model); if(shouldContinueUpdate != null){ AudioBook audioBook = (AudioBook) shouldContinueUpdate; parent.setAudioBookId(audioBook.getId()); parent.update(); parent.getAudioBook(); updateAudioChapters(jsonObject, audioBook); } updater.runnableFinished(parent.getVersion(), MediaType.MEDIA_TYPE_AUDIO); } } }).execute(jsonObject); } private void updateAudioChapters(JSONObject audioBook, AudioBook parent){ try { updater.addRunnable(new UpdateAudioChapterRunnable(audioBook.getJSONArray(SOURCES_JSON_KEY), updater, parent), parent.getBook().getVersion(), MediaType.MEDIA_TYPE_AUDIO); } catch (JSONException e){ e.printStackTrace(); } } private class AudioBookSaveOrUpdater extends ModelSaveOrUpdater { public AudioBookSaveOrUpdater(Context context) { super(context); } @Override protected UWDatabaseModel getExistingModel(String slug, DaoSession session) { return AudioBook.getModelForUniqueSlug(slug, session); } } }