com.javielinux.api.loaders.LoadMoreTweetDownLoader.java Source code

Java tutorial

Introduction

Here is the source code for com.javielinux.api.loaders.LoadMoreTweetDownLoader.java

Source

/*
 * Copyright 2012 Javier Prez Pacheco and Francisco Daz Rodriguez
 * TweetTopics 2.0
 * javielinux@gmail.com
 *
 * 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 com.javielinux.api.loaders;

import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.SQLException;
import android.preference.PreferenceManager;
import com.android.dataframework.DataFramework;
import com.javielinux.api.AsynchronousLoader;
import com.javielinux.api.request.LoadMoreTweetDownRequest;
import com.javielinux.api.response.BaseResponse;
import com.javielinux.api.response.ErrorResponse;
import com.javielinux.api.response.LoadMoreTweetDownResponse;
import com.javielinux.infos.InfoTweet;
import com.javielinux.tweettopics2.R;
import com.javielinux.twitter.ConnectionManager;
import com.javielinux.utils.TweetTopicsUtils;
import com.javielinux.utils.Utils;
import twitter4j.*;

import java.util.ArrayList;
import java.util.List;

public class LoadMoreTweetDownLoader extends AsynchronousLoader<BaseResponse> {

    private LoadMoreTweetDownRequest request;

    public LoadMoreTweetDownLoader(Context context, LoadMoreTweetDownRequest request) {
        super(context);
        this.request = request;
    }

    @Override
    public BaseResponse loadInBackground() {

        try {

            LoadMoreTweetDownResponse response = new LoadMoreTweetDownResponse();

            PreferenceManager.setDefaultValues(getContext(), R.xml.preferences, false);
            SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getContext());
            int maxDownloadTweet = Integer.parseInt(pref.getString("prf_n_max_download", "60"));
            if (maxDownloadTweet <= 0)
                maxDownloadTweet = 60;

            ConnectionManager.getInstance().open(getContext());

            Twitter twitter = ConnectionManager.getInstance().getTwitter(request.getUserId());

            Paging p = new Paging();
            p.setCount(maxDownloadTweet);
            p.setSinceId(request.getSinceId());
            p.setMaxId(request.getMaxId());

            ResponseList<Status> statii = null;

            try {
                statii = twitter.getHomeTimeline(p);
            } catch (OutOfMemoryError e) {
                e.printStackTrace();
            }

            boolean breakTimeline = false;

            if (statii != null && statii.size() >= maxDownloadTweet - 10) {
                p = new Paging(1, 10);
                p.setSinceId(request.getSinceId());
                p.setMaxId(statii.get(statii.size() - 1).getId());
                if (twitter.getHomeTimeline().size() > 0) {
                    breakTimeline = true;
                    response.setHasMoreTweets(true);
                }
            }

            if (statii != null) {

                if (statii.size() > 0) {

                    try {
                        DataFramework.getInstance().open(getContext(), Utils.packageName);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    List<InfoTweet> tweets = new ArrayList<InfoTweet>();
                    for (Status status : statii) {
                        tweets.add(new InfoTweet(status));
                    }
                    response.setTweets(tweets);

                    long nextId = 1;
                    Cursor c = DataFramework.getInstance().getCursor("tweets_user",
                            new String[] { DataFramework.KEY_ID }, null, null, null, null,
                            DataFramework.KEY_ID + " desc", "1");
                    if (!c.moveToFirst()) {
                        c.close();
                        nextId = 1;
                    } else {
                        long Id = c.getInt(0) + 1;
                        c.close();
                        nextId = Id;
                    }

                    try {
                        boolean isFirst = true;
                        for (int i = statii.size() - 1; i >= 0; i--) {
                            User u = statii.get(i).getUser();
                            if (u != null) {
                                ContentValues args = new ContentValues();
                                args.put(DataFramework.KEY_ID, "" + nextId);
                                args.put("type_id", TweetTopicsUtils.TWEET_TYPE_TIMELINE);
                                args.put("user_tt_id", "" + request.getUserId());
                                if (u.getProfileImageURL() != null) {
                                    args.put("url_avatar", u.getProfileImageURL().toString());
                                } else {
                                    args.put("url_avatar", "");
                                }
                                args.put("username", u.getScreenName());
                                args.put("fullname", u.getName());
                                args.put("user_id", "" + u.getId());
                                args.put("tweet_id", Utils.fillZeros("" + statii.get(i).getId()));
                                args.put("source", statii.get(i).getSource());
                                args.put("to_username", statii.get(i).getInReplyToScreenName());
                                args.put("to_user_id", "" + statii.get(i).getInReplyToUserId());
                                args.put("date", String.valueOf(statii.get(i).getCreatedAt().getTime()));
                                if (statii.get(i).getRetweetedStatus() != null) {
                                    args.put("is_retweet", 1);
                                    args.put("retweet_url_avatar", statii.get(i).getRetweetedStatus().getUser()
                                            .getProfileImageURL().toString());
                                    args.put("retweet_username",
                                            statii.get(i).getRetweetedStatus().getUser().getScreenName());
                                    args.put("retweet_source", statii.get(i).getRetweetedStatus().getSource());
                                    String t = Utils.getTwitLoger(statii.get(i).getRetweetedStatus());
                                    if (t.equals("")) {
                                        args.put("text", statii.get(i).getRetweetedStatus().getText());
                                        args.put("text_urls",
                                                Utils.getTextURLs(statii.get(i).getRetweetedStatus()));
                                    } else {
                                        args.put("text", t);
                                    }
                                    args.put("is_favorite", 0);
                                } else {
                                    String t = Utils.getTwitLoger(statii.get(i));
                                    if (t.equals("")) {
                                        args.put("text", statii.get(i).getText());
                                        args.put("text_urls", Utils.getTextURLs(statii.get(i)));
                                    } else {
                                        args.put("text", t);
                                    }

                                    if (statii.get(i).isFavorited()) {
                                        args.put("is_favorite", 1);
                                    }
                                }

                                if (statii.get(i).getGeoLocation() != null) {
                                    args.put("latitude", statii.get(i).getGeoLocation().getLatitude());
                                    args.put("longitude", statii.get(i).getGeoLocation().getLongitude());
                                }
                                args.put("reply_tweet_id", statii.get(i).getInReplyToStatusId());

                                if (breakTimeline && isFirst)
                                    args.put("has_more_tweets_down", 1);

                                DataFramework.getInstance().getDB().insert("tweets_user", null, args);

                                nextId++;

                                if (isFirst)
                                    isFirst = false;
                            }

                        }

                    } catch (SQLException e) {
                        e.printStackTrace();
                    }

                    DataFramework.getInstance().close();

                }

            }

            return response;

        } catch (TwitterException twitterException) {
            twitterException.printStackTrace();
            ErrorResponse errorResponse = new ErrorResponse();
            errorResponse.setError(twitterException, twitterException.getMessage());
            return errorResponse;
        } catch (Exception exception) {
            exception.printStackTrace();
            ErrorResponse errorResponse = new ErrorResponse();
            errorResponse.setError(exception, exception.getMessage());
            return errorResponse;
        }

    }

}