package dentex.youtube.downloader.utils; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; import android.os.AsyncTask; import android.util.Log; public class UpdateHelper { private static final String DEBUG_TAG = "UpdateHelper"; public static String findCurrentAppVersion(Context ctx) { String cv; try { cv = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0).versionName; Utils.logger("d", "current version: " + cv, DEBUG_TAG); } catch (NameNotFoundException e) { Log.e(DEBUG_TAG, "version not read: " + e.getMessage()); cv = "100"; } return cv; } public static String[] doUpdateCheck(Context ctx, AsyncTask<String, Void, String[]> asyncAutoUpdate, String content) { Utils.logger("d", "doUpdateCheck", DEBUG_TAG); if (asyncAutoUpdate.isCancelled()) { Utils.logger("d", "asyncUpdate cancelled @ 'OnlineUpdateCheck' begin", DEBUG_TAG); return null; } String matchedVersion; String matchedChangeLog; String matchedMd5; // match version name Pattern v_pattern = Pattern.compile("versionName=\\\"(.*)\\\""); Matcher v_matcher = v_pattern.matcher(content); if (v_matcher.find() && !asyncAutoUpdate.isCancelled()) { matchedVersion = v_matcher.group(1); Utils.logger("i", "_on-line version: " + matchedVersion, DEBUG_TAG); } else { matchedVersion = "not_found"; Log.e(DEBUG_TAG, "_online version: not found!"); } // match changelog Pattern cl_pattern = Pattern.compile("<pre><code> v(.*?)</code></pre>", Pattern.DOTALL); Matcher cl_matcher = cl_pattern.matcher(content); if (cl_matcher.find() && !asyncAutoUpdate.isCancelled()) { matchedChangeLog = " v" + cl_matcher.group(1); Utils.logger("i", "_online changelog...", DEBUG_TAG); } else { matchedChangeLog = "not_found"; Log.e(DEBUG_TAG, "_online changelog not found!"); } // match md5 // checksum: <code>d7ef1e4668b24517fb54231571b4a74f</code> dentex.youtube.downloader_v1.4 Pattern md5_pattern = Pattern.compile("checksum: <code>(.{32})</code> dentex.youtube.downloader_v"); Matcher md5_matcher = md5_pattern.matcher(content); if (md5_matcher.find() && !asyncAutoUpdate.isCancelled()) { matchedMd5 = md5_matcher.group(1); Utils.logger("i", "_online md5sum: " + matchedMd5, DEBUG_TAG); } else { matchedMd5 = "not_found"; Log.e(DEBUG_TAG, "_online md5sum not found!"); } String currentVersion = findCurrentAppVersion(ctx); String res = Utils.VersionComparator.compare(matchedVersion, currentVersion); Utils.logger("d", "version comparison: " + matchedVersion + " " + res + " " + currentVersion, DEBUG_TAG); return new String[] { res, matchedVersion, matchedChangeLog, matchedMd5 }; } }