/*
* Copyright (C) 2015 Federico Iosue (federico.iosue@gmail.com)
*
* 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 <http://www.gnu.org/licenses/>.
*/
package it.feio.android.omninotes.async.notes;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import it.feio.android.omninotes.OmniNotes;
import it.feio.android.omninotes.db.DbHelper;
import it.feio.android.omninotes.models.Attachment;
import it.feio.android.omninotes.models.Note;
import it.feio.android.omninotes.models.listeners.OnNoteSaved;
import it.feio.android.omninotes.utils.Constants;
import it.feio.android.omninotes.utils.ReminderHelper;
import it.feio.android.omninotes.utils.StorageHelper;
import it.feio.android.omninotes.utils.date.DateUtils;
import java.util.List;
public class SaveNoteTask extends AsyncTask<Note, Void, Note> {
private Context context;
private boolean updateLastModification = true;
private OnNoteSaved mOnNoteSaved;
public SaveNoteTask(boolean updateLastModification) {
this(null, updateLastModification);
}
public SaveNoteTask(OnNoteSaved mOnNoteSaved, boolean updateLastModification) {
super();
this.context = OmniNotes.getAppContext();
this.mOnNoteSaved = mOnNoteSaved;
this.updateLastModification = updateLastModification;
}
@Override
protected Note doInBackground(Note... params) {
Note note = params[0];
purgeRemovedAttachments(note);
boolean reminderMustBeSet = DateUtils.isFuture(note.getAlarm());
if (reminderMustBeSet) {
note.setReminderFired(false);
}
note = DbHelper.getInstance().updateNote(note, updateLastModification);
if (reminderMustBeSet) {
ReminderHelper.addReminder(context, note);
}
return note;
}
private void purgeRemovedAttachments(Note note) {
List<Attachment> deletedAttachments = note.getAttachmentsListOld();
for (Attachment attachment : note.getAttachmentsList()) {
if (attachment.getId() != null) {
// Workaround to prevent deleting attachments if instance is changed (app restart)
if (deletedAttachments.indexOf(attachment) == -1) {
attachment = getFixedAttachmentInstance(deletedAttachments, attachment);
}
deletedAttachments.remove(attachment);
}
}
// Remove from database deleted attachments
for (Attachment deletedAttachment : deletedAttachments) {
StorageHelper.delete(context, deletedAttachment.getUri().getPath());
Log.d(Constants.TAG, "Removed attachment " + deletedAttachment.getUri());
}
}
private Attachment getFixedAttachmentInstance(List<Attachment> deletedAttachments, Attachment attachment) {
for (Attachment deletedAttachment : deletedAttachments) {
if (deletedAttachment.getId() == attachment.getId()) return deletedAttachment;
}
return attachment;
}
@Override
protected void onPostExecute(Note note) {
super.onPostExecute(note);
if (this.mOnNoteSaved != null) {
mOnNoteSaved.onNoteSaved(note);
}
}
}