summaryrefslogtreecommitdiff
path: root/org.fox.ttcomics
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2015-06-10 16:58:38 +0300
committerAndrew Dolgov <[email protected]>2015-06-10 16:58:38 +0300
commit4bbe22a3f7cc77a7f3af4dbd9ef78ddf5f87702e (patch)
treede85a69ef7d63cb50d2db72758ecda90a5585a84 /org.fox.ttcomics
parent76a6973b869b212e4b31dc7510078eabbaa2664d (diff)
add menu option to get lastread for current directory
Diffstat (limited to 'org.fox.ttcomics')
-rw-r--r--org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java4
-rw-r--r--org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java118
-rw-r--r--org.fox.ttcomics/src/main/java/org/fox/ttcomics2/SyncClient.java146
-rw-r--r--org.fox.ttcomics/src/main/res/drawable-hdpi/ic_cloud_download.pngbin0 -> 766 bytes
-rw-r--r--org.fox.ttcomics/src/main/res/drawable-xhdpi/ic_cloud_download.pngbin0 -> 1029 bytes
-rw-r--r--org.fox.ttcomics/src/main/res/drawable-xxhdpi/ic_cloud_download.pngbin0 -> 1491 bytes
-rw-r--r--org.fox.ttcomics/src/main/res/drawable-xxxhdpi/ic_cloud_download.pngbin0 -> 2052 bytes
-rw-r--r--org.fox.ttcomics/src/main/res/menu/activity_main.xml10
-rwxr-xr-xorg.fox.ttcomics/src/main/res/values/strings.xml1
9 files changed, 215 insertions, 64 deletions
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java
index 9b3d4ac..c8be1ca 100644
--- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java
+++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java
@@ -83,6 +83,10 @@ public class ComicListFragment extends Fragment implements OnItemClickListener {
}
}
+ public String getBaseDirectory() {
+ return m_baseDirectory;
+ }
+
static class ComicsViewHolder {
TextView name;
TextView info;
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java
index cc58b6f..9ed10ff 100644
--- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java
+++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java
@@ -4,8 +4,10 @@ package org.fox.ttcomics2;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
+import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
@@ -15,6 +17,8 @@ import android.view.Menu;
import android.view.MenuItem;
import java.io.File;
+import java.io.IOException;
+import java.net.HttpURLConnection;
import it.neokree.materialtabs.MaterialTab;
import it.neokree.materialtabs.MaterialTabHost;
@@ -155,6 +159,33 @@ public class MainActivity extends CommonActivity implements MaterialTabListener
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
+ case R.id.menu_sync_directory:
+ if (true) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setMessage("Get synchronized last read page for listed files?")
+ .setCancelable(true)
+ .setPositiveButton("Continue", new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ ComicListFragment frag = (ComicListFragment) getSupportFragmentManager().findFragmentByTag(FRAG_COMICS_LIST);
+
+ if (frag != null && frag.isAdded()) {
+ String baseDir = frag.getBaseDirectory();
+
+ updateLastRead(baseDir);
+ }
+
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ dialog.cancel();
+ }
+ });
+ AlertDialog alert = builder.create();
+ alert.show();
+
+ }
+ return true;
case android.R.id.home:
onBackPressed();
return true;
@@ -165,7 +196,92 @@ public class MainActivity extends CommonActivity implements MaterialTabListener
}
}
- @Override
+ private void updateLastRead(String baseDir) {
+ final ProgressDialog progressDialog = new ProgressDialog(this);
+
+ progressDialog.setIndeterminate(false);
+ //progressDialog.setCancelable(false);
+ progressDialog.setMessage("Synchronizing...");
+ progressDialog.show();
+
+ AsyncTask<String, Integer, Integer> task = new AsyncTask<String, Integer, Integer>() {
+ @Override
+ protected Integer doInBackground(String... params) {
+ File dir = new File(params[0]);
+
+ if (dir.exists() && dir.isDirectory()) {
+ int fileCount = dir.listFiles().length;
+ int fileIndex = 0;
+
+ for (File file : dir.listFiles()) {
+ ++fileIndex;
+
+ if (file.isFile()) {
+ //Log.d(TAG, "F=" + file.getName());
+
+ HttpURLConnection conn = m_syncClient.doSyncHttpRequest("get", sha1(file.getName()));
+
+ try {
+ if (conn != null && conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
+ String result = m_syncClient.readHttpResponse(conn);
+
+ if (result != null) {
+ //Log.d(TAG, "GOT=" + result);
+
+ int position = Integer.valueOf(result);
+
+ if (position > getLastPosition(file.getAbsolutePath())) {
+ setLastPosition(file.getAbsolutePath(), position);
+ }
+ }
+
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ publishProgress(fileIndex, fileCount);
+
+ try {
+ Thread.sleep(250);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ protected void onProgressUpdate(Integer... progress) {
+ if (progressDialog != null) {
+ progressDialog.setProgress(progress[0]);
+ progressDialog.setMax(progress[1]);
+ progressDialog.setMessage("File " + progress[0] + " of " + progress[1]);
+ }
+ }
+
+ @Override
+ protected void onPostExecute(Integer result) {
+ if (progressDialog != null) {
+ progressDialog.dismiss();
+ }
+
+ ComicListFragment frag = (ComicListFragment) getSupportFragmentManager().findFragmentByTag(FRAG_COMICS_LIST);
+
+ if (frag != null && frag.isAdded()) {
+ frag.updateWithoutRescan();
+ }
+ }
+
+ };
+
+ task.execute(baseDir);
+ }
+
+ @Override
public void onComicArchiveSelected(String fileName) {
super.onComicArchiveSelected(fileName);
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/SyncClient.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/SyncClient.java
index 174ccc9..545dedf 100644
--- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/SyncClient.java
+++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/SyncClient.java
@@ -3,6 +3,7 @@ package org.fox.ttcomics2;
import android.os.AsyncTask;
import android.util.Log;
+import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
@@ -12,82 +13,40 @@ public class SyncClient {
public interface PositionReceivedListener {
void onPositionReceived(int position);
}
-
+
private class HttpTask extends AsyncTask<String, Integer, Boolean> {
protected String m_response = null;
protected int m_responseCode = -1;
@Override
protected Boolean doInBackground(String... params) {
-
- String requestStr = null;
- String op = params[0];
-
- if (op.equals("set")) {
- requestStr = String.format("op=set&owner=%1$s&hash=%2$s&position=%3$s", m_owner, params[1], params[2]);
- } else if (op.equals("get")) {
- requestStr = String.format("op=get&owner=%1$s&hash=%2$s", m_owner, params[1]);
- } else if (op.equals("clear")) {
- if (params.length > 1) {
- requestStr = String.format("op=clear&owner=%1$s&hash=%2$s", m_owner, params[1]);
- } else {
- requestStr = String.format("op=clear&owner=%1$s", m_owner);
- }
- }
- requestStr += "&version=2";
-
- Log.d(TAG, requestStr);
-
- if (requestStr == null) return false;
-
try {
- byte[] postData = requestStr.getBytes("UTF-8");
-
- URL url = new URL(SYNC_ENDPOINT);
-
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- conn.setDoInput(true);
- conn.setDoOutput(true);
- conn.setUseCaches(false);
- conn.setRequestMethod("POST");
-
- OutputStream out = conn.getOutputStream();
- out.write(postData);
- out.close();
-
- m_responseCode = conn.getResponseCode();
-
- if (m_responseCode == HttpURLConnection.HTTP_OK) {
- StringBuffer response = new StringBuffer();
- InputStreamReader in = new InputStreamReader(conn.getInputStream(), "UTF-8");
-
- char[] buf = new char[1024];
- int read = 0;
-
- while ((read = in.read(buf)) >= 0) {
- response.append(buf, 0, read);
- }
-
- //Log.d(TAG, "<<< " + response);
+ HttpURLConnection conn = doSyncHttpRequest(params);
+
+ if (conn != null) {
+ m_responseCode = conn.getResponseCode();
- m_response = response.toString();
+ if (m_responseCode == HttpURLConnection.HTTP_OK) {
+ m_response = readHttpResponse(conn);
- if (response.indexOf("ERROR") == -1) {
- return true;
+ //Log.d(TAG, "<<< " + m_response);
+
+ if (m_response != null && m_response.indexOf("ERROR") == -1) {
+ return true;
+ } else {
+ return false;
+ }
} else {
- return false;
+ Log.d(TAG, "HTTP error, code: " + m_responseCode);
}
- } else {
- Log.d(TAG, "HTTP error, code: " + m_responseCode);
- }
-
- conn.disconnect();
-
+
+ conn.disconnect();
+ }
} catch (Exception e) {
e.printStackTrace();
}
-
+
return false;
}
@@ -156,6 +115,71 @@ public class SyncClient {
}
}
+ public HttpURLConnection doSyncHttpRequest(String ... params) {
+ String requestStr = null;
+ String op = params[0];
+
+ if (op.equals("set")) {
+ requestStr = String.format("op=set&owner=%1$s&hash=%2$s&position=%3$s", m_owner, params[1], params[2]);
+ } else if (op.equals("get")) {
+ requestStr = String.format("op=get&owner=%1$s&hash=%2$s", m_owner, params[1]);
+ } else if (op.equals("clear")) {
+ if (params.length > 1) {
+ requestStr = String.format("op=clear&owner=%1$s&hash=%2$s", m_owner, params[1]);
+ } else {
+ requestStr = String.format("op=clear&owner=%1$s", m_owner);
+ }
+ }
+
+ requestStr += "&version=2";
+
+ Log.d(TAG, requestStr);
+
+ if (requestStr == null) return null;
+
+ try {
+ byte[] postData = requestStr.getBytes("UTF-8");
+
+ URL url = new URL(SYNC_ENDPOINT);
+
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+ conn.setDoInput(true);
+ conn.setDoOutput(true);
+ conn.setUseCaches(false);
+ conn.setRequestMethod("POST");
+
+ OutputStream out = conn.getOutputStream();
+ out.write(postData);
+ out.close();
+
+ return conn;
+
+ } catch (Exception e) {
+ }
+
+ return null;
+ }
+
+ public String readHttpResponse(HttpURLConnection conn) {
+ try {
+ StringBuffer response = new StringBuffer();
+ InputStreamReader in = new InputStreamReader(conn.getInputStream(), "UTF-8");
+
+ char[] buf = new char[1024];
+ int read = 0;
+
+ while ((read = in.read(buf)) >= 0) {
+ response.append(buf, 0, read);
+ }
+
+ //Log.d(TAG, "<<< " + response);
+
+ return response.toString();
+ } catch (IOException e) {
+ return null;
+ }
+ }
+
public boolean hasOwner() {
return m_owner != null;
}
diff --git a/org.fox.ttcomics/src/main/res/drawable-hdpi/ic_cloud_download.png b/org.fox.ttcomics/src/main/res/drawable-hdpi/ic_cloud_download.png
new file mode 100644
index 0000000..6396630
--- /dev/null
+++ b/org.fox.ttcomics/src/main/res/drawable-hdpi/ic_cloud_download.png
Binary files differ
diff --git a/org.fox.ttcomics/src/main/res/drawable-xhdpi/ic_cloud_download.png b/org.fox.ttcomics/src/main/res/drawable-xhdpi/ic_cloud_download.png
new file mode 100644
index 0000000..dab24e0
--- /dev/null
+++ b/org.fox.ttcomics/src/main/res/drawable-xhdpi/ic_cloud_download.png
Binary files differ
diff --git a/org.fox.ttcomics/src/main/res/drawable-xxhdpi/ic_cloud_download.png b/org.fox.ttcomics/src/main/res/drawable-xxhdpi/ic_cloud_download.png
new file mode 100644
index 0000000..035fef0
--- /dev/null
+++ b/org.fox.ttcomics/src/main/res/drawable-xxhdpi/ic_cloud_download.png
Binary files differ
diff --git a/org.fox.ttcomics/src/main/res/drawable-xxxhdpi/ic_cloud_download.png b/org.fox.ttcomics/src/main/res/drawable-xxxhdpi/ic_cloud_download.png
new file mode 100644
index 0000000..c5ad32a
--- /dev/null
+++ b/org.fox.ttcomics/src/main/res/drawable-xxxhdpi/ic_cloud_download.png
Binary files differ
diff --git a/org.fox.ttcomics/src/main/res/menu/activity_main.xml b/org.fox.ttcomics/src/main/res/menu/activity_main.xml
index 1143a47..2a6b3e1 100644
--- a/org.fox.ttcomics/src/main/res/menu/activity_main.xml
+++ b/org.fox.ttcomics/src/main/res/menu/activity_main.xml
@@ -5,11 +5,17 @@
android:title="@string/menu_rescan"
android:icon="@drawable/ic_refresh"
app:showAsAction="ifRoom" /> -->
-
+
+ <item android:id="@+id/menu_sync_directory"
+ android:title="@string/menu_sync_directory"
+ android:icon="@drawable/ic_cloud_download"
+ app:showAsAction=""
+ />
+
<item android:id="@+id/menu_settings"
android:title="@string/menu_settings"
android:icon="@drawable/ic_settings"
- app:showAsAction="ifRoom"
+ app:showAsAction=""
android:orderInCategory="100"
/>
</menu>
diff --git a/org.fox.ttcomics/src/main/res/values/strings.xml b/org.fox.ttcomics/src/main/res/values/strings.xml
index 1969d1e..34cc230 100755
--- a/org.fox.ttcomics/src/main/res/values/strings.xml
+++ b/org.fox.ttcomics/src/main/res/values/strings.xml
@@ -71,4 +71,5 @@
<string name="mark_as_read">Mark as read</string>
<string name="reset_progress">Reset progress</string>
<string name="menu_open">Open…</string>
+ <string name="menu_sync_directory">Synchronize directory</string>
</resources> \ No newline at end of file