@Override public void onCreate() { Utils.logger("d", "service created", DEBUG_TAG); BugSenseHandler.initAndStartSession(this, YTD.BugsenseApiKey); BugSenseHandler.leaveBreadcrumb("AutoUpgradeApkService_onCreate"); registerReceiver(apkReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); try { currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName; Utils.logger("d", "current version: " + currentVersion, DEBUG_TAG); } catch (NameNotFoundException e) { Log.e(DEBUG_TAG, "version not read: " + e.getMessage()); currentVersion = "100"; } ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected() && matchedVersion != "n.a.") { try { // init version and changelog matchedChangeLog = null; matchedVersion = null; asyncAutoUpdate = new AsyncUpdate(); webPage = "http://sourceforge.net/projects/ytdownloader/files/"; asyncAutoUpdate.execute(webPage); } catch (NullPointerException e) { Log.e(DEBUG_TAG, "unable to retrieve update data."); } } else { Log.e(DEBUG_TAG, getString(R.string.no_net)); } }
private int downloadUrl(String myurl) throws IOException { InputStream is = null; int len = 100000; Utils.logger("d", "The link is: " + myurl, DEBUG_TAG); try { URL url = new URL(myurl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestProperty("User-Agent", "<em>" + YTD.USER_AGENT_FIREFOX + "</em>"); conn.setReadTimeout(20000 /* milliseconds */); conn.setConnectTimeout(30000 /* milliseconds */); conn.setInstanceFollowRedirects(false); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.connect(); int response = conn.getResponseCode(); Utils.logger("d", "The response is: " + response, DEBUG_TAG); is = conn.getInputStream(); if (!asyncAutoUpdate.isCancelled()) { return readIt(is, len); } else { Utils.logger("d", "asyncUpdate cancelled @ 'return readIt'", DEBUG_TAG); return 3; } } finally { if (is != null) { is.close(); } } }
@Override public void processNotStartedCheck(boolean started) { if (!started) { Utils.logger( "w", "FFmpegExtractFlvThumbTask process not started or not completed", DEBUG_TAG); } }
@Override public void processComplete(int exitValue) { Utils.logger( "v", aPngFile.getName() + ": processComplete with exit value: " + exitValue, DEBUG_TAG); if (DashboardActivity.isDashboardRunning) DashboardActivity.refreshlist(DashboardActivity.sDashboardActivity); }
protected Integer doInBackground(String... urls) { // params comes from the execute() call: params[0] is the url. try { Utils.logger("d", "doInBackground...", DEBUG_TAG); return downloadUrl(urls[0]); } catch (IOException e) { Log.e(DEBUG_TAG, "doInBackground: " + e.getMessage()); matchedVersion = "n.a."; return 1; } }
@Override protected void onPostExecute(Integer result) { /*if (matchedVersion.contentEquals("n.a.")) { }*/ if (compRes.contentEquals(">")) { Utils.logger("d", "version comparison: downloading latest version...", DEBUG_TAG); NotificationCompat.Builder builder = new NotificationCompat.Builder(AutoUpgradeApkService.this); builder .setSmallIcon(R.drawable.ic_stat_ytd) .setContentTitle(getString(R.string.title_activity_share)) .setContentText("v" + matchedVersion + " " + getString(R.string.new_v_download)); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(2, builder.build()); callDownloadApk(matchedVersion); } else if (compRes.contentEquals("==")) { // PopUps.showPopUp(getString(R.string.information), // getString(R.string.upgrade_latest_installed), "info", AutoUpgradeApk.this); Utils.logger("d", "version comparison: latest version is already installed!", DEBUG_TAG); stopSelf(); } else if (compRes.contentEquals("<")) { // No need for a popup... Utils.logger( "d", "version comparison: installed higher than the one online? ...this should not happen...", DEBUG_TAG); stopSelf(); } else if (compRes.contentEquals("init")) { Utils.logger("d", "version comparison not tested", DEBUG_TAG); stopSelf(); } }
private int OnlineUpdateCheck(String content) { Utils.logger("d", "OnlineUpdateCheck", DEBUG_TAG); int res = 3; if (asyncAutoUpdate.isCancelled()) { Utils.logger("d", "asyncUpdate cancelled @ 'OnlineUpdateCheck' begin", DEBUG_TAG); return 3; } // 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); res = res - 1; } 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); res = res - 1; } 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); res = res - 1; } else { matchedMd5 = "not_found"; Log.e(DEBUG_TAG, "_online md5sum not found!"); } compRes = Utils.VersionComparator.compare(matchedVersion, currentVersion); Utils.logger( "d", "version comparison: " + matchedVersion + " " + compRes + " " + currentVersion, DEBUG_TAG); return res; }
@Override public void onDestroy() { Utils.logger("d", "service destroyed", DEBUG_TAG); unregisterReceiver(apkReceiver); }