summaryrefslogtreecommitdiff
path: root/src/org/fox/ttrss/MainActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/fox/ttrss/MainActivity.java')
-rw-r--r--src/org/fox/ttrss/MainActivity.java163
1 files changed, 162 insertions, 1 deletions
diff --git a/src/org/fox/ttrss/MainActivity.java b/src/org/fox/ttrss/MainActivity.java
index 940d9fe1..1baf544a 100644
--- a/src/org/fox/ttrss/MainActivity.java
+++ b/src/org/fox/ttrss/MainActivity.java
@@ -1,29 +1,79 @@
package org.fox.ttrss;
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Timer;
+import java.util.TimerTask;
+
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.content.SharedPreferences;
-import android.os.AsyncTask;
+import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteStatement;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.provider.BaseColumns;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.reflect.TypeToken;
+
public class MainActivity extends Activity {
private final String TAG = this.getClass().getSimpleName();
private SharedPreferences m_prefs;
private String m_themeName = "";
private boolean m_feedsOpened = false;
+ protected String m_sessionId;
+ protected int m_offset = 0;
+ protected int m_limit = 100;
+
+ protected String getSessionId() {
+ return m_sessionId;
+ }
+
+ protected synchronized void setSessionId(String sessionId) {
+ m_sessionId = sessionId;
+
+ SharedPreferences.Editor editor = m_prefs.edit();
+ editor.putString("last_session_id", m_sessionId);
+ editor.commit();
+ }
+
+ private Timer m_timer;
+ private TimerTask m_updateTask = new TimerTask() {
+ @Override
+ public void run() {
+
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ downloadArticles();
+ }
+
+ });
+ }
+ };
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ // allow database to upgrade before we do anything else
+ DatabaseHelper dh = new DatabaseHelper(getApplicationContext());
+ SQLiteDatabase db = dh.getWritableDatabase();
+ db.execSQL("DELETE FROM feeds;");
+ db.execSQL("DELETE FROM articles;");
+ db.close();
+
m_prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
if (m_prefs.getString("theme", "THEME_DARK").equals("THEME_DARK")) {
@@ -34,8 +84,11 @@ public class MainActivity extends Activity {
m_themeName = m_prefs.getString("theme", "THEME_DARK");
+ m_sessionId = m_prefs.getString("last_session_id", null);
+
if (savedInstanceState != null) {
m_feedsOpened = savedInstanceState.getBoolean("feedsOpened");
+ m_sessionId = savedInstanceState.getString("sessionId");
}
setContentView(R.layout.main);
@@ -53,6 +106,8 @@ public class MainActivity extends Activity {
m_feedsOpened = true;
}
+ m_timer = new Timer("UpdateArticles");
+ m_timer.schedule(m_updateTask, 1000L, 5*1000L);
}
@Override
@@ -60,6 +115,7 @@ public class MainActivity extends Activity {
super.onSaveInstanceState(out);
out.putBoolean("feedsOpened", m_feedsOpened);
+ out.putString("sessionId", m_sessionId);
}
@Override
@@ -74,6 +130,14 @@ public class MainActivity extends Activity {
}
@Override
+ public void onDestroy() {
+ super.onDestroy();
+
+ m_timer.cancel();
+ m_timer = null;
+ }
+
+ @Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
@@ -92,4 +156,101 @@ public class MainActivity extends Activity {
}
}
+ private void downloadArticles() {
+ ApiRequest task = new ApiRequest(m_sessionId,
+ m_prefs.getString("ttrss_url", null),
+ m_prefs.getString("login", null),
+ m_prefs.getString("password", null)) {
+ @Override
+ protected void onPostExecute(JsonElement result) {
+ if (result != null && getAuthStatus() == STATUS_OK) {
+ try {
+ setSessionId(getSessionId());
+
+ JsonArray feeds_object = (JsonArray) result.getAsJsonArray();
+
+ Type listType = new TypeToken<List<Article>>() {}.getType();
+ List<Article> articles = m_gson.fromJson(feeds_object, listType);
+
+ DatabaseHelper dh = new DatabaseHelper(getApplicationContext());
+ SQLiteDatabase db = dh.getWritableDatabase();
+
+ /* db.execSQL("DELETE FROM articles"); */
+
+ SQLiteStatement stmtInsert = db.compileStatement("INSERT INTO articles " +
+ "("+BaseColumns._ID+", unread, marked, published, updated, is_updated, title, link, feed_id, tags, content) " +
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
+
+ SQLiteStatement stmtUpdate = db.compileStatement("UPDATE articles SET " +
+ "unread = ?, marked = ?, published = ?, updated = ?, is_updated = ?, title = ?, link = ?, feed_id = ?, " +
+ "tags = ?, content = ? WHERE " + BaseColumns._ID + " = ?");
+
+ int articlesFound = 0;
+
+ for (Article article : articles) {
+ //Log.d(TAG, "Processing article #" + article.id);
+
+ ++articlesFound;
+
+ Cursor c = db.query("articles", new String[] { BaseColumns._ID } , BaseColumns._ID + "=?",
+ new String[] { String.valueOf(article.id) }, null, null, null);
+
+ if (c.getCount() != 0) {
+ //Log.d(TAG, "article found");
+
+ } else {
+ //Log.d(TAG, "article not found");
+
+ stmtInsert.bindLong(1, article.id);
+ stmtInsert.bindLong(2, article.unread ? 1 : 0);
+ stmtInsert.bindLong(3, article.marked ? 1 : 0);
+ stmtInsert.bindLong(4, article.published ? 1 : 0);
+ stmtInsert.bindLong(5, article.updated);
+ stmtInsert.bindLong(6, article.is_updated ? 1 : 0);
+ stmtInsert.bindString(7, article.title);
+ stmtInsert.bindString(8, article.link);
+ stmtInsert.bindLong(9, article.feed_id);
+ stmtInsert.bindString(9, ""); // comma-separated tags
+ stmtInsert.bindString(10, article.content);
+ stmtInsert.execute();
+
+ }
+
+ c.close();
+ }
+
+ db.close();
+
+ Log.d(TAG, articlesFound + " articles processed");
+
+ if (articlesFound == m_limit && m_offset <= 300) {
+ m_offset += m_limit;
+ } else {
+ m_offset = 0;
+ m_timer.cancel();
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+ };
+
+ Log.d(TAG, "Requesting articles [offset=" + m_offset + "]");
+
+ task.execute(new HashMap<String,String>() {
+ {
+ put("sid", m_sessionId);
+ put("op", "getHeadlines");
+ put("feed_id", "-4");
+ put("show_content", "1");
+ put("limit", String.valueOf(m_limit));
+ put("offset", String.valueOf(m_offset));
+ put("view_mode", "unread");
+ }
+ });
+ }
+
} \ No newline at end of file