package com.vaguehope.onosendai.update;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
import android.content.Context;
import android.database.Cursor;
import com.vaguehope.onosendai.config.Column;
import com.vaguehope.onosendai.config.Config;
import com.vaguehope.onosendai.config.Prefs;
import com.vaguehope.onosendai.images.HybridBitmapCache;
import com.vaguehope.onosendai.model.Meta;
import com.vaguehope.onosendai.model.MetaType;
import com.vaguehope.onosendai.model.Tweet;
import com.vaguehope.onosendai.provider.ProviderMgr;
import com.vaguehope.onosendai.storage.TweetCursorReader;
import com.vaguehope.onosendai.ui.pref.FetchingPrefFragment;
import com.vaguehope.onosendai.util.LogWrapper;
public class FetchPictureService extends AbstractBgFetch<Meta> {
private static final LogWrapper LOG = new LogWrapper("FPS");
public static void startServiceIfConfigured (final Context context, final Prefs prefs, final Collection<Column> columns, final boolean manual) {
AbstractBgFetch.startServiceIfConfigured(FetchPictureService.class, FetchingPrefFragment.KEY_PREFETCH_MEDIA, context, prefs, columns, manual);
}
public FetchPictureService () {
super(FetchPictureService.class, false, LOG);
}
@Override
protected void readUrls (final Cursor cursor, final TweetCursorReader reader, final Column col, final Config conf, final List<Meta> retMetas) {
final String avatarUrl = reader.readAvatar(cursor);
if (avatarUrl != null) retMetas.add(new Meta(MetaType.MEDIA, avatarUrl)); // Fake meta for type consistency.
final List<Meta> mediaMetas = getDb().getTweetMetasOfType(reader.readUid(cursor), MetaType.MEDIA);
if (mediaMetas != null) {
for (final Meta m : mediaMetas) {
if (m.getData() != null) retMetas.add(m);
}
}
}
@Override
protected void readUrls (final Tweet tweet, final Column col, final Config conf, final List<Meta> retMetas) {
if (tweet.getAvatarUrl() != null) retMetas.add(new Meta(MetaType.MEDIA, tweet.getAvatarUrl())); // Fake meta for type consistency.
for (final Meta meta : tweet.getMetas()) {
if (meta.getType() == MetaType.MEDIA && meta.getData() != null) {
retMetas.add(meta);
}
}
}
@Override
protected void makeJobs (final List<Meta> metas, final ProviderMgr provMgr, final Map<String, Callable<?>> jobs) {
final HybridBitmapCache hybridBitmapCache = new HybridBitmapCache(this, 0);
for (final Meta meta : metas) {
if (!hybridBitmapCache.touchFileIfExists(meta.getData())) {
jobs.put(meta.getData(), new FetchPicture(hybridBitmapCache, meta.getData()));
}
}
}
}