diff options
author | Andrew Dolgov <[email protected]> | 2015-06-10 16:58:38 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2015-06-10 16:58:38 +0300 |
commit | 4bbe22a3f7cc77a7f3af4dbd9ef78ddf5f87702e (patch) | |
tree | de85a69ef7d63cb50d2db72758ecda90a5585a84 | |
parent | 76a6973b869b212e4b31dc7510078eabbaa2664d (diff) |
add menu option to get lastread for current directory
-rw-r--r-- | org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java | 4 | ||||
-rw-r--r-- | org.fox.ttcomics/src/main/java/org/fox/ttcomics2/MainActivity.java | 118 | ||||
-rw-r--r-- | org.fox.ttcomics/src/main/java/org/fox/ttcomics2/SyncClient.java | 146 | ||||
-rw-r--r-- | org.fox.ttcomics/src/main/res/drawable-hdpi/ic_cloud_download.png | bin | 0 -> 766 bytes | |||
-rw-r--r-- | org.fox.ttcomics/src/main/res/drawable-xhdpi/ic_cloud_download.png | bin | 0 -> 1029 bytes | |||
-rw-r--r-- | org.fox.ttcomics/src/main/res/drawable-xxhdpi/ic_cloud_download.png | bin | 0 -> 1491 bytes | |||
-rw-r--r-- | org.fox.ttcomics/src/main/res/drawable-xxxhdpi/ic_cloud_download.png | bin | 0 -> 2052 bytes | |||
-rw-r--r-- | org.fox.ttcomics/src/main/res/menu/activity_main.xml | 10 | ||||
-rwxr-xr-x | org.fox.ttcomics/src/main/res/values/strings.xml | 1 |
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 Binary files differnew file mode 100644 index 0000000..6396630 --- /dev/null +++ b/org.fox.ttcomics/src/main/res/drawable-hdpi/ic_cloud_download.png 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 Binary files differnew file mode 100644 index 0000000..dab24e0 --- /dev/null +++ b/org.fox.ttcomics/src/main/res/drawable-xhdpi/ic_cloud_download.png 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 Binary files differnew file mode 100644 index 0000000..035fef0 --- /dev/null +++ b/org.fox.ttcomics/src/main/res/drawable-xxhdpi/ic_cloud_download.png 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 Binary files differnew file mode 100644 index 0000000..c5ad32a --- /dev/null +++ b/org.fox.ttcomics/src/main/res/drawable-xxxhdpi/ic_cloud_download.png 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 |