Showing
29 changed files
with
361 additions
and
137 deletions
| @@ -25,11 +25,11 @@ | @@ -25,11 +25,11 @@ | ||
| 25 | <meta name="viewport" content="width=device-width, initial-scale=1"> | 25 | <meta name="viewport" content="width=device-width, initial-scale=1"> |
| 26 | <link rel='shortcut icon' href='favicon.ico' type='image/x-icon'> | 26 | <link rel='shortcut icon' href='favicon.ico' type='image/x-icon'> |
| 27 | <link rel="stylesheet" | 27 | <link rel="stylesheet" |
| 28 | - href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> | ||
| 29 | - <link rel="stylesheet" href="https://cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css"> | ||
| 30 | - <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> | ||
| 31 | - <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> | ||
| 32 | - <script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script> | 28 | + href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css"> |
| 29 | + <link rel="stylesheet" href="https://cdn.datatables.net/1.10.12/css/jquery.dataTables.css"> | ||
| 30 | + <script src="https://code.jquery.com/jquery-3.1.1.js"></script> | ||
| 31 | + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"></script> | ||
| 32 | + <script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.js"></script> | ||
| 33 | 33 | ||
| 34 | <link href="custom.css" rel="stylesheet"> | 34 | <link href="custom.css" rel="stylesheet"> |
| 35 | 35 |
| @@ -11,12 +11,14 @@ import com.gimi.common.cinema.model.QueryType; | @@ -11,12 +11,14 @@ import com.gimi.common.cinema.model.QueryType; | ||
| 11 | import com.gimi.common.cinema.model.SourceType; | 11 | import com.gimi.common.cinema.model.SourceType; |
| 12 | import com.gimi.common.cinema.utils.LogUtils; | 12 | import com.gimi.common.cinema.utils.LogUtils; |
| 13 | import com.xgimi.gimicinema.activity.CinemaConfig; | 13 | import com.xgimi.gimicinema.activity.CinemaConfig; |
| 14 | +import com.xgimi.gimicinema.application.FangTangApplication; | ||
| 14 | 15 | ||
| 15 | import java.io.File; | 16 | import java.io.File; |
| 16 | import java.util.ArrayList; | 17 | import java.util.ArrayList; |
| 17 | import java.util.List; | 18 | import java.util.List; |
| 18 | 19 | ||
| 19 | public class NewDBManager { | 20 | public class NewDBManager { |
| 21 | + private static NewDBManager mNewDBManager; | ||
| 20 | private SQLiteDatabase db; | 22 | private SQLiteDatabase db; |
| 21 | 23 | ||
| 22 | public NewDBManager(Context context) { | 24 | public NewDBManager(Context context) { |
| @@ -26,6 +28,18 @@ public class NewDBManager { | @@ -26,6 +28,18 @@ public class NewDBManager { | ||
| 26 | db = helper.getWritableDatabase(); | 28 | db = helper.getWritableDatabase(); |
| 27 | } | 29 | } |
| 28 | 30 | ||
| 31 | + public static NewDBManager getInstance() { | ||
| 32 | + if (mNewDBManager == null) { | ||
| 33 | + synchronized (NewDBManager.class) { | ||
| 34 | + if (mNewDBManager == null) { | ||
| 35 | + mNewDBManager = new NewDBManager(FangTangApplication.getInstance().getApplicationContext()); | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + } | ||
| 39 | + return mNewDBManager; | ||
| 40 | + } | ||
| 41 | + | ||
| 42 | + | ||
| 29 | /** | 43 | /** |
| 30 | * 利用事务批量添加本地数据 | 44 | * 利用事务批量添加本地数据 |
| 31 | * | 45 | * |
| @@ -770,11 +784,93 @@ public class NewDBManager { | @@ -770,11 +784,93 @@ public class NewDBManager { | ||
| 770 | return persons; | 784 | return persons; |
| 771 | } | 785 | } |
| 772 | 786 | ||
| 787 | + /** | ||
| 788 | + * 获取电影时长数据不正常的数据 | ||
| 789 | + * | ||
| 790 | + * @return 电影时长数据不正常的数据 | ||
| 791 | + * SELECT path md5 FROM movie_message WHERE movie_length like '%000%' or movie_length = '0' or movie_length isnull | ||
| 792 | + */ | ||
| 793 | + public ArrayList<LocalMovieMessage> checkWithoutDurationMovies() { | ||
| 794 | + ArrayList<LocalMovieMessage> withoutDurationMoviesList = new ArrayList<>(); | ||
| 795 | + Cursor cursorWithoutDurationMovies = db.query(NewDBHelper.TABLE_NAME, null, | ||
| 796 | + "movie_length like '%000%' or movie_length = '0' or movie_length isnull", | ||
| 797 | + null, null, null, null); | ||
| 798 | + if (cursorWithoutDurationMovies != null && cursorWithoutDurationMovies.getCount() > 0) { | ||
| 799 | + readCursor2List(withoutDurationMoviesList, cursorWithoutDurationMovies); | ||
| 800 | + } | ||
| 801 | + if (cursorWithoutDurationMovies != null) { | ||
| 802 | + cursorWithoutDurationMovies.close(); | ||
| 803 | + } | ||
| 804 | + return withoutDurationMoviesList; | ||
| 805 | + } | ||
| 806 | + | ||
| 807 | + /** | ||
| 808 | + * 更新电影时长 | ||
| 809 | + */ | ||
| 810 | + public boolean updateMovieDuration(String id, String duration) { | ||
| 811 | + //UPDATE movie_message SET movie_length = '126' WHERE id = '20529' | ||
| 812 | + boolean result = true; | ||
| 813 | + try { | ||
| 814 | + db.execSQL("UPDATE movie_message SET movie_length = ? WHERE id = ?", new String[]{duration, id}); | ||
| 815 | + LogUtils.i("updateMovieDurationDb", "id:" + id + ",duration:" + duration); | ||
| 816 | + } catch (Exception e) { | ||
| 817 | + result = false; | ||
| 818 | + } | ||
| 819 | +// db.beginTransaction(); | ||
| 820 | +// boolean result; | ||
| 821 | +// try { | ||
| 822 | +// ContentValues contentValues = new ContentValues(); | ||
| 823 | +// contentValues.put(NewDBHelper.MOVIE_LENGTH, duration); | ||
| 824 | +// db.update(NewDBHelper.TABLE_NAME, contentValues, NewDBHelper.ID + " = ?", new String[]{id}); | ||
| 825 | +// db.setTransactionSuccessful(); // changes get rolled back if this not called | ||
| 826 | +// result = true; | ||
| 827 | +// } catch (Exception e) { | ||
| 828 | +// e.printStackTrace(); | ||
| 829 | +// result = false; | ||
| 830 | +// } finally { | ||
| 831 | +// db.endTransaction(); // commit or rollback | ||
| 832 | +// } | ||
| 833 | + return result; | ||
| 834 | + } | ||
| 835 | + | ||
| 836 | + /** | ||
| 837 | + * 更新封面路径 | ||
| 838 | + * | ||
| 839 | + * @param path 封面Path | ||
| 840 | + * @param id 数据库主键 | ||
| 841 | + */ | ||
| 842 | + public void updatePosterPath(String path, String id) { | ||
| 843 | + String sql = "UPDATE " + NewDBHelper.TABLE_NAME + " SET " + NewDBHelper.POSTER_PATH + " = ? WHERE " + NewDBHelper.ID + " = ?"; | ||
| 844 | + try { | ||
| 845 | + db.execSQL(sql, new String[]{path, id}); | ||
| 846 | + } catch (Exception e) { | ||
| 847 | + e.printStackTrace(); | ||
| 848 | + } | ||
| 849 | + } | ||
| 850 | + | ||
| 851 | + /** | ||
| 852 | + * 获取没有封面的电影 | ||
| 853 | + */ | ||
| 854 | + public ArrayList<LocalMovieMessage> checkWithoutPosterMovies() { | ||
| 855 | + ArrayList<LocalMovieMessage> withoutPosterMoviesList = new ArrayList<>(); | ||
| 856 | + Cursor cursorWithoutPosterMovies = db.query(NewDBHelper.TABLE_NAME, null, | ||
| 857 | + NewDBHelper.POSTER_PATH + " is null", | ||
| 858 | + null, null, null, null); | ||
| 859 | + if (cursorWithoutPosterMovies != null && cursorWithoutPosterMovies.getCount() > 0) { | ||
| 860 | + readCursor2List(withoutPosterMoviesList, cursorWithoutPosterMovies); | ||
| 861 | + } | ||
| 862 | + if (cursorWithoutPosterMovies != null) { | ||
| 863 | + cursorWithoutPosterMovies.close(); | ||
| 864 | + } | ||
| 865 | + return withoutPosterMoviesList; | ||
| 866 | + } | ||
| 773 | 867 | ||
| 774 | /** | 868 | /** |
| 775 | * close database | 869 | * close database |
| 776 | */ | 870 | */ |
| 777 | public void closeDB() { | 871 | public void closeDB() { |
| 778 | db.close(); | 872 | db.close(); |
| 873 | + db = null; | ||
| 874 | + mNewDBManager = null; | ||
| 779 | } | 875 | } |
| 780 | } | 876 | } |
| @@ -37,7 +37,7 @@ public class DbUpdateUtils { | @@ -37,7 +37,7 @@ public class DbUpdateUtils { | ||
| 37 | */ | 37 | */ |
| 38 | public DbUpdateUtils(Context context) { | 38 | public DbUpdateUtils(Context context) { |
| 39 | this.context = context; | 39 | this.context = context; |
| 40 | - dbManager = new NewDBManager(context); | 40 | + dbManager = NewDBManager.getInstance(); |
| 41 | SharedPreferences sharedPreferences = context.getSharedPreferences(Constant.XML_NAME, Context.MODE_PRIVATE); | 41 | SharedPreferences sharedPreferences = context.getSharedPreferences(Constant.XML_NAME, Context.MODE_PRIVATE); |
| 42 | sambaMsg = Utils.getSambaMsg(sharedPreferences); | 42 | sambaMsg = Utils.getSambaMsg(sharedPreferences); |
| 43 | folder = sambaMsg.getFolder(); | 43 | folder = sambaMsg.getFolder(); |
| @@ -20,7 +20,6 @@ import android.content.SharedPreferences; | @@ -20,7 +20,6 @@ import android.content.SharedPreferences; | ||
| 20 | import android.os.Handler; | 20 | import android.os.Handler; |
| 21 | import android.os.Message; | 21 | import android.os.Message; |
| 22 | import android.widget.Toast; | 22 | import android.widget.Toast; |
| 23 | - | ||
| 24 | import com.gimi.common.cinema.model.Constant; | 23 | import com.gimi.common.cinema.model.Constant; |
| 25 | import com.gimi.common.cinema.model.SambaMsg; | 24 | import com.gimi.common.cinema.model.SambaMsg; |
| 26 | import com.xgimi.gimicinema.BuildConfig; | 25 | import com.xgimi.gimicinema.BuildConfig; |
| @@ -31,6 +30,7 @@ import java.io.FileInputStream; | @@ -31,6 +30,7 @@ import java.io.FileInputStream; | ||
| 31 | import java.io.FileOutputStream; | 30 | import java.io.FileOutputStream; |
| 32 | import java.io.InputStream; | 31 | import java.io.InputStream; |
| 33 | import java.lang.ref.WeakReference; | 32 | import java.lang.ref.WeakReference; |
| 33 | +import java.util.Random; | ||
| 34 | 34 | ||
| 35 | 35 | ||
| 36 | /** | 36 | /** |
| @@ -44,6 +44,7 @@ public class LocalDataUtils { | @@ -44,6 +44,7 @@ public class LocalDataUtils { | ||
| 44 | private DbUpdateManger dbUpdateManger; | 44 | private DbUpdateManger dbUpdateManger; |
| 45 | private SharedPreferences sharedPreferences; | 45 | private SharedPreferences sharedPreferences; |
| 46 | private SambaMsg sambaMsg; | 46 | private SambaMsg sambaMsg; |
| 47 | + private Handler handler = new Handler(); | ||
| 47 | 48 | ||
| 48 | public LocalDataUtils(Context context) { | 49 | public LocalDataUtils(Context context) { |
| 49 | this.context = context; | 50 | this.context = context; |
| @@ -81,7 +82,7 @@ public class LocalDataUtils { | @@ -81,7 +82,7 @@ public class LocalDataUtils { | ||
| 81 | @Override | 82 | @Override |
| 82 | public void handleMessage(Message msg) { | 83 | public void handleMessage(Message msg) { |
| 83 | super.handleMessage(msg); | 84 | super.handleMessage(msg); |
| 84 | - LocalDataUtils utils = activity.get(); | 85 | + final LocalDataUtils utils = activity.get(); |
| 85 | if (utils != null) { | 86 | if (utils != null) { |
| 86 | switch (msg.what) { | 87 | switch (msg.what) { |
| 87 | case Constant.DB_INIT_START: | 88 | case Constant.DB_INIT_START: |
| @@ -94,7 +95,15 @@ public class LocalDataUtils { | @@ -94,7 +95,15 @@ public class LocalDataUtils { | ||
| 94 | case Constant.DB_INIT_SUCCESS: | 95 | case Constant.DB_INIT_SUCCESS: |
| 95 | utils.toast("本地数据初始化成功" + msg.obj); | 96 | utils.toast("本地数据初始化成功" + msg.obj); |
| 96 | utils.dbUpdateManger.deleteMovieNotExits(); | 97 | utils.dbUpdateManger.deleteMovieNotExits(); |
| 97 | - utils.copyFile(); | 98 | + int delayMillis = ((new Random().nextInt(5) + 2) * 60 + new Random().nextInt(40)) * 1000; |
| 99 | + LogUtils.d("server-db", "copy out in " + delayMillis); | ||
| 100 | + utils.handler.postDelayed(new Runnable() { | ||
| 101 | + @Override | ||
| 102 | + public void run() { | ||
| 103 | + LogUtils.d("server-db", "do copy"); | ||
| 104 | + utils.copyFile(); | ||
| 105 | + } | ||
| 106 | + }, delayMillis); | ||
| 98 | break; | 107 | break; |
| 99 | case Constant.DB_INIT_FAILURE: | 108 | case Constant.DB_INIT_FAILURE: |
| 100 | utils.toast("本地数据初始化失败");//应该不可能 | 109 | utils.toast("本地数据初始化失败");//应该不可能 |
| @@ -4,6 +4,7 @@ import android.content.Context; | @@ -4,6 +4,7 @@ import android.content.Context; | ||
| 4 | import android.media.MediaPlayer; | 4 | import android.media.MediaPlayer; |
| 5 | import android.text.TextUtils; | 5 | import android.text.TextUtils; |
| 6 | import android.util.Log; | 6 | import android.util.Log; |
| 7 | + | ||
| 7 | import com.gimi.common.cinema.model.AsyncCallback; | 8 | import com.gimi.common.cinema.model.AsyncCallback; |
| 8 | import com.gimi.common.cinema.model.FolderItem; | 9 | import com.gimi.common.cinema.model.FolderItem; |
| 9 | import com.gimi.common.cinema.model.LocalMovieMessage; | 10 | import com.gimi.common.cinema.model.LocalMovieMessage; |
| @@ -14,7 +15,9 @@ import com.xgimi.gimicinema.BuildConfig; | @@ -14,7 +15,9 @@ import com.xgimi.gimicinema.BuildConfig; | ||
| 14 | import com.xgimi.gimicinema.R; | 15 | import com.xgimi.gimicinema.R; |
| 15 | import com.xgimi.gimicinema.activity.CinemaConfig; | 16 | import com.xgimi.gimicinema.activity.CinemaConfig; |
| 16 | 17 | ||
| 18 | +import java.io.BufferedReader; | ||
| 17 | import java.io.File; | 19 | import java.io.File; |
| 20 | +import java.io.FileReader; | ||
| 18 | import java.io.IOException; | 21 | import java.io.IOException; |
| 19 | import java.util.ArrayList; | 22 | import java.util.ArrayList; |
| 20 | import java.util.Arrays; | 23 | import java.util.Arrays; |
| @@ -190,7 +193,7 @@ public class LocalMovieScanUtils { | @@ -190,7 +193,7 @@ public class LocalMovieScanUtils { | ||
| 190 | * @return ArrayList<LocalMovieMessage> | 193 | * @return ArrayList<LocalMovieMessage> |
| 191 | */ | 194 | */ |
| 192 | ArrayList<LocalMovieMessage> getAllLocalMovie(String rootPath, String folder, AsyncCallback<Integer> callback) { | 195 | ArrayList<LocalMovieMessage> getAllLocalMovie(String rootPath, String folder, AsyncCallback<Integer> callback) { |
| 193 | - Log.d("scan-time", "start:" + System.currentTimeMillis()); | 196 | + LogUtils.i("scan-time", "start:" + System.currentTimeMillis()); |
| 194 | ArrayList<String> all = new ArrayList<>(); | 197 | ArrayList<String> all = new ArrayList<>(); |
| 195 | File file = new File(rootPath); | 198 | File file = new File(rootPath); |
| 196 | if (file.listFiles() != null) { | 199 | if (file.listFiles() != null) { |
| @@ -236,7 +239,7 @@ public class LocalMovieScanUtils { | @@ -236,7 +239,7 @@ public class LocalMovieScanUtils { | ||
| 236 | moviesItems.addAll(getAllType(type.getFolderPath(), callback)); | 239 | moviesItems.addAll(getAllType(type.getFolderPath(), callback)); |
| 237 | } | 240 | } |
| 238 | } | 241 | } |
| 239 | - Log.d("scan-time", " end:" + System.currentTimeMillis()); | 242 | + LogUtils.i("scan-time", " end:" + System.currentTimeMillis()); |
| 240 | return moviesItems; | 243 | return moviesItems; |
| 241 | } | 244 | } |
| 242 | 245 | ||
| @@ -260,8 +263,10 @@ public class LocalMovieScanUtils { | @@ -260,8 +263,10 @@ public class LocalMovieScanUtils { | ||
| 260 | * @return ArrayList<LocalMovieMessage> | 263 | * @return ArrayList<LocalMovieMessage> |
| 261 | */ | 264 | */ |
| 262 | private ArrayList<LocalMovieMessage> getAllType(String rootPath, AsyncCallback<Integer> callback) { | 265 | private ArrayList<LocalMovieMessage> getAllType(String rootPath, AsyncCallback<Integer> callback) { |
| 266 | + long inTime = System.currentTimeMillis(); | ||
| 263 | ArrayList<LocalMovieMessage> movies = new ArrayList<>(); | 267 | ArrayList<LocalMovieMessage> movies = new ArrayList<>(); |
| 264 | if (rootPath.contains("lost+found")) { | 268 | if (rootPath.contains("lost+found")) { |
| 269 | + LogUtils.i("scan-time-total", "scan " + rootPath + " size:0" + " total time:" + (System.currentTimeMillis() - inTime)); | ||
| 265 | return movies; | 270 | return movies; |
| 266 | } | 271 | } |
| 267 | if (callback != null) { | 272 | if (callback != null) { |
| @@ -272,11 +277,13 @@ public class LocalMovieScanUtils { | @@ -272,11 +277,13 @@ public class LocalMovieScanUtils { | ||
| 272 | String[] fileDirs = file.list(); | 277 | String[] fileDirs = file.list(); |
| 273 | //遍历 | 278 | //遍历 |
| 274 | if (fileDirs == null || fileDirs.length == 0) { | 279 | if (fileDirs == null || fileDirs.length == 0) { |
| 280 | + LogUtils.i("scan-time-total", "scan " + rootPath + " size:0" + " total time:" + (System.currentTimeMillis() - inTime)); | ||
| 275 | return movies; | 281 | return movies; |
| 276 | } | 282 | } |
| 277 | int length = fileDirs.length; | 283 | int length = fileDirs.length; |
| 278 | int coreCount = 4; | 284 | int coreCount = 4; |
| 279 | int poolCount = 9; | 285 | int poolCount = 9; |
| 286 | +// coreCount = fileDirs.length < 100 ? 1 : coreCount; | ||
| 280 | ThreadPoolExecutor myExecutor = new ThreadPoolExecutor(coreCount, poolCount, | 287 | ThreadPoolExecutor myExecutor = new ThreadPoolExecutor(coreCount, poolCount, |
| 281 | 200, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>()); | 288 | 200, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>()); |
| 282 | List<Future<ArrayList<LocalMovieMessage>>> results = new ArrayList<>(); | 289 | List<Future<ArrayList<LocalMovieMessage>>> results = new ArrayList<>(); |
| @@ -295,50 +302,7 @@ public class LocalMovieScanUtils { | @@ -295,50 +302,7 @@ public class LocalMovieScanUtils { | ||
| 295 | } | 302 | } |
| 296 | } | 303 | } |
| 297 | myExecutor.shutdown(); | 304 | myExecutor.shutdown(); |
| 298 | -// for (String fileDir : fileDirs) { | ||
| 299 | -// File curFiles = new File(rootPath + fileDir); | ||
| 300 | -// if (curFiles.isDirectory()) { | ||
| 301 | -// if (callback != null) { | ||
| 302 | -// callback.onMessage(fileDir); | ||
| 303 | -// } | ||
| 304 | -// String curPath = curFiles.getAbsoluteFile().toString(); | ||
| 305 | -// LocalMovieMessage moviesItem = new LocalMovieMessage(); | ||
| 306 | -// String name = NameFilterUtils.getName(fileDir).trim(); | ||
| 307 | -// moviesItem.setMovieName(name); | ||
| 308 | -// String allFirstSpell = PinyinUtil.getAllFirstSpell(name); | ||
| 309 | -// String newStr = allFirstSpell.replaceAll("[^\\w,]", ""); | ||
| 310 | -//// Log.d("lovely_pinyin", allFirstSpell + ":" + newStr); | ||
| 311 | -// moviesItem.setNamePinyin(newStr); | ||
| 312 | -// String media = getMedia(curPath + "/", mediaExtensions); | ||
| 313 | -// String poster; | ||
| 314 | -// poster = MovieMessageUtils.getLocalMoviePoster(curPath); | ||
| 315 | -// if (TextUtils.isEmpty(poster)) { | ||
| 316 | -// poster = getMediaPicture(curPath + "/", picExtensions); | ||
| 317 | -// } | ||
| 318 | -// if (!TextUtils.isEmpty(poster)) { | ||
| 319 | -// moviesItem.setPosterPath(poster); | ||
| 320 | -// } | ||
| 321 | -// if (!TextUtils.isEmpty(media)) { | ||
| 322 | -// File mFile = new File(media); | ||
| 323 | -//// long length = mFile.length(); | ||
| 324 | -// moviesItem.setMd5(MD5Utils.stringMD5(FileHashUtils.getFileHash(media))); | ||
| 325 | -// //read douban id and douban msg,至于name id 信息另外做,没有必要每次更新时都去添加 | ||
| 326 | -// try { | ||
| 327 | -// setDoubanMsg(curPath, moviesItem); | ||
| 328 | -// } catch (Exception e) { | ||
| 329 | -// Log.e("otherError", media); | ||
| 330 | -// e.printStackTrace(); | ||
| 331 | -// } | ||
| 332 | -// moviesItem.setType(fileDir); | ||
| 333 | -// moviesItem.setPlayPath(media); | ||
| 334 | -// String movieDlTime = String.valueOf(mFile.lastModified()); | ||
| 335 | -// moviesItem.setMovieLength(movieDlTime); | ||
| 336 | -// moviesItem.setDlTime(movieDlTime); | ||
| 337 | -// moviesItem.setCount(MovieMessageUtils.getPlayCount(curPath)); | ||
| 338 | -// movies.add(moviesItem); | ||
| 339 | -// } | ||
| 340 | -// } | ||
| 341 | -// } | 305 | + LogUtils.i("scan-time-total", "scan " + rootPath + " size:" + movies.size() + " total time:" + (System.currentTimeMillis() - inTime)); |
| 342 | return movies; | 306 | return movies; |
| 343 | } | 307 | } |
| 344 | 308 | ||
| @@ -376,7 +340,8 @@ public class LocalMovieScanUtils { | @@ -376,7 +340,8 @@ public class LocalMovieScanUtils { | ||
| 376 | if (!TextUtils.isEmpty(media)) { | 340 | if (!TextUtils.isEmpty(media)) { |
| 377 | File mFile = new File(media); | 341 | File mFile = new File(media); |
| 378 | // long length = mFile.length(); | 342 | // long length = mFile.length(); |
| 379 | - moviesItem.setMd5(MD5Utils.stringMD5(FileHashUtils.getFileHash(media))); | 343 | + String md5 = MD5Utils.stringMD5(FileHashUtils.getFileHash(media)); |
| 344 | + moviesItem.setMd5(md5); | ||
| 380 | //read douban id and douban msg,至于name id 信息另外做,没有必要每次更新时都去添加 | 345 | //read douban id and douban msg,至于name id 信息另外做,没有必要每次更新时都去添加 |
| 381 | try { | 346 | try { |
| 382 | setDoubanMsg(curPath, moviesItem); | 347 | setDoubanMsg(curPath, moviesItem); |
| @@ -386,23 +351,52 @@ public class LocalMovieScanUtils { | @@ -386,23 +351,52 @@ public class LocalMovieScanUtils { | ||
| 386 | } | 351 | } |
| 387 | moviesItem.setType(fileDir); | 352 | moviesItem.setType(fileDir); |
| 388 | moviesItem.setPlayPath(media); | 353 | moviesItem.setPlayPath(media); |
| 354 | + String movieLength = readMovieLengthFile(curPath, md5); | ||
| 355 | + if (movieLength != null) { | ||
| 356 | + moviesItem.setMovieLength(movieLength); | ||
| 357 | + } | ||
| 389 | String movieDlTime = String.valueOf(mFile.lastModified()); | 358 | String movieDlTime = String.valueOf(mFile.lastModified()); |
| 390 | - moviesItem.setMovieLength(movieDlTime); | ||
| 391 | moviesItem.setDlTime(movieDlTime); | 359 | moviesItem.setDlTime(movieDlTime); |
| 392 | moviesItem.setCount(MovieMessageUtils.getPlayCount(curPath)); | 360 | moviesItem.setCount(MovieMessageUtils.getPlayCount(curPath)); |
| 393 | movies.add(moviesItem); | 361 | movies.add(moviesItem); |
| 394 | - curPath = null; | ||
| 395 | - name = null; | ||
| 396 | - allFirstSpell = null; | ||
| 397 | - newStr = null; | ||
| 398 | - media = null; | ||
| 399 | - poster = null; | ||
| 400 | - movieDlTime = null; | ||
| 401 | } | 362 | } |
| 402 | } | 363 | } |
| 403 | } | 364 | } |
| 404 | return movies; | 365 | return movies; |
| 405 | } | 366 | } |
| 367 | + | ||
| 368 | + /** | ||
| 369 | + * 读取时长文件值 | ||
| 370 | + * | ||
| 371 | + * @param playPath 路径 | ||
| 372 | + * @param md5 电影MD5 | ||
| 373 | + * @return 时长 | ||
| 374 | + */ | ||
| 375 | + private String readMovieLengthFile(String playPath, String md5) { | ||
| 376 | + | ||
| 377 | + File timeFile = new File(playPath, md5); | ||
| 378 | + | ||
| 379 | + String timeLength = null; | ||
| 380 | + if (SambaFileCharge.fileExist(timeFile.getPath())) { | ||
| 381 | + BufferedReader reader = null; | ||
| 382 | + try { | ||
| 383 | + reader = new BufferedReader(new FileReader(timeFile)); | ||
| 384 | + timeLength = reader.readLine(); | ||
| 385 | + } catch (IOException e) { | ||
| 386 | + e.printStackTrace(); | ||
| 387 | + } finally { | ||
| 388 | + if (reader != null) { | ||
| 389 | + try { | ||
| 390 | + reader.close(); | ||
| 391 | + } catch (IOException e) { | ||
| 392 | + e.printStackTrace(); | ||
| 393 | + } | ||
| 394 | + } | ||
| 395 | + | ||
| 396 | + } | ||
| 397 | + } | ||
| 398 | + return timeLength; | ||
| 399 | + } | ||
| 406 | } | 400 | } |
| 407 | 401 | ||
| 408 | /** | 402 | /** |
| 1 | package com.gimi.common.cinema.utils; | 1 | package com.gimi.common.cinema.utils; |
| 2 | 2 | ||
| 3 | -import com.wugian.ping.PinyinException; | ||
| 4 | -import com.wugian.ping.PinyinHelper; | 3 | +import android.text.TextUtils; |
| 4 | +import com.wugian.ping.PinYinHelper1; | ||
| 5 | 5 | ||
| 6 | /** | 6 | /** |
| 7 | * 拼音工具类 | 7 | * 拼音工具类 |
| @@ -65,14 +65,19 @@ public class PinyinUtil { | @@ -65,14 +65,19 @@ public class PinyinUtil { | ||
| 65 | // e.printStackTrace(); | 65 | // e.printStackTrace(); |
| 66 | // } | 66 | // } |
| 67 | // return pybf.toString().replaceAll("\\W", "").trim(); | 67 | // return pybf.toString().replaceAll("\\W", "").trim(); |
| 68 | - String shortPinyin = ""; | ||
| 69 | - try { | ||
| 70 | - shortPinyin = PinyinHelper.getShortPinyin(chinese).replaceAll(" ", ""); | ||
| 71 | - } catch (PinyinException e) { | ||
| 72 | - e.printStackTrace(); | ||
| 73 | - } | 68 | +// String shortPinyin = ""; |
| 69 | +// try { | ||
| 70 | +// shortPinyin = PinyinHelper.getShortPinyin(chinese).replaceAll(" ", ""); | ||
| 71 | +// } catch (PinyinException e) { | ||
| 72 | +// e.printStackTrace(); | ||
| 73 | +// } | ||
| 74 | 74 | ||
| 75 | - return shortPinyin; | 75 | +// return shortPinyin; |
| 76 | + if (TextUtils.isEmpty(chinese)) { | ||
| 77 | + return ""; | ||
| 78 | + } | ||
| 79 | + String[] firstHead = PinYinHelper1.getInstance().getFirstHead(chinese); | ||
| 80 | + return firstHead.length > 0 ? firstHead[0] : ""; | ||
| 76 | } | 81 | } |
| 77 | 82 | ||
| 78 | 83 | ||
| @@ -83,9 +88,22 @@ public class PinyinUtil { | @@ -83,9 +88,22 @@ public class PinyinUtil { | ||
| 83 | * @return 汉语拼音首字母 | 88 | * @return 汉语拼音首字母 |
| 84 | */ | 89 | */ |
| 85 | public static String getAllFirstSpell(String chinese) { | 90 | public static String getAllFirstSpell(String chinese) { |
| 86 | - String shortPinyin = ""; | ||
| 87 | - shortPinyin = PinyinHelper.getAllShortPinyin(chinese).replaceAll(" ", ""); | ||
| 88 | - return shortPinyin; | 91 | + return join(PinYinHelper1.getInstance().getFirstHead(chinese), ","); |
| 92 | +// final String firstHead = PinYinHelper1.getInstance().getFirstHead(chinese); | ||
| 93 | +// String shortPinyin = ""; | ||
| 94 | +// shortPinyin = PinyinHelper.getAllShortPinyin(chinese).replaceAll(" ", ""); | ||
| 95 | +// return shortPinyin; | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + private static String join(String[] arr, String flag) { | ||
| 99 | + StringBuffer strBuff = new StringBuffer(); | ||
| 100 | + | ||
| 101 | + for (int i = 0, len = arr.length; i < len; i++) { | ||
| 102 | + strBuff.append(String.valueOf(arr[i])); | ||
| 103 | + if (i < len - 1) strBuff.append(flag); | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + return strBuff.toString(); | ||
| 89 | } | 107 | } |
| 90 | 108 | ||
| 91 | // /** | 109 | // /** |
| @@ -31,6 +31,7 @@ import com.gimi.common.cinema.utils.ActivityCollector; | @@ -31,6 +31,7 @@ import com.gimi.common.cinema.utils.ActivityCollector; | ||
| 31 | import com.gimi.common.cinema.utils.CToast; | 31 | import com.gimi.common.cinema.utils.CToast; |
| 32 | import com.gimi.common.cinema.utils.FileHashUtils; | 32 | import com.gimi.common.cinema.utils.FileHashUtils; |
| 33 | import com.gimi.common.cinema.utils.LogUtils; | 33 | import com.gimi.common.cinema.utils.LogUtils; |
| 34 | +import com.gimi.common.cinema.utils.MD5Utils; | ||
| 34 | import com.gimi.common.cinema.utils.OpenMMUtils; | 35 | import com.gimi.common.cinema.utils.OpenMMUtils; |
| 35 | import com.gimi.common.cinema.utils.ResUtils; | 36 | import com.gimi.common.cinema.utils.ResUtils; |
| 36 | import com.gimi.common.cinema.utils.SambaFileCharge; | 37 | import com.gimi.common.cinema.utils.SambaFileCharge; |
| @@ -238,12 +239,14 @@ public class SmartControlService extends BaseService implements EventListener<St | @@ -238,12 +239,14 @@ public class SmartControlService extends BaseService implements EventListener<St | ||
| 238 | public void writeFailure(String error) { | 239 | public void writeFailure(String error) { |
| 239 | LogUtils.i("room-info", "open failure," + error); | 240 | LogUtils.i("room-info", "open failure," + error); |
| 240 | bleBroadcastReceiver.setResponseObj(null); | 241 | bleBroadcastReceiver.setResponseObj(null); |
| 241 | - Toast.makeText(SmartControlService.this, "开门失败," + error, Toast.LENGTH_SHORT).show(); | 242 | + x Toast.makeText(SmartControlService.this, "开门失败," + error, Toast.LENGTH_SHORT).show(); |
| 242 | } | 243 | } |
| 243 | 244 | ||
| 244 | }); | 245 | }); |
| 246 | + | ||
| 245 | if (!TextUtils.isEmpty(lockMac)) { | 247 | if (!TextUtils.isEmpty(lockMac)) { |
| 246 | String openCMD = "Open the door"; | 248 | String openCMD = "Open the door"; |
| 249 | + | ||
| 247 | GREENBLE.send(this, lockMac, openCMD.getBytes()); | 250 | GREENBLE.send(this, lockMac, openCMD.getBytes()); |
| 248 | } /*else { | 251 | } /*else { |
| 249 | if (needReport) { | 252 | if (needReport) { |
| @@ -326,7 +329,7 @@ public class SmartControlService extends BaseService implements EventListener<St | @@ -326,7 +329,7 @@ public class SmartControlService extends BaseService implements EventListener<St | ||
| 326 | Log.e("room-info", "movie not exits"); | 329 | Log.e("room-info", "movie not exits"); |
| 327 | break; | 330 | break; |
| 328 | } | 331 | } |
| 329 | - if (!roomStatusInfo.getData().getFilm_hash().equals(FileHashUtils.getFileHash(currentPlayUrl))) { | 332 | + if (!roomStatusInfo.getData().getFilm_hash().equals(MD5Utils.stringMD5(FileHashUtils.getFileHash(currentPlayUrl)))) { |
| 330 | //当前播放电影信息不正确正在重新拉取 | 333 | //当前播放电影信息不正确正在重新拉取 |
| 331 | show("当前播放电影信息不正确正在重新拉取"); | 334 | show("当前播放电影信息不正确正在重新拉取"); |
| 332 | try { | 335 | try { |
| @@ -24,15 +24,15 @@ import com.gimi.common.cinema.utils.Utils; | @@ -24,15 +24,15 @@ import com.gimi.common.cinema.utils.Utils; | ||
| 24 | import com.google.gson.Gson; | 24 | import com.google.gson.Gson; |
| 25 | import com.google.gson.JsonSyntaxException; | 25 | import com.google.gson.JsonSyntaxException; |
| 26 | import com.qnbar.smc.model.Lights; | 26 | import com.qnbar.smc.model.Lights; |
| 27 | -import com.qnbar.smc.socketProtocol.MainRequest; | ||
| 28 | -import com.qnbar.smc.socketProtocol.MainResponse; | ||
| 29 | -import com.qnbar.smc.socketProtocol.fromServer.EquipmentControl; | ||
| 30 | -import com.qnbar.smc.socketProtocol.fromServer.OpenDoor; | ||
| 31 | -import com.qnbar.smc.socketProtocol.fromServer.ReportEquStatus; | ||
| 32 | -import com.qnbar.smc.socketProtocol.fromServer.VerifyCode; | ||
| 33 | -import com.qnbar.smc.socketProtocol.toServer.EquipmentStatus; | ||
| 34 | -import com.qnbar.smc.socketProtocol.toServer.Heartbeat; | ||
| 35 | -import com.qnbar.smc.socketProtocol.toServer.SocketSendMsg; | 27 | +import com.qnbar.smc.socket_protocol.MainRequest; |
| 28 | +import com.qnbar.smc.socket_protocol.MainResponse; | ||
| 29 | +import com.qnbar.smc.socket_protocol.from_server.EquipmentControl; | ||
| 30 | +import com.qnbar.smc.socket_protocol.from_server.OpenDoor; | ||
| 31 | +import com.qnbar.smc.socket_protocol.from_server.ReportEquStatus; | ||
| 32 | +import com.qnbar.smc.socket_protocol.from_server.VerifyCode; | ||
| 33 | +import com.qnbar.smc.socket_protocol.to_server.EquipmentStatus; | ||
| 34 | +import com.qnbar.smc.socket_protocol.to_server.Heartbeat; | ||
| 35 | +import com.qnbar.smc.socket_protocol.to_server.SocketSendMsg; | ||
| 36 | import com.qnbar.smc.utils.LightOperationUtils; | 36 | import com.qnbar.smc.utils.LightOperationUtils; |
| 37 | import com.telink.bluetooth.light.ConnectionStatus; | 37 | import com.telink.bluetooth.light.ConnectionStatus; |
| 38 | import com.telink.bluetooth.light.DeviceInfo; | 38 | import com.telink.bluetooth.light.DeviceInfo; |
| 1 | -package com.qnbar.smc.socketProtocol.toServer; | 1 | +package com.qnbar.smc.socket_protocol.to_server; |
| 2 | 2 | ||
| 3 | -import com.qnbar.smc.socketProtocol.DataInfo; | 3 | +import com.qnbar.smc.socket_protocol.DataInfo; |
| 4 | 4 | ||
| 5 | public class Heartbeat extends DataInfo { | 5 | public class Heartbeat extends DataInfo { |
| 6 | private int lightStatus; | 6 | private int lightStatus; |
| @@ -94,6 +94,9 @@ public class AddCActivity extends Activity { | @@ -94,6 +94,9 @@ public class AddCActivity extends Activity { | ||
| 94 | String rootPath = sambaMsg.getLocalPath(); | 94 | String rootPath = sambaMsg.getLocalPath(); |
| 95 | for (EditText aSelf : self) { | 95 | for (EditText aSelf : self) { |
| 96 | String trim = aSelf.getText().toString().trim(); | 96 | String trim = aSelf.getText().toString().trim(); |
| 97 | + if (TextUtils.isEmpty(trim)) { | ||
| 98 | + continue; | ||
| 99 | + } | ||
| 97 | String firstSpell = PinyinUtil.getFirstSpell(trim).toUpperCase(); | 100 | String firstSpell = PinyinUtil.getFirstSpell(trim).toUpperCase(); |
| 98 | File file = new File(rootPath + firstSpell); | 101 | File file = new File(rootPath + firstSpell); |
| 99 | if (!file.exists()) { | 102 | if (!file.exists()) { |
| @@ -155,8 +155,6 @@ public class MovieDetailMsgActivity extends BaseActivity | @@ -155,8 +155,6 @@ public class MovieDetailMsgActivity extends BaseActivity | ||
| 155 | Log.d("lovely", "╟ onSaveInstanceState"); | 155 | Log.d("lovely", "╟ onSaveInstanceState"); |
| 156 | outState.putString("douban_id", doubanId); | 156 | outState.putString("douban_id", doubanId); |
| 157 | outState.putString("movie-item", new Gson().toJson(movieItem)); | 157 | outState.putString("movie-item", new Gson().toJson(movieItem)); |
| 158 | - doubanId = getIntent().getStringExtra("movie-douban-id"); | ||
| 159 | - movieItem = (LocalMovieMessage) getIntent().getSerializableExtra("movie-item"); | ||
| 160 | } | 158 | } |
| 161 | 159 | ||
| 162 | @Override | 160 | @Override |
| @@ -29,17 +29,6 @@ public class QrCodeShowActivity extends Activity implements IUpdateQrCodeView { | @@ -29,17 +29,6 @@ public class QrCodeShowActivity extends Activity implements IUpdateQrCodeView { | ||
| 29 | public static final int KILL_SELF = 0x9983; | 29 | public static final int KILL_SELF = 0x9983; |
| 30 | private Handler handler = new Handler(); | 30 | private Handler handler = new Handler(); |
| 31 | private QrCodeShowPresent present; | 31 | private QrCodeShowPresent present; |
| 32 | -// Runnable r = new Runnable() { | ||
| 33 | -// @Override | ||
| 34 | -// public void run() { | ||
| 35 | -// closeSystem(); | ||
| 36 | -// } | ||
| 37 | -// }; | ||
| 38 | - | ||
| 39 | -// private void closeSystem() { | ||
| 40 | -// | ||
| 41 | -// } | ||
| 42 | - | ||
| 43 | private String orderSn; | 32 | private String orderSn; |
| 44 | private String roomSn; | 33 | private String roomSn; |
| 45 | private ImageView iv; | 34 | private ImageView iv; |
| 1 | package com.xgimi.gimicinema.activity; | 1 | package com.xgimi.gimicinema.activity; |
| 2 | 2 | ||
| 3 | -import android.content.Context; | ||
| 4 | -import android.media.AudioManager; | ||
| 5 | import android.media.MediaPlayer; | 3 | import android.media.MediaPlayer; |
| 6 | import android.net.Uri; | 4 | import android.net.Uri; |
| 7 | import android.os.Bundle; | 5 | import android.os.Bundle; |
| @@ -33,7 +31,7 @@ public class SimpleAdsPlayer2 extends BaseActivity implements IUpdateQrCodeView | @@ -33,7 +31,7 @@ public class SimpleAdsPlayer2 extends BaseActivity implements IUpdateQrCodeView | ||
| 33 | public String playUrl; | 31 | public String playUrl; |
| 34 | private String roomSn; | 32 | private String roomSn; |
| 35 | private String orderSn; | 33 | private String orderSn; |
| 36 | - private AudioManager audioManager; | 34 | + // private AudioManager audioManager; |
| 37 | private boolean fromService; | 35 | private boolean fromService; |
| 38 | private long startAdsTime = 0; | 36 | private long startAdsTime = 0; |
| 39 | private int streamVolume; | 37 | private int streamVolume; |
| @@ -51,11 +49,11 @@ public class SimpleAdsPlayer2 extends BaseActivity implements IUpdateQrCodeView | @@ -51,11 +49,11 @@ public class SimpleAdsPlayer2 extends BaseActivity implements IUpdateQrCodeView | ||
| 51 | protected void onCreate(Bundle savedInstanceState) { | 49 | protected void onCreate(Bundle savedInstanceState) { |
| 52 | super.onCreate(savedInstanceState); | 50 | super.onCreate(savedInstanceState); |
| 53 | setContentView(R.layout.a_ads_player2); | 51 | setContentView(R.layout.a_ads_player2); |
| 54 | - audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); | ||
| 55 | - streamVolume = audioManager.getStreamVolume(AudioManager.STREAM_SYSTEM); | ||
| 56 | - if (audioManager != null) { | ||
| 57 | - audioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, 20, 0); | ||
| 58 | - } | 52 | +// audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); |
| 53 | +// streamVolume = audioManager.getStreamVolume(AudioManager.STREAM_SYSTEM); | ||
| 54 | +// if (audioManager != null) { | ||
| 55 | +// audioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, 20, 0); | ||
| 56 | +// } | ||
| 59 | startAdsTime = System.currentTimeMillis(); | 57 | startAdsTime = System.currentTimeMillis(); |
| 60 | Constant.isAdsOn = true; | 58 | Constant.isAdsOn = true; |
| 61 | videoView = (VideoView) findViewById(R.id.videoView); | 59 | videoView = (VideoView) findViewById(R.id.videoView); |
| @@ -112,10 +110,10 @@ public class SimpleAdsPlayer2 extends BaseActivity implements IUpdateQrCodeView | @@ -112,10 +110,10 @@ public class SimpleAdsPlayer2 extends BaseActivity implements IUpdateQrCodeView | ||
| 112 | handler.removeCallbacks(null); | 110 | handler.removeCallbacks(null); |
| 113 | handler.removeCallbacksAndMessages(null); | 111 | handler.removeCallbacksAndMessages(null); |
| 114 | } | 112 | } |
| 115 | - if (audioManager != null) { | ||
| 116 | - audioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, streamVolume, 0); | ||
| 117 | - audioManager = null; | ||
| 118 | - } | 113 | +// if (audioManager != null) { |
| 114 | +// audioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, streamVolume, 0); | ||
| 115 | +// audioManager = null; | ||
| 116 | +// } | ||
| 119 | handler = null; | 117 | handler = null; |
| 120 | playUrl = null; | 118 | playUrl = null; |
| 121 | videoView = null; | 119 | videoView = null; |
| @@ -19,13 +19,16 @@ package com.xgimi.gimicinema.activity; | @@ -19,13 +19,16 @@ package com.xgimi.gimicinema.activity; | ||
| 19 | import android.content.Context; | 19 | import android.content.Context; |
| 20 | import android.content.Intent; | 20 | import android.content.Intent; |
| 21 | import android.os.Bundle; | 21 | import android.os.Bundle; |
| 22 | +import android.util.Log; | ||
| 22 | import android.view.View; | 23 | import android.view.View; |
| 23 | import android.widget.ImageView; | 24 | import android.widget.ImageView; |
| 24 | import android.widget.TextView; | 25 | import android.widget.TextView; |
| 25 | import android.widget.Toast; | 26 | import android.widget.Toast; |
| 27 | +import com.bumptech.glide.Glide; | ||
| 26 | import com.gimi.common.cinema.model.Constant; | 28 | import com.gimi.common.cinema.model.Constant; |
| 27 | import com.gimi.common.cinema.utils.LeeImageLoader; | 29 | import com.gimi.common.cinema.utils.LeeImageLoader; |
| 28 | import com.xgimi.gimicinema.R; | 30 | import com.xgimi.gimicinema.R; |
| 31 | +import com.xgimi.gimicinema.model.ThreadUtils; | ||
| 29 | import com.xgimi.gimicinema.mview.IStartView; | 32 | import com.xgimi.gimicinema.mview.IStartView; |
| 30 | import com.xgimi.gimicinema.presenter.StartPresenter; | 33 | import com.xgimi.gimicinema.presenter.StartPresenter; |
| 31 | 34 | ||
| @@ -107,4 +110,18 @@ public class StartActivity extends BaseActivity implements Runnable, IStartView | @@ -107,4 +110,18 @@ public class StartActivity extends BaseActivity implements Runnable, IStartView | ||
| 107 | public void showMsg(String msg) { | 110 | public void showMsg(String msg) { |
| 108 | Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); | 111 | Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); |
| 109 | } | 112 | } |
| 113 | + @Override | ||
| 114 | + protected void onDestroy() { | ||
| 115 | + super.onDestroy(); | ||
| 116 | + Log.d("CheckAdVedio", "destroy"); | ||
| 117 | + Glide.get(context).clearMemory(); | ||
| 118 | + ThreadUtils.subThread(new ThreadUtils.DoSomeThing() { | ||
| 119 | + @Override | ||
| 120 | + public void doSomeThing() { | ||
| 121 | + Glide.get(context).clearDiskCache(); | ||
| 122 | + } | ||
| 123 | + }); | ||
| 124 | + System.gc(); | ||
| 125 | + System.runFinalization(); | ||
| 126 | + } | ||
| 110 | } | 127 | } |
| @@ -53,7 +53,7 @@ public class M1905MovieDetailActivity1 extends BaseActivity { | @@ -53,7 +53,7 @@ public class M1905MovieDetailActivity1 extends BaseActivity { | ||
| 53 | private NewDBManager dbManager; | 53 | private NewDBManager dbManager; |
| 54 | 54 | ||
| 55 | private void assignViews() { | 55 | private void assignViews() { |
| 56 | - dbManager = new NewDBManager(context); | 56 | + dbManager = NewDBManager.getInstance(); |
| 57 | movieNameTv = (TextView) findViewById(R.id.movieName_tv); | 57 | movieNameTv = (TextView) findViewById(R.id.movieName_tv); |
| 58 | moviePosterIv = (ImageView) findViewById(R.id.moviePoster_iv); | 58 | moviePosterIv = (ImageView) findViewById(R.id.moviePoster_iv); |
| 59 | directorNameTv = (TextView) findViewById(R.id.directorName_tv); | 59 | directorNameTv = (TextView) findViewById(R.id.directorName_tv); |
| @@ -53,7 +53,7 @@ public class DBUpdateModelImpl implements IDBUpdateModel { | @@ -53,7 +53,7 @@ public class DBUpdateModelImpl implements IDBUpdateModel { | ||
| 53 | @Override | 53 | @Override |
| 54 | public void updateMovieCount(Context context, LocalMovieMessage lmm) { | 54 | public void updateMovieCount(Context context, LocalMovieMessage lmm) { |
| 55 | if (dbManager == null) { | 55 | if (dbManager == null) { |
| 56 | - dbManager = new NewDBManager(context); | 56 | + dbManager = NewDBManager.getInstance(); |
| 57 | } | 57 | } |
| 58 | dbManager.updateMovieCount(lmm); | 58 | dbManager.updateMovieCount(lmm); |
| 59 | } | 59 | } |
| @@ -61,7 +61,7 @@ public class DBUpdateModelImpl implements IDBUpdateModel { | @@ -61,7 +61,7 @@ public class DBUpdateModelImpl implements IDBUpdateModel { | ||
| 61 | @Override | 61 | @Override |
| 62 | public void updatePlayTime(Context context, LocalMovieMessage lmm) { | 62 | public void updatePlayTime(Context context, LocalMovieMessage lmm) { |
| 63 | if (dbManager == null) { | 63 | if (dbManager == null) { |
| 64 | - dbManager = new NewDBManager(context); | 64 | + dbManager = NewDBManager.getInstance(); |
| 65 | } | 65 | } |
| 66 | dbManager.updatePlayTime(lmm); | 66 | dbManager.updatePlayTime(lmm); |
| 67 | } | 67 | } |
| @@ -70,7 +70,7 @@ public class DBUpdateModelImpl implements IDBUpdateModel { | @@ -70,7 +70,7 @@ public class DBUpdateModelImpl implements IDBUpdateModel { | ||
| 70 | public void insertAll(final Context context, final ArrayList<LocalMovieMessage> all, | 70 | public void insertAll(final Context context, final ArrayList<LocalMovieMessage> all, |
| 71 | final OnInsertDbListener l) { | 71 | final OnInsertDbListener l) { |
| 72 | if (dbManager == null) { | 72 | if (dbManager == null) { |
| 73 | - dbManager = new NewDBManager(context); | 73 | + dbManager = NewDBManager.getInstance(); |
| 74 | } | 74 | } |
| 75 | ThreadUtils.subThread(new ThreadUtils.DoSomeThing() { | 75 | ThreadUtils.subThread(new ThreadUtils.DoSomeThing() { |
| 76 | @Override | 76 | @Override |
| @@ -114,7 +114,7 @@ public class DBUpdateModelImpl implements IDBUpdateModel { | @@ -114,7 +114,7 @@ public class DBUpdateModelImpl implements IDBUpdateModel { | ||
| 114 | return; | 114 | return; |
| 115 | } | 115 | } |
| 116 | if (dbManager == null) { | 116 | if (dbManager == null) { |
| 117 | - dbManager = new NewDBManager(context); | 117 | + dbManager = NewDBManager.getInstance(); |
| 118 | } | 118 | } |
| 119 | ThreadUtils.subThread(new ThreadUtils.DoSomeThing() { | 119 | ThreadUtils.subThread(new ThreadUtils.DoSomeThing() { |
| 120 | @Override | 120 | @Override |
| @@ -77,9 +77,9 @@ public class MainModelImpl implements IMainModel { | @@ -77,9 +77,9 @@ public class MainModelImpl implements IMainModel { | ||
| 77 | 77 | ||
| 78 | @Override | 78 | @Override |
| 79 | public void loadRecommend(Context ctx, final OnMainRecommendListener listener) { | 79 | public void loadRecommend(Context ctx, final OnMainRecommendListener listener) { |
| 80 | -// if (dbManager == null) { | ||
| 81 | - dbManager = new NewDBManager(ctx); | ||
| 82 | -// } | 80 | + if (dbManager == null) { |
| 81 | + dbManager = NewDBManager.getInstance(); | ||
| 82 | + } | ||
| 83 | ThreadUtils.subThread(new ThreadUtils.DoSomeThing() { | 83 | ThreadUtils.subThread(new ThreadUtils.DoSomeThing() { |
| 84 | @Override | 84 | @Override |
| 85 | public void doSomeThing() { | 85 | public void doSomeThing() { |
| @@ -60,7 +60,7 @@ public class MovieListModelImpl implements IMovieListModel { | @@ -60,7 +60,7 @@ public class MovieListModelImpl implements IMovieListModel { | ||
| 60 | public void getMovieList(Context ctx, final String keyword, final QueryType queryType, | 60 | public void getMovieList(Context ctx, final String keyword, final QueryType queryType, |
| 61 | final OnGetMovieListListener listener) { | 61 | final OnGetMovieListListener listener) { |
| 62 | if (dbManager == null) { | 62 | if (dbManager == null) { |
| 63 | - dbManager = new NewDBManager(ctx); | 63 | + dbManager = NewDBManager.getInstance(); |
| 64 | } | 64 | } |
| 65 | if (sharedPreferences == null) { | 65 | if (sharedPreferences == null) { |
| 66 | sharedPreferences = ctx.getSharedPreferences(Constant.XML_NAME, | 66 | sharedPreferences = ctx.getSharedPreferences(Constant.XML_NAME, |
| @@ -113,7 +113,7 @@ public class MovieListModelImpl implements IMovieListModel { | @@ -113,7 +113,7 @@ public class MovieListModelImpl implements IMovieListModel { | ||
| 113 | @Override | 113 | @Override |
| 114 | public void getPlayRecord(Context ctx, final OnGetMovieListListener listener) { | 114 | public void getPlayRecord(Context ctx, final OnGetMovieListListener listener) { |
| 115 | if (dbManager == null) { | 115 | if (dbManager == null) { |
| 116 | - dbManager = new NewDBManager(ctx); | 116 | + dbManager = NewDBManager.getInstance(); |
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | ThreadUtils.subThread(new ThreadUtils.DoSomeThing() { | 119 | ThreadUtils.subThread(new ThreadUtils.DoSomeThing() { |
| @@ -153,7 +153,7 @@ public class MovieListModelImpl implements IMovieListModel { | @@ -153,7 +153,7 @@ public class MovieListModelImpl implements IMovieListModel { | ||
| 153 | @Override | 153 | @Override |
| 154 | public void getSearchRecommend(Context ctx, final OnGetMovieListListener l) { | 154 | public void getSearchRecommend(Context ctx, final OnGetMovieListListener l) { |
| 155 | if (dbManager == null) { | 155 | if (dbManager == null) { |
| 156 | - dbManager = new NewDBManager(ctx); | 156 | + dbManager = NewDBManager.getInstance(); |
| 157 | } | 157 | } |
| 158 | ThreadUtils.subThread(new ThreadUtils.DoSomeThing() { | 158 | ThreadUtils.subThread(new ThreadUtils.DoSomeThing() { |
| 159 | @Override | 159 | @Override |
| @@ -172,7 +172,7 @@ public class MovieListModelImpl implements IMovieListModel { | @@ -172,7 +172,7 @@ public class MovieListModelImpl implements IMovieListModel { | ||
| 172 | @Override | 172 | @Override |
| 173 | public void clear() { | 173 | public void clear() { |
| 174 | if (dbManager != null) { | 174 | if (dbManager != null) { |
| 175 | - dbManager.closeDB(); | 175 | +// dbManager.closeDB(); |
| 176 | dbManager = null; | 176 | dbManager = null; |
| 177 | } | 177 | } |
| 178 | } | 178 | } |
| @@ -18,7 +18,7 @@ package com.xgimi.gimicinema.presenter; | @@ -18,7 +18,7 @@ package com.xgimi.gimicinema.presenter; | ||
| 18 | import android.content.Context; | 18 | import android.content.Context; |
| 19 | import android.content.Intent; | 19 | import android.content.Intent; |
| 20 | import android.net.Uri; | 20 | import android.net.Uri; |
| 21 | - | 21 | +import com.gimi.common.cinema.db.NewDBManager; |
| 22 | import com.gimi.common.cinema.model.Constant; | 22 | import com.gimi.common.cinema.model.Constant; |
| 23 | import com.gimi.common.cinema.model.LocalMovieMessage; | 23 | import com.gimi.common.cinema.model.LocalMovieMessage; |
| 24 | import com.gimi.common.cinema.model.SambaMsg; | 24 | import com.gimi.common.cinema.model.SambaMsg; |
| @@ -225,6 +225,7 @@ public class SettingPresenter extends BasePresenter | @@ -225,6 +225,7 @@ public class SettingPresenter extends BasePresenter | ||
| 225 | view.enableCopy(true); | 225 | view.enableCopy(true); |
| 226 | if (copyIn) { | 226 | if (copyIn) { |
| 227 | view.showMessage("更新本地数据库成功"); | 227 | view.showMessage("更新本地数据库成功"); |
| 228 | + NewDBManager.getInstance().closeDB(); | ||
| 228 | } else { | 229 | } else { |
| 229 | view.showMessage("数据库已考出"); | 230 | view.showMessage("数据库已考出"); |
| 230 | } | 231 | } |
| 1 | +package com.wugian.ping; | ||
| 2 | + | ||
| 3 | +import java.util.ArrayList; | ||
| 4 | +import java.util.List; | ||
| 5 | +import java.util.Map; | ||
| 6 | +import java.util.regex.Pattern; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * Created by wugian on 2017/9/16. | ||
| 10 | + */ | ||
| 11 | + | ||
| 12 | +public class PinYinHelper1 { | ||
| 13 | + private static PinYinHelper1 helper; | ||
| 14 | + private Map<String, String> pinyinTable; | ||
| 15 | + | ||
| 16 | + private PinYinHelper1() { | ||
| 17 | + pinyinTable = PinyinResource.getPinyinResource(); | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + public static PinYinHelper1 getInstance() { | ||
| 21 | + if (helper == null) { | ||
| 22 | + helper = new PinYinHelper1(); | ||
| 23 | + } | ||
| 24 | + return helper; | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + public String[] getFirstHead(String words) { | ||
| 28 | +// System.out.println("PYH:getFirstHead()"); | ||
| 29 | + String[] pinYinArray = new String[1]; | ||
| 30 | + for (int i = 0; i < words.length(); i++) { | ||
| 31 | + String substring = words.substring(i, i + 1); | ||
| 32 | + if (isNumberOrAlphabet(substring)) { | ||
| 33 | + for (int index = 0; index < pinYinArray.length; index++) { | ||
| 34 | + if (pinYinArray[index] != null && !"".equals(pinYinArray[index])) { | ||
| 35 | + pinYinArray[index] = pinYinArray[index] + substring; | ||
| 36 | + } else { | ||
| 37 | + pinYinArray[index] = substring; | ||
| 38 | + } | ||
| 39 | + } | ||
| 40 | + } else { | ||
| 41 | + String s = pinyinTable.get(substring); | ||
| 42 | + if (s == null || "".equals(s.trim())) { | ||
| 43 | + continue; | ||
| 44 | + } | ||
| 45 | + String[] tmp = s.split(","); | ||
| 46 | + for (int tmpIndex = 0; tmpIndex < tmp.length; tmpIndex++) { | ||
| 47 | + tmp[tmpIndex] = tmp[tmpIndex].substring(0, 1); | ||
| 48 | + } | ||
| 49 | + tmp = removeDuplicate(tmp); | ||
| 50 | + | ||
| 51 | + int tmpLength = tmp.length; | ||
| 52 | + if (tmpLength > 1) { | ||
| 53 | + String[] big = new String[pinYinArray.length + (tmpLength - 1) * pinYinArray.length]; | ||
| 54 | + for (int i1 = 0; i1 < tmpLength; i1++) { | ||
| 55 | + System.arraycopy(pinYinArray, 0, big, pinYinArray.length * i1, pinYinArray.length); | ||
| 56 | + } | ||
| 57 | + pinYinArray = big; | ||
| 58 | + } | ||
| 59 | + for (int j = 0; j < pinYinArray.length; j++) { | ||
| 60 | + if (pinYinArray[j] != null && !"".equals(pinYinArray[j])) { | ||
| 61 | + pinYinArray[j] = pinYinArray[j] + tmp[(j * tmpLength) / pinYinArray.length]; | ||
| 62 | + } else { | ||
| 63 | + pinYinArray[j] = tmp[(j * tmpLength) / pinYinArray.length]; | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | +// String s = Arrays.toString(pinYinArray); | ||
| 69 | +// System.out.println("PYH:result is " + s); | ||
| 70 | + return pinYinArray; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + private boolean isNumberOrAlphabet(String str) { | ||
| 74 | + Pattern pattern = Pattern.compile("^[A-Za-z0-9]+$"); | ||
| 75 | + return pattern.matcher(str).matches(); | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + private String[] removeDuplicate(String[] array) { | ||
| 79 | + List<String> list = new ArrayList<String>(); | ||
| 80 | + list.add(array[0]); | ||
| 81 | + for (int i = 1; i < array.length; i++) { | ||
| 82 | + if (!list.toString().contains(array[i])) { | ||
| 83 | + list.add(array[i]); | ||
| 84 | + } | ||
| 85 | + } | ||
| 86 | + return list.toArray(new String[list.size()]); | ||
| 87 | + } | ||
| 88 | + | ||
| 89 | + public static void main(String[] args) { | ||
| 90 | +// getFirstHead("中国人民is one a bc de test"); | ||
| 91 | + String aa = "test abc"; | ||
| 92 | +// aa = "b"; | ||
| 93 | + System.out.println(aa.substring(0, 1)); | ||
| 94 | + | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + | ||
| 98 | +} |
Please
register
or
login
to post a comment