From e44ce18f618808d65cf239b8d9ef6145f8753ee3 Mon Sep 17 00:00:00 2001 From: zsakvo Date: Sat, 8 Dec 2018 10:55:41 +0800 Subject: [PATCH] try to merge duplicate chapters --- .../yueduhchelper/BooksCacheFragment.java | 150 +++--------------- .../yueduhchelper/TextExportActivity.java | 38 ++--- .../listener/SyncBooksListener.java | 2 +- .../zsakvo/yueduhchelper/task/SyncBooks.java | 89 +++++++---- app/src/main/res/xml/settings.xml | 10 +- 5 files changed, 102 insertions(+), 187 deletions(-) diff --git a/app/src/main/java/cc/zsakvo/yueduhchelper/BooksCacheFragment.java b/app/src/main/java/cc/zsakvo/yueduhchelper/BooksCacheFragment.java index 3a25b7d..9679e47 100644 --- a/app/src/main/java/cc/zsakvo/yueduhchelper/BooksCacheFragment.java +++ b/app/src/main/java/cc/zsakvo/yueduhchelper/BooksCacheFragment.java @@ -56,13 +56,12 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { getPreferenceManager().setSharedPreferencesMode(Context.MODE_PRIVATE); setPreferencesFromResource(R.xml.books_cache,null); - autoMerge = cha.getSharedPreferences("settings",MODE_PRIVATE).getBoolean("cs_auto_merge",true); } private void getBooksCache(){ myCachePath = cha.getSharedPreferences("settings",MODE_PRIVATE).getString("cachePath",Environment.getExternalStorageDirectory().getAbsolutePath()+ "/Android/data/com.gedoor.monkeybook/cache/book_cache/"); - new SyncBooks(this).execute(myCachePath); + new SyncBooks(this,autoMerge).execute(myCachePath); } @@ -75,7 +74,7 @@ private void writeFile(String content,String bookName){ @SuppressWarnings("ConstantConditions") @Override - public void showBooks(List list,Map bsm,Map bcm,Map bsnm) { + public void showBooks(List list,Map bsm,Map bcm,Map bsnm,int validNum) { PreferenceScreen p = getPreferenceScreen(); p.removeAll(); PreferenceCategory preferenceCategory = new PreferenceCategory(cha); @@ -85,19 +84,11 @@ public void showBooks(List list,Map bsm,Map { + startActivity(new Intent(cha,SettingsActivity.class)); + dialog.dismiss(); }) + .setNegativeButton("取消", (dialog, which) -> dialog.dismiss()) .setMessage("没有扫描到已缓存内容,是否需要自行去设置缓存路径?") .setCancelable(false) .create() @@ -108,131 +99,27 @@ public void onClick(DialogInterface dialog, int which) { p.addPreference(preferenceCategory); for (String name : list) { SimpleMenuPreference simpleMenuPreference = new SimpleMenuPreference(cha); - simpleMenuPreference.setTitle(name); simpleMenuPreference.setEntries(new CharSequence[]{"导出为TXT","导出为Epub"}); simpleMenuPreference.setEntryValues(new CharSequence[]{"0","1"}); - simpleMenuPreference.setSummary("总来源数目:"+bsnm.get(name)+"\n"+"总缓存章节数目:"+bcm.get(name)); - simpleMenuPreference.setKey(name+"-"+bsm.get(name)); + if (autoMerge){ + simpleMenuPreference.setTitle(name); + simpleMenuPreference.setSummary("总来源数目:"+bsnm.get(name)+"\n"+"总章节数:"+bcm.get(name)+"\n有效章节数:"+validNum); + simpleMenuPreference.setKey(name+"-"+bsm.get(name)); + }else { + simpleMenuPreference.setKey(name); + String source = name.split("-")[1]; + simpleMenuPreference.setSummary("总章节数:"+bcm.get(name)+"\n来源:"+source); + name = name.split("-")[0]; + simpleMenuPreference.setTitle(name); + } simpleMenuPreference.setOnPreferenceClickListener(this); simpleMenuPreference.setOnPreferenceChangeListener(this); p.addPreference(simpleMenuPreference); } - - - -// preferenceCategory.setTitle("扫描到的书籍"); -// p.addPreference(preferenceCategory); -// for (String key : map.keySet()) { -// Log.e(TAG, "showBooks: "+key ); -// if (!key.contains("-")) continue; -// String[] ba = key.split("-"); -// -// SimpleMenuPreference simpleMenuPreference = new SimpleMenuPreference(cha); -// -// simpleMenuPreference.setTitle(ba[0]); -// simpleMenuPreference.setEntries(new CharSequence[]{"导出为TXT"}); -// simpleMenuPreference.setEntryValues(new CharSequence[]{"0"}); -// simpleMenuPreference.setSummary("来源:"+ba[1]+"\n"+"缓存章节:"+map.get(key)); -// simpleMenuPreference.setKey(key); -// simpleMenuPreference.setOnPreferenceClickListener(this); -// simpleMenuPreference.setOnPreferenceChangeListener(this); -// p.addPreference(simpleMenuPreference); -// -// } } } -// @SuppressWarnings("ConstantConditions") -// @Override -// public void showBooks( Map map) { -// PreferenceScreen p = getPreferenceScreen(); -// p.removeAll(); -// PreferenceCategory preferenceCategory = new PreferenceCategory(cha); -// -// if (map== null||map.isEmpty()){ -// preferenceCategory.setTitle("未扫描到书籍缓存"); -// p.addPreference(preferenceCategory); -// AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(cha); -// alertDialogBuilder.setTitle("提示") -// .setPositiveButton("去设置", new DialogInterface.OnClickListener() { -// @Override -// public void onClick(DialogInterface dialog, int which) { -// startActivity(new Intent(cha,SettingsActivity.class)); -// dialog.dismiss(); -// } -// }) -// .setNegativeButton("取消", new DialogInterface.OnClickListener() { -// @Override -// public void onClick(DialogInterface dialog, int which) { -// dialog.dismiss(); -// } -// }) -// .setMessage("没有扫描到已缓存内容,是否需要自行去设置缓存路径?") -// .setCancelable(false) -// .create() -// .show(); -// Log.e(TAG, "showBooks: "+"null !" ); -// }else { -// books = new ArrayList<>(); -// bookMaps = new HashMap(); -// bookChaptersMaps = new HashMap(); -// for (String key : map.keySet()) { -// if (!key.contains("-")) continue; -// String[] ba = key.split("-"); -// if (!bookMaps.keySet().contains(ba[0])) { -// books.add(ba[0]); -// bookMaps.put(ba[0],ba[1]); -// bookChaptersMaps.put(ba[0],map.get(key)); -// }else { -// bookMaps.put(ba[0],bookMaps.get(ba[0])+","+ba[1]); -// bookChaptersMaps.put(ba[0],bookChaptersMaps.get(ba[0])+map.get(key)); -// } -// } -// -// -// preferenceCategory.setTitle("扫描到的书籍"); -// p.addPreference(preferenceCategory); -// for (String key : bookMaps.keySet()) { -// Log.e(TAG, "showBooks: "+key ); -// -// SimpleMenuPreference simpleMenuPreference = new SimpleMenuPreference(cha); -// key = key.split("-")[0]; -// simpleMenuPreference.setTitle(key); -// simpleMenuPreference.setEntries(new CharSequence[]{"导出为TXT","导出为Epub"}); -// simpleMenuPreference.setEntryValues(new CharSequence[]{"0","1"}); -// simpleMenuPreference.setSummary("来源:"+bookMaps.get(key)+"\n"+"缓存章节:"+bookChaptersMaps.get(key)); -// simpleMenuPreference.setKey(key); -// simpleMenuPreference.setOnPreferenceClickListener(this); -// simpleMenuPreference.setOnPreferenceChangeListener(this); -// p.addPreference(simpleMenuPreference); -// -// } -// -// -// -//// preferenceCategory.setTitle("扫描到的书籍"); -//// p.addPreference(preferenceCategory); -//// for (String key : map.keySet()) { -//// Log.e(TAG, "showBooks: "+key ); -//// if (!key.contains("-")) continue; -//// String[] ba = key.split("-"); -//// -//// SimpleMenuPreference simpleMenuPreference = new SimpleMenuPreference(cha); -//// -//// simpleMenuPreference.setTitle(ba[0]); -//// simpleMenuPreference.setEntries(new CharSequence[]{"导出为TXT"}); -//// simpleMenuPreference.setEntryValues(new CharSequence[]{"0"}); -//// simpleMenuPreference.setSummary("来源:"+ba[1]+"\n"+"缓存章节:"+map.get(key)); -//// simpleMenuPreference.setKey(key); -//// simpleMenuPreference.setOnPreferenceClickListener(this); -//// simpleMenuPreference.setOnPreferenceChangeListener(this); -//// p.addPreference(simpleMenuPreference); -//// -//// } -// } -// } - private String cleanSource(String s){ s = s.replaceAll(".+dstiejuan.+","丹书铁券"); return s; @@ -241,6 +128,8 @@ private String cleanSource(String s){ @Override public void onStart(){ super.onStart(); + getPreferenceScreen().removeAll(); + autoMerge = cha.getSharedPreferences("settings",MODE_PRIVATE).getBoolean("cs_auto_merge",true); getBooksCache(); } @@ -258,7 +147,6 @@ public void readCache(String content) { @Override public void writeFileResult(Boolean b) { progressDialog.dismiss(); - Snackbar snackbar; if (b){ cha.showSnackBar("导出成功!"); }else { diff --git a/app/src/main/java/cc/zsakvo/yueduhchelper/TextExportActivity.java b/app/src/main/java/cc/zsakvo/yueduhchelper/TextExportActivity.java index 97704ae..b820846 100644 --- a/app/src/main/java/cc/zsakvo/yueduhchelper/TextExportActivity.java +++ b/app/src/main/java/cc/zsakvo/yueduhchelper/TextExportActivity.java @@ -19,6 +19,7 @@ import android.os.Environment; import android.text.Editable; import android.text.TextWatcher; +import android.util.Log; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; @@ -61,12 +62,12 @@ protected void onCreate(Bundle savedInstanceState) { }else { StatusBarUtil.setColor(this,Color.parseColor("#ffffff")); } - toolbar = (Toolbar)findViewById(R.id.export_toolbar); + toolbar = findViewById(R.id.export_toolbar); toolbar.setTitle("导出TXT"); toolbar.setTitleTextColor(getResources().getColor(R.color.colorAccent)); setSupportActionBar(toolbar); - coordinatorLayout = (CoordinatorLayout)findViewById(R.id.export_coordinatorLayout); + coordinatorLayout = findViewById(R.id.export_coordinatorLayout); if(getSupportActionBar() != null) { @SuppressLint("PrivateResource") Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_material); @@ -75,12 +76,7 @@ protected void onCreate(Bundle savedInstanceState) { getSupportActionBar().setHomeAsUpIndicator(upArrow); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } - toolbar.setNavigationOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - finish(); - } - }); + toolbar.setNavigationOnClickListener(v -> finish()); Intent intent = getIntent(); bookName = intent.getStringExtra("bn"); @@ -103,7 +99,7 @@ public List getBookInfo(){ cacheFilePath.add(cachePath + "/" + bookName + "-" + s + "/"); } }else { - cacheFilePath.add(bookSource); + cacheFilePath.add(cachePath + "/" + bookName + "-" + bookSource + "/"); } return cacheFilePath; } @@ -130,23 +126,17 @@ private void showChooseChaptersDialog(){ editDialog.setView(layout); editDialog.setPositiveButton(getString(R.string.choose_ok) - , new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - String[] strs = edit.getText().toString().split("-"); - int a = Integer.parseInt(strs[0]); - int b = Integer.parseInt(strs[1]); - fragment.chooseChapters(a,b); - dialog.dismiss(); - } + , (dialog, which) -> { + String[] strs = edit.getText().toString().split("-"); + int a = Integer.parseInt(strs[0]); + int b = Integer.parseInt(strs[1]); + fragment.chooseChapters(a,b); + dialog.dismiss(); }) .setNegativeButton(getString(R.string.cancel), - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - edit.getText().clear(); - dialog.dismiss(); - } + (dialog, which) -> { + edit.getText().clear(); + dialog.dismiss(); }); editDialog.setCancelable(false); diff --git a/app/src/main/java/cc/zsakvo/yueduhchelper/listener/SyncBooksListener.java b/app/src/main/java/cc/zsakvo/yueduhchelper/listener/SyncBooksListener.java index 388682c..b459d1a 100644 --- a/app/src/main/java/cc/zsakvo/yueduhchelper/listener/SyncBooksListener.java +++ b/app/src/main/java/cc/zsakvo/yueduhchelper/listener/SyncBooksListener.java @@ -4,5 +4,5 @@ import java.util.Map; public interface SyncBooksListener { - void showBooks(List list,Map bsm,Map bcm,Map bsnm); + void showBooks(List list,Map bsm,Map bcm,Map bsnm,int validNum); } diff --git a/app/src/main/java/cc/zsakvo/yueduhchelper/task/SyncBooks.java b/app/src/main/java/cc/zsakvo/yueduhchelper/task/SyncBooks.java index 55f0f0d..8c6d836 100644 --- a/app/src/main/java/cc/zsakvo/yueduhchelper/task/SyncBooks.java +++ b/app/src/main/java/cc/zsakvo/yueduhchelper/task/SyncBooks.java @@ -17,48 +17,81 @@ public class SyncBooks extends AsyncTask { private SyncBooksListener sbl; + private Boolean autoMerge; - public SyncBooks(SyncBooksListener sbl){ + public SyncBooks(SyncBooksListener sbl,Boolean autoMerge){ this.sbl = sbl; + this.autoMerge = autoMerge; } private Map bookChapterNumMaps; private Map bookSourceNumMaps; private Map bookSourceMaps; - private List bookList; + private List bookSourceList; + private int validNum; @Override protected Void doInBackground(String... strings) { - bookList = new ArrayList<>(); - bookChapterNumMaps = new HashMap(); - bookSourceNumMaps = new HashMap(); - bookSourceMaps = new HashMap<>(); - String path = strings[0]; - File cacheFile = new File(path); - try { - for (File f : cacheFile.listFiles()) { - if (!f.isDirectory()) continue; - int cp = 0; - for (File file:f.listFiles()){ - if (!file.getName().contains("-")) continue; - cp++; + if (autoMerge){ + bookSourceList = new ArrayList<>(); + bookChapterNumMaps = new HashMap(); + bookSourceNumMaps = new HashMap(); + bookSourceMaps = new HashMap<>(); + List bookNames = new ArrayList<>(); + String path = strings[0]; + File cacheFile = new File(path); + try { + for (File f : cacheFile.listFiles()) { + if (!f.isDirectory()) continue; + int cp = 0; + for (File file:f.listFiles()){ + if (!file.getName().contains("-")) continue; + cp++; + String num = file.getName().split("-")[0]+"-"; + if (!bookNames.contains(num)) bookNames.add(num); + } + String name = f.getName(); + String source = name.split("-")[1]; + name = name.split("-")[0]; + if (!bookSourceMaps.keySet().contains(name)){ + bookSourceMaps.put(name,source); + bookChapterNumMaps.put(name,cp); + bookSourceNumMaps.put(name,1); + bookSourceList.add(name); + }else { + bookSourceMaps.put(name,bookSourceMaps.get(name)+","+source); + bookChapterNumMaps.put(name,bookChapterNumMaps.get(name)+cp); + bookSourceNumMaps.put(name,bookSourceNumMaps.get(name)+1); + } } - String name = f.getName(); - String source = name.split("-")[1]; - name = name.split("-")[0]; - if (!bookSourceMaps.keySet().contains(name)){ + validNum = bookNames.size(); + }catch (Exception e){ + e.printStackTrace(); + } + }else { + bookSourceMaps = new HashMap<>(); + bookSourceList = new ArrayList<>(); + bookChapterNumMaps = new HashMap(); + bookSourceNumMaps = new HashMap(); + String path = strings[0]; + File cacheFile = new File(path); + try { + for (File f : cacheFile.listFiles()) { + if (!f.isDirectory()) continue; + int cp = 0; + for (File file:f.listFiles()){ + if (!file.getName().contains("-")) continue; + cp++; + } + String name = f.getName(); + String source = name.split("-")[1]; bookSourceMaps.put(name,source); bookChapterNumMaps.put(name,cp); - bookSourceNumMaps.put(name,1); - bookList.add(name); - }else { - bookSourceMaps.put(name,bookSourceMaps.get(name)+","+source); - bookChapterNumMaps.put(name,bookChapterNumMaps.get(name)+cp); - bookSourceNumMaps.put(name,bookSourceNumMaps.get(name)+1); + bookSourceList.add(name); } + }catch (Exception e){ + e.printStackTrace(); } - }catch (Exception e){ - e.printStackTrace(); } return null; } @@ -66,6 +99,6 @@ protected Void doInBackground(String... strings) { @Override protected void onPostExecute( Void v){ super.onPostExecute (v); - sbl.showBooks(bookList,bookSourceMaps,bookChapterNumMaps,bookSourceNumMaps); + sbl.showBooks(bookSourceList,bookSourceMaps,bookChapterNumMaps,bookSourceNumMaps,validNum); } } diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index 8593551..5f8083f 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -1,6 +1,5 @@ - + + + + + +