package net.coding.program.project.detail;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.FileAsyncHttpResponseHandler;
import net.coding.program.ImagePagerFragment;
import net.coding.program.ImagePagerFragment_;
import net.coding.program.R;
import net.coding.program.common.Global;
import net.coding.program.common.network.MyAsyncHttpClient;
import net.coding.program.common.ui.BackActivity;
import net.coding.program.common.url.UrlCreate;
import net.coding.program.model.GitFileBlobObject;
import net.coding.program.model.GitFileInfoObject;
import net.coding.program.model.ProjectObject;
import net.coding.program.project.git.BranchCommitListActivity_;
import net.coding.program.project.git.EditCodeActivity_;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.OnActivityResult;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.OptionsMenu;
import org.androidannotations.annotations.ViewById;
import org.apache.http.Header;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@EActivity(R.layout.activity_gitview)
@OptionsMenu(R.menu.git_view)
public class GitViewActivity extends BackActivity {
private static String TAG = GitViewActivity.class.getSimpleName();
private static final int RESULT_EDIT = 1;
@Extra
String mProjectPath;
@Extra
GitFileInfoObject mGitFileInfoObject;
@Extra
String mVersion = ProjectGitFragment.MASTER;
@ViewById
WebView webview;
@ViewById
ViewPager pager;
int mPagerPosition = 0;
ImagePager adapter;
ArrayList<String> mArrayUri;
AsyncHttpClient client;
File mTempPicFile;
String urlBlob = Global.HOST_API + "%s/git/blob/%s/%s";
String urlImage = Global.HOST + "%s/git/raw/%s/%s";
GitFileBlobObject mFile;
@AfterViews
protected final void initGitViewActivity() {
setActionBarTitle(mGitFileInfoObject.name);
client = MyAsyncHttpClient.createClient(GitViewActivity.this);
urlBlob = String.format(urlBlob, mProjectPath, mVersion, Global.encodeUtf8(Global.encodeUtf8(mGitFileInfoObject.path)));
webview.getSettings().setBuiltInZoomControls(true);
Global.initWebView(webview);
mArrayUri = new ArrayList<>();
adapter = new ImagePager(getSupportFragmentManager());
pager.setAdapter(adapter);
showDialogLoading();
getNetwork(urlBlob, urlBlob);
}
@OptionsItem
void action_edit() {
EditCodeActivity_.intent(this)
.mProjectPath(mProjectPath)
.mGitFileInfoObject(mGitFileInfoObject)
.mVersion(mVersion)
.mGitAll(mFile)
.startForResult(RESULT_EDIT);
}
@OptionsItem
void action_history() {
String peek = mGitFileInfoObject.path;
if (peek.isEmpty() && mVersion.isEmpty()) {
showButtomToast("没有Commit记录");
return;
}
String commitUrl = UrlCreate.gitTreeCommit(mProjectPath, mVersion, peek);
BranchCommitListActivity_.intent(this).mCommitsUrl(commitUrl).start();
// RedPointTip.markUsed(getActivity(), RedPointTip.Type.CodeHistory);
}
// @OptionsItem
// void action_commit() {
//
// }
@OnActivityResult(RESULT_EDIT)
void onResultEdit(int resultCode, @OnActivityResult.Extra GitFileBlobObject resultData) {
if (resultCode == RESULT_OK) {
mFile = resultData;
bindUIByData();
}
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data) throws JSONException {
if (tag.equals(urlBlob)) {
hideProgressDialog();
if (code == 0) {
mFile = new GitFileBlobObject(respanse.getJSONObject("data"));
bindUIByData();
} else {
hideProgressDialog();
showErrorMsg(code, respanse);
}
}
}
public void bindUIByData() {
if (mFile.getGitFileObject().mode.equals("image")) {
try {
mTempPicFile = File.createTempFile("Coding_", ".tmp", getCacheDir());
mTempPicFile.deleteOnExit();
String s = ProjectObject.translatePathToOld(mProjectPath);
download(String.format(urlImage, s, mVersion, mFile.getGitFileObject().path));
} catch (IOException e) {
showButtomToast("图片无法下载");
}
} else {
pager.setVisibility(View.GONE);
Global.setWebViewContent(webview, mFile.getGitFileObject());
}
}
private void download(String url) {
//url = "https://coding.net/api/project/5166/files/58705/download";
//File mFile = FileUtil.getDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, mFileObject.name);
Log.d(TAG, "FileUrl:" + url);
client.get(GitViewActivity.this, url, new FileAsyncHttpResponseHandler(mTempPicFile) {
@Override
public void onFailure(int statusCode, Header[] headers, Throwable throwable, File file) {
for (Header header : headers) {
Log.v(TAG, "onFailure:" + statusCode + " " + header.getName() + ":" + header.getValue());
}
showButtomToast("下载失败");
}
@Override
public void onSuccess(int statusCode, Header[] headers, File response) {
mArrayUri.add("file:///" + response.getAbsolutePath());
adapter.notifyDataSetChanged();
pager.setVisibility(View.VISIBLE);
}
});
}
// @Override
// protected String getLink() {
// String s = ProjectObject.translatePathToOld(mProjectPath);
// return Global.HOST + s + "/git/blob/" + mVersion + "/" + mGitFileInfoObject.path;
// }
class ImagePager extends FragmentPagerAdapter {
public ImagePager(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
ImagePagerFragment_ fragment = new ImagePagerFragment_();
Bundle bundle = new Bundle();
bundle.putString("uri", mArrayUri.get(i));
fragment.setArguments(bundle);
return fragment;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImagePagerFragment fragment = (ImagePagerFragment) super.instantiateItem(container, position);
fragment.setData(mArrayUri.get(position));
return fragment;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public int getCount() {
return mArrayUri.size();
}
}
}