Skip to content
Snippets Groups Projects
Commit 9fce4e3b authored by Jawnnypoo's avatar Jawnnypoo
Browse files

Add a download option to the overflow to download the artifact

parent 79e62aa1
No related branches found
No related tags found
No related merge requests found
Pipeline #
Loading
Loading
@@ -12,14 +12,16 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
 
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.App;
import com.commit451.gitlab.R;
import com.commit451.gitlab.adapter.BuildSectionsPagerAdapter;
import com.commit451.easycallback.EasyCallback;
import com.commit451.gitlab.api.GitLabFactory;
import com.commit451.gitlab.event.BuildChangedEvent;
import com.commit451.gitlab.model.Account;
import com.commit451.gitlab.model.api.Build;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.util.BuildUtil;
import com.commit451.gitlab.util.DownloadUtil;
 
import org.parceler.Parcels;
 
Loading
Loading
@@ -53,6 +55,8 @@ public class BuildActivity extends BaseActivity {
@BindView(R.id.progress)
View mProgress;
 
MenuItem mMenuItemDownload;
Project mProject;
Build mBuild;
 
Loading
Loading
@@ -126,6 +130,12 @@ public class BuildActivity extends BaseActivity {
mProgress.setVisibility(View.VISIBLE);
App.instance().getGitLab().cancelBuild(mProject.getId(), mBuild.getId()).enqueue(mCancelCallback);
return true;
case R.id.action_download:
Account account = App.instance().getAccount();
String downloadUrl = BuildUtil.getDownloadBuildUrl(App.instance().getAccount().getServerUrl(), mProject, mBuild);
Timber.d("Downloading build: " + downloadUrl);
DownloadUtil.download(BuildActivity.this, account, downloadUrl, mBuild.getArtifactsFile().getFileName());
return true;
}
return false;
}
Loading
Loading
@@ -151,6 +161,8 @@ public class BuildActivity extends BaseActivity {
mToolbar.setSubtitle(mProject.getNameWithNamespace());
mToolbar.inflateMenu(R.menu.menu_build);
mToolbar.setOnMenuItemClickListener(mOnMenuItemClickListener);
mMenuItemDownload = mToolbar.getMenu().findItem(R.id.action_download);
mMenuItemDownload.setVisible(mBuild.getArtifactsFile() != null);
setupTabs();
}
 
Loading
Loading
Loading
Loading
@@ -15,8 +15,8 @@ import timber.log.Timber;
*/
public class AuthenticationRequestInterceptor implements Interceptor {
 
private static final String AUTHORIZATION_HEADER_FIELD = "Authorization";
private static final String PRIVATE_TOKEN_HEADER_FIELD = "PRIVATE-TOKEN";
public static final String AUTHORIZATION_HEADER_FIELD = "Authorization";
public static final String PRIVATE_TOKEN_HEADER_FIELD = "PRIVATE-TOKEN";
private static final String PRIVATE_TOKEN_GET_PARAMETER = "private_token";
 
private Account mAccount;
Loading
Loading
Loading
Loading
@@ -97,7 +97,7 @@ public class BuildLogFragment extends ButterKnifeFragment {
}
});
 
String url = BuildUtil.getRawBuildUrl(App.instance().getAccount().getServerUrl().toString(), mProject, mBuild);
String url = BuildUtil.getRawBuildUrl(App.instance().getAccount().getServerUrl(), mProject, mBuild);
 
App.instance().getGitLab().getRaw(url).enqueue(new EasyCallback<String>() {
@Override
Loading
Loading
package com.commit451.gitlab.model.api;
import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
import org.parceler.Parcel;
@JsonObject
@Parcel
public class ArtifactsFile {
@JsonField(name = "filename")
String mFileName;
@JsonField(name = "size")
long mSize;
public String getFileName() {
return mFileName;
}
public long getSize() {
return mSize;
}
}
Loading
Loading
@@ -21,7 +21,7 @@ public class Build {
@JsonField(name = "created_at")
Date mCreatedAt;
@JsonField(name = "artifacts_file")
String mArtifactsFile;
ArtifactsFile mArtifactsFile;
@JsonField(name = "finished_at")
Date mFinishedAt;
@JsonField(name = "id")
Loading
Loading
@@ -55,7 +55,7 @@ public class Build {
return mCreatedAt;
}
 
public String getArtifactsFile() {
public ArtifactsFile getArtifactsFile() {
return mArtifactsFile;
}
 
Loading
Loading
package com.commit451.gitlab.util;
 
 
import android.net.Uri;
import com.commit451.gitlab.api.GitLab;
import com.commit451.gitlab.model.api.Build;
import com.commit451.gitlab.model.api.Project;
 
Loading
Loading
@@ -9,7 +12,11 @@ import com.commit451.gitlab.model.api.Project;
*/
public class BuildUtil {
 
public static String getRawBuildUrl(String baseUrl, Project project, Build build) {
public static String getRawBuildUrl(Uri baseUrl, Project project, Build build) {
return baseUrl + project.getPathWithNamespace() + "/builds/" + build.getId() + "/raw";
}
public static String getDownloadBuildUrl(Uri baseUrl, Project project, Build build) {
return baseUrl + GitLab.API_VERSION + "/projects/" + project.getId() + "/builds/" + build.getId() + "/artifacts";
}
}
package com.commit451.gitlab.util;
import android.app.DownloadManager;
import android.content.Context;
import android.net.Uri;
import android.os.Environment;
import com.commit451.gitlab.api.AuthenticationRequestInterceptor;
import com.commit451.gitlab.model.Account;
/**
* Easy usage of {@link android.app.DownloadManager}
*/
public class DownloadUtil {
public static void download(Context context, Account account, String url, String filename) {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setTitle(filename);
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);
request.addRequestHeader(AuthenticationRequestInterceptor.PRIVATE_TOKEN_HEADER_FIELD, account.getPrivateToken());
// get download service and enqueue file
DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
}
}
Loading
Loading
@@ -16,4 +16,9 @@
android:id="@+id/action_cancel"
app:showAsAction="never"
android:title="@string/action_cancel"/>
<item
android:id="@+id/action_download"
app:showAsAction="never"
android:title="@string/action_download"/>
</menu>
\ No newline at end of file
Loading
Loading
@@ -31,6 +31,7 @@
<string name="action_delete">Delete</string>
<string name="action_copy_git_https">Copy git https link</string>
<string name="action_copy_git_ssh">Copy git ssh link</string>
<string name="action_download">Download</string>
 
<!-- Tabs -->
<string name="title_project">Project</string>
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment