package fi.iki.murgo.irssinotifier;
import java.util.*;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
public class DataAccessTask extends AsyncTask<IrcMessage, Void, List<Channel>> {
private static final String TAG = DataAccessTask.class.getName();
private final Context context;
private Callback<List<Channel>> callback;
public DataAccessTask(Context context, Callback<List<Channel>> callback) {
this.context = context;
this.callback = callback;
}
@Override
protected List<Channel> doInBackground(IrcMessage... params) {
long start = System.nanoTime();
DataAccess da = new DataAccess(context);
if (params != null) {
for (IrcMessage im : params) {
da.handleMessage(im);
}
}
List<Channel> channels = da.getChannels();
HashMap<String, String> channelNames = new HashMap<String, String>(channels.size());
for (Channel ch : channels) {
channelNames.put(Long.toString(ch.getId()), ch.getName());
}
ArrayList<IrcMessage> feedMessagesProcessed = new ArrayList<IrcMessage>();
List<IrcMessage> feedMessages = da.getFeedMessages();
for (IrcMessage im : feedMessages) {
if (!im.getClearedFromFeed()) {
im.setChannel(channelNames.get(im.getChannel()));
feedMessagesProcessed.add(im);
}
}
Channel feedChannel = new Channel();
feedChannel.setName(IrssiNotifierActivity.FEED);
feedChannel.setMessages(feedMessagesProcessed);
channels.add(0, feedChannel);
double elapsed = (System.nanoTime() - start) / 1e6;
Log.d(TAG, "Data accessing done, elapsed ms: " + elapsed);
return channels;
}
@Override
protected void onPostExecute(List<Channel> result) {
if (callback != null)
callback.doStuff(result);
}
}