package net.coding.program; import net.coding.program.common.Global; import net.coding.program.common.ui.BaseActivity; import net.coding.program.model.AttachmentFileObject; import net.coding.program.model.AttachmentFolderObject; import net.coding.program.model.ProjectObject; import net.coding.program.project.detail.AttachmentsActivity_; import net.coding.program.project.detail.AttachmentsDownloadDetailActivity_; import net.coding.program.project.detail.AttachmentsHtmlDetailActivity_; import net.coding.program.project.detail.AttachmentsPicDetailActivity_; import net.coding.program.project.detail.AttachmentsTextDetailActivity_; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; import org.json.JSONException; import org.json.JSONObject; import java.util.regex.Matcher; import java.util.regex.Pattern; @EActivity(R.layout.activity_file_url) public class FileUrlActivity extends BaseActivity { public static final String HOST_PROJECT = Global.HOST_API + "/user/%s/project/%s"; public static final String PATTERN_DIR = "^(?:https://[\\w.]*)?/u/([\\w.-]+)/p/([\\w.-]+)/attachment/([\\w.-]+)$"; public static final String PATTERN_DIR_FILE = "^(?:https://[\\w.]*)?/u/([\\w.-]+)/p/([\\w.-]+)/attachment/([\\w.-]+)/preview/([\\d]+)$"; final String HOST_FILE = Global.HOST_API + "/project/%s/files/%s/view"; @Extra String url; private String dirId; private String fileId; private int projectId; @AfterViews public void parseUrl() { Pattern pattern = Pattern.compile(PATTERN_DIR); Matcher matcher = pattern.matcher(url); if (matcher.find()) { String user = matcher.group(1); String project = matcher.group(2); dirId = matcher.group(3); String projectUrl = String.format(HOST_PROJECT, user, project); getNetwork(projectUrl, HOST_PROJECT); return; } pattern = Pattern.compile(PATTERN_DIR_FILE); matcher = pattern.matcher(url); if (matcher.find()) { String user = matcher.group(1); String project = matcher.group(2); dirId = matcher.group(3); fileId = matcher.group(4); String projectUrl = String.format(HOST_PROJECT, user, project); getNetwork(projectUrl, PATTERN_DIR_FILE); return; } } @Override public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException { if (tag.equals(HOST_PROJECT)) { if (code == 0) { ProjectObject projectObject = new ProjectObject(respanse.optJSONObject("data")); projectId = projectObject.getId(); AttachmentFolderObject folder = new AttachmentFolderObject(); folder.file_id = dirId; folder.name = ""; AttachmentsActivity_.intent(this) .mAttachmentFolderObject(folder) .mProjectObjectId(projectId) .start(); overridePendingTransition(0, 0); } else { showErrorMsg(code, respanse); } finish(); } else if (tag.equals(PATTERN_DIR_FILE)) { if (code == 0) { ProjectObject projectObject = new ProjectObject(respanse.optJSONObject("data")); projectId = projectObject.getId(); String fileUrl = String.format(HOST_FILE, projectId, fileId); getNetwork(fileUrl, HOST_FILE); } else { showErrorMsg(code, respanse); finish(); } } else if (tag.equals(HOST_FILE)) { if (code == 0) { AttachmentFileObject fileObject = new AttachmentFileObject(respanse.optJSONObject("data").optJSONObject("file")); AttachmentFolderObject folder = new AttachmentFolderObject(); AttachmentFileObject folderFile = fileObject; if (fileObject.isImage() || fileObject.isGif()) { AttachmentsPicDetailActivity_.intent(this) .mProjectObjectId(projectId) .mAttachmentFolderObject(folder) .mAttachmentFileObject(folderFile) .start(); } else if (AttachmentFileObject.isMd(fileObject.fileType)) { AttachmentsHtmlDetailActivity_.intent(this) .mProjectObjectId(projectId) .mAttachmentFolderObject(folder) .mAttachmentFileObject(folderFile) .start(); } else if (AttachmentFileObject.isTxt(fileObject.fileType)) { AttachmentsTextDetailActivity_.intent(this) .mProjectObjectId(projectId) .mAttachmentFolderObject(folder) .mAttachmentFileObject(folderFile) .start(); } else { AttachmentsDownloadDetailActivity_.intent(this) .mProjectObjectId(projectId) .mAttachmentFolderObject(folder) .mAttachmentFileObject(folderFile) .start(); } overridePendingTransition(0, 0); } else { showErrorMsg(code, respanse); } finish(); } } }