//This is source code of favorite. Copyrightⓒ. Tarks. All Rights Reserved. package com.tarks.favorite.global; import java.io.File; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import com.tarks.favorite.ModApplication; import android.app.Application; import android.app.DownloadManager; import android.app.DownloadManager.Request; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Environment; import android.util.Log; import android.webkit.CookieManager; import android.webkit.MimeTypeMap; public class Filedw { public static String referer = "http://httphttp.http/http"; @SuppressWarnings("deprecation") public static void startdownload(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { Application app = ModApplication.getInstance(); MimeTypeMap mtm = MimeTypeMap.getSingleton(); final DownloadManager downloadManager = (DownloadManager) app.getSystemService(Context.DOWNLOAD_SERVICE); Uri downloadUri = Uri.parse(url); String fileName = downloadUri.getLastPathSegment(); String mimeType = null; Log.i("Tarks",url); int pos = 0; if(contentDisposition != null){ if ((pos = contentDisposition.toLowerCase().lastIndexOf("filename=")) >= 0) { fileName = contentDisposition.substring(pos + 9); pos = fileName.lastIndexOf(";"); if (pos > 0) { fileName = fileName.substring(0, pos - 1); } } fileName = decodeURL(fileName); }else{ if(fileName == null){ String[] ets = {".png",".jpg",".gif",".jpeg",".bmp",".tiff"}; String fileex = downloadUri.toString(); String fn = ""; int i=0; for(i=0;i<ets.length;i+=1){ if(fileex.contains(ets[i])){ for(int j=fileex.indexOf(ets[i])+ets[i].length()-1;j>=0;j-=1){ if(fileex.charAt(j) == '/'){ break; }else{ fn += new Character(fileex.charAt(j)).toString(); } } break; } } if(fn.length() > 3){ fileName = new StringBuilder(fn).reverse().toString(); } if(fileName == null){ fileName = "file.extensions"; } if(mimetype == null || mimetype.equalsIgnoreCase("")){ mimeType = mtm.getMimeTypeFromExtension(ets[i]); }else{ mimeType = mimetype; } } } if(fileName.startsWith("\"")){ fileName = fileName.substring(1); } if(fileName.endsWith("\"")){ fileName = fileName.substring(0, fileName.length() - 1); } String dlPath = Environment.DIRECTORY_DOWNLOADS; // downloadPath File downloadFURL; if (Environment.getExternalStorageState() == null) { //create new file directory object downloadFURL = new File(Environment.getDataDirectory() + "/" + dlPath +"/"); }else{ downloadFURL = new File(Environment.getExternalStorageDirectory() + "/" + dlPath +"/"); } File exists; int i=0; String flEx; // fileExtension String flRn; // fileRealname System.out.println(fileName); if(fileName.contains("tar.")){ flEx = fileName.substring(fileName.lastIndexOf(".") - 3, fileName.length()).toLowerCase(); }else{ flEx = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()).toLowerCase(); } /* String[] sb = fileName.split("."); i = sb.length; System.out.println(sb.length); if(i == 1){ flEx = ""; }else{ if(i >= 3){ if(sb[i-2].equalsIgnoreCase("tar")){ flEx = sb[i-2] + sb[i-1]; }else{ flEx = sb[i-1]; } }else{ flEx = sb[i-1]; } } i = 0; flEx = flEx.toLowerCase(); */ if(fileName.contains("tar.")){ flRn = fileName.substring(0,fileName.lastIndexOf(".")-3); }else{ flRn = fileName.substring(0,fileName.lastIndexOf(".")); } //Global.toast(fileName + " " + downloadFURL.getAbsolutePath()); while(true){ exists = new File(downloadFURL.getAbsolutePath() + "/" + fileName); if(exists.exists()){ i += 1; // System.out.println("EXISTS"); fileName = flRn + " - (" + i + ")" + "." + flEx; }else{ break; } } // MIME Type을 확장자를 통해 예측한다. if(mimeType == null){ if(mimetype.equalsIgnoreCase("application/octet-stream")){ mimetype = null; } if(mimetype == null || mimetype.equalsIgnoreCase("")){ //String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()).toLowerCase(); String fileExtension = flEx; mimeType = mtm.getMimeTypeFromExtension(fileExtension); }else{ mimeType = mimetype; } fileName = fileName.replace("\"", ""); } // Download 디렉토리에 저장하도록 요청을 작성 final Request request = new DownloadManager.Request(downloadUri); request.addRequestHeader("Cookie", CookieManager.getInstance().getCookie(url)); if(userAgent != null){ request.addRequestHeader("User-Agent", userAgent); } if(referer != null){ request.addRequestHeader("Referer", referer); } Log.i("TTTT",downloadUri.toString() + " + " + fileName + " + "); request.setTitle(fileName); request.setDescription(url); request.setDestinationUri(downloadUri); //Log.i("Tarks",mimeType); request.setMimeType(mimeType); if(android.os.Build.VERSION.SDK_INT <= 10){ request.setShowRunningNotification(true); }else{ request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } request.setDestinationInExternalPublicDir(dlPath, fileName); // 다운로드 매니저에 요청 등록 new Thread("Browser download") { public void run() { downloadManager.enqueue(request); } }.start(); } public static void viewDownloads(Context con){ con.startActivity(new Intent(DownloadManager.ACTION_VIEW_DOWNLOADS)); } public static String decodeURL(String arg){ try { return URLDecoder.decode(arg, "UTF-8").replace("+", " "); } catch (UnsupportedEncodingException e) { return arg; } } }