Some fixes and cleanups for PRs (#1146)

1. improve menu time (show when loading finished)
2. fix crashes from deleted forks

I mainly tried to fix issue https://codeberg.org/gitnex/GitNex/issues/1137, but:
1. the missing UI options are Gitea's issue (the permission values are not correct when using notification endpoints)
2. the comments crash is an `SQLiteConstraintException` which we had already in #1084 but it seems that it wasn't fixed

Closes https://codeberg.org/gitnex/GitNex/issues/1137 closes https://codeberg.org/gitnex/GitNex/issues/1144

Co-authored-by: qwerty287 <ndev@web.de>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/1146
Reviewed-by: M M Arif <mmarif@noreply.codeberg.org>
Co-authored-by: qwerty287 <qwerty287@noreply.codeberg.org>
Co-committed-by: qwerty287 <qwerty287@noreply.codeberg.org>
This commit is contained in:
qwerty287 2022-05-21 11:38:15 +02:00 committed by M M Arif
parent 7e9d494a49
commit 6916989ec1
17 changed files with 83 additions and 175 deletions

View File

@ -93,7 +93,7 @@ public class IssueActions {
IssuesFragment.resumeIssues = issue.getIssue().getPullRequest() == null; IssuesFragment.resumeIssues = issue.getIssue().getPullRequest() == null;
PullRequestsFragment.resumePullRequests = issue.getIssue().getPullRequest() != null; PullRequestsFragment.resumePullRequests = issue.getIssue().getPullRequest() != null;
} }
if(issue.getIssueType().equals("Pull")) { if(issue.getIssueType().equalsIgnoreCase("Pull")) {
if(issueState.equals("closed")) { if(issueState.equals("closed")) {
Toasty.success(ctx, ctx.getString(R.string.prClosed)); Toasty.success(ctx, ctx.getString(R.string.prClosed));
} }

View File

@ -180,23 +180,9 @@ public class DeepLinksActivity extends BaseActivity {
"Issue" "Issue"
); );
final String repoOwner = data.getPathSegments().get(0); issue.getRepository().saveToDB(ctx);
final String repoName = data.getPathSegments().get(1);
int currentActiveAccountId = tinyDB.getInt("currentActiveAccountId"); issueIntent.putExtra(IssueContext.INTENT_EXTRA, issueIntent);
RepositoriesApi repositoryData = BaseApi.getInstance(ctx, RepositoriesApi.class);
assert repositoryData != null;
Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
int repoId;
if(count == 0) {
repoId = (int) repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
}
else {
repoId = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName).getRepositoryId();
}
issue.getRepository().setRepositoryId(repoId);
ctx.startActivity(issueIntent); ctx.startActivity(issueIntent);
finish(); finish();
@ -384,20 +370,7 @@ public class DeepLinksActivity extends BaseActivity {
IssueContext issue = new IssueContext(prInfo, new RepositoryContext(repoOwner, repoName, ctx)); IssueContext issue = new IssueContext(prInfo, new RepositoryContext(repoOwner, repoName, ctx));
int currentActiveAccountId = tinyDB.getInt("currentActiveAccountId"); issue.getRepository().saveToDB(ctx);
RepositoriesApi repositoryData = BaseApi.getInstance(ctx, RepositoriesApi.class);
assert repositoryData != null;
Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
int id;
if(count == 0) {
id = (int) repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
}
else {
id = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName).getRepositoryId();
}
issue.getRepository().setRepositoryId(id);
issueIntent.putExtra(IssueContext.INTENT_EXTRA, issue); issueIntent.putExtra(IssueContext.INTENT_EXTRA, issue);
ctx.startActivity(issueIntent); ctx.startActivity(issueIntent);
@ -442,20 +415,7 @@ public class DeepLinksActivity extends BaseActivity {
repoIntent.putExtra("goToSection", "yes"); repoIntent.putExtra("goToSection", "yes");
repoIntent.putExtra("goToSectionType", type); repoIntent.putExtra("goToSectionType", type);
int currentActiveAccountId = tinyDB.getInt("currentActiveAccountId"); repo.saveToDB(ctx);
RepositoriesApi repositoryData = BaseApi.getInstance(ctx, RepositoriesApi.class);
Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
int id;
if(count == 0) {
id = (int) repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
}
else {
id = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName).getRepositoryId();
}
repo.setRepositoryId(id);
repoIntent.putExtra(RepositoryContext.INTENT_EXTRA, repo); repoIntent.putExtra(RepositoryContext.INTENT_EXTRA, repo);
ctx.startActivity(repoIntent); ctx.startActivity(repoIntent);

View File

@ -116,7 +116,7 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
public static boolean singleIssueUpdate = false; public static boolean singleIssueUpdate = false;
public boolean commentEdited = false; public boolean commentEdited = false;
public boolean commentPosted = false; public static boolean commentPosted = false;
private IssueCommentsViewModel issueCommentsModel; private IssueCommentsViewModel issueCommentsModel;
@ -415,18 +415,28 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
}); });
} }
private Runnable showMenu = () -> {};
private boolean loadingFinishedIssue = false;
private boolean loadingFinishedPr = false;
private boolean loadingFinishedRepo = false;
private void updateMenuState() {
if(loadingFinishedIssue && loadingFinishedPr && loadingFinishedRepo) showMenu.run();
}
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater(); MenuInflater inflater = getMenuInflater();
new Handler().postDelayed(() -> { showMenu = () -> {
inflater.inflate(R.menu.generic_nav_dotted_menu, menu); inflater.inflate(R.menu.generic_nav_dotted_menu, menu);
if(issue.getIssueType() != null) { if(issue.getIssueType() != null) {
if(issue.getIssueType().equalsIgnoreCase("pull")) { if(issue.getIssueType().equalsIgnoreCase("pull")) {
inflater.inflate(R.menu.pr_info_menu, menu); inflater.inflate(R.menu.pr_info_menu, menu);
} }
} }
}, 800); showMenu = () -> {}; // reset Runnable
};
updateMenuState();
return true; return true;
} }
@ -437,7 +447,8 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
if(id == android.R.id.home) { if(id == android.R.id.home) {
if(getIntent().getStringExtra("openedFromLink") != null && getIntent().getStringExtra("openedFromLink").equals("true")) { if(issue.hasIssue() && getIntent().getStringExtra("openedFromLink") != null &&
getIntent().getStringExtra("openedFromLink").equals("true")) {
Intent intent = issue.getRepository().getIntent(ctx, RepoDetailActivity.class); Intent intent = issue.getRepository().getIntent(ctx, RepoDetailActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent); startActivity(intent);
@ -455,20 +466,22 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
} }
else if(id == R.id.prInfo) { else if(id == R.id.prInfo) {
View view = LayoutInflater.from(ctx).inflate(R.layout.custom_pr_info_dialog, null); if(issue.getPullRequest() != null) {
View view = LayoutInflater.from(ctx).inflate(R.layout.custom_pr_info_dialog, null);
TextView baseBranch = view.findViewById(R.id.baseBranch); TextView baseBranch = view.findViewById(R.id.baseBranch);
TextView headBranch = view.findViewById(R.id.headBranch); TextView headBranch = view.findViewById(R.id.headBranch);
baseBranch.setText(issue.getPullRequest().getBase().getRef()); baseBranch.setText(issue.getPullRequest().getBase().getRef());
headBranch.setText(issue.getPullRequest().getHead().getRef()); headBranch.setText(issue.getPullRequest().getHead().getRef());
AlertDialog.Builder alertDialog = new AlertDialog.Builder(ctx); AlertDialog.Builder alertDialog = new AlertDialog.Builder(ctx);
alertDialog.setTitle(getResources().getString(R.string.prMergeInfo)); alertDialog.setTitle(getResources().getString(R.string.prMergeInfo));
alertDialog.setView(view); alertDialog.setView(view);
alertDialog.setPositiveButton(getString(R.string.okButton), null); alertDialog.setPositiveButton(getString(R.string.okButton), null);
alertDialog.create().show(); alertDialog.create().show();
}
return true; return true;
} }
else { else {
@ -623,7 +636,11 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
private void initWithIssue() { private void initWithIssue() {
if(!issue.getRepository().hasRepository()) { if(!issue.getRepository().hasRepository()) {
getRepoInfo(); getRepoInfo();
} else {
loadingFinishedRepo = true;
} }
loadingFinishedIssue = true;
updateMenuState();
viewBinding.issuePrState.setVisibility(View.VISIBLE); viewBinding.issuePrState.setVisibility(View.VISIBLE);
@ -646,10 +663,13 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
} }
} }
else if(issue.getIssue().getState().equals("closed")) { // issue closed else if(issue.getIssue().getState().equals("closed")) { // issue closed
loadingFinishedPr = true;
updateMenuState();
viewBinding.issuePrState.setImageResource(R.drawable.ic_issue); viewBinding.issuePrState.setImageResource(R.drawable.ic_issue);
ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.iconIssuePrClosedColor))); ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.iconIssuePrClosedColor)));
} else { } else {
loadingFinishedPr = true;
updateMenuState();
viewBinding.issuePrState.setImageResource(R.drawable.ic_issue); viewBinding.issuePrState.setImageResource(R.drawable.ic_issue);
ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.darkGreen))); ImageViewCompat.setImageTintList(viewBinding.issuePrState, ColorStateList.valueOf(ctx.getResources().getColor(R.color.darkGreen)));
} }
@ -878,6 +898,8 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
public void onResponse(@NonNull Call<PullRequest> call, @NonNull Response<PullRequest> response) { public void onResponse(@NonNull Call<PullRequest> call, @NonNull Response<PullRequest> response) {
if(response.isSuccessful() && response.body() != null) { if(response.isSuccessful() && response.body() != null) {
issue.setPullRequest(response.body()); issue.setPullRequest(response.body());
loadingFinishedPr = true;
updateMenuState();
} }
} }
@ -899,6 +921,8 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
if(response.code() == 200) { if(response.code() == 200) {
assert repoInfo != null; assert repoInfo != null;
issue.getRepository().setRepository(repoInfo); issue.getRepository().setRepository(repoInfo);
loadingFinishedRepo = true;
updateMenuState();
} }
else { else {
Toasty.error(ctx, getString(R.string.genericError)); Toasty.error(ctx, getString(R.string.genericError));

View File

@ -99,7 +99,7 @@ public class MergePullRequestActivity extends BaseActivity {
viewBinding.mergeButton.setOnClickListener(mergePullRequest); viewBinding.mergeButton.setOnClickListener(mergePullRequest);
} }
if(!issue.getPullRequest().getHead().getRepo().getPermissions().isPush()) { if(!(issue.getPullRequest().getHead().getRepo() != null ? issue.getPullRequest().getHead().getRepo().getPermissions().isPush() : false)) {
viewBinding.deleteBranch.setVisibility(View.GONE); viewBinding.deleteBranch.setVisibility(View.GONE);
viewBinding.deleteBranchForkInfo.setVisibility(View.GONE); viewBinding.deleteBranchForkInfo.setVisibility(View.GONE);
} }

View File

@ -89,7 +89,7 @@ public class DiffAdapter extends BaseAdapter {
} }
if(type.equals("pull")) { if(type.equalsIgnoreCase("pull")) {
convertView.setOnClickListener(v -> { convertView.setOnClickListener(v -> {
if(selectedLines.contains(position)) { if(selectedLines.contains(position)) {

View File

@ -119,22 +119,9 @@ public class ExploreIssuesAdapter extends RecyclerView.Adapter<RecyclerView.View
final String repoOwner = parts[0]; final String repoOwner = parts[0];
final String repoName = parts[1]; final String repoName = parts[1];
int currentActiveAccountId = ((BaseActivity) context).getAccount().getAccount().getAccountId();
RepositoriesApi repositoryData = BaseApi.getInstance(context, RepositoriesApi.class);
assert repositoryData != null;
Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
RepositoryContext repo = new RepositoryContext(repoOwner, repoName, context); RepositoryContext repo = new RepositoryContext(repoOwner, repoName, context);
if(count == 0) { repo.saveToDB(context);
long id = repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
repo.setRepositoryId((int) id);
}
else {
Repository data = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName);
repo.setRepositoryId(data.getRepositoryId());
}
Intent intentIssueDetail = new IssueContext(issue, repo).getIntent(context, IssueDetailActivity.class); Intent intentIssueDetail = new IssueContext(issue, repo).getIntent(context, IssueDetailActivity.class);
intentIssueDetail.putExtra("openedFromLink", "true"); intentIssueDetail.putExtra("openedFromLink", "true");

View File

@ -102,23 +102,9 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<RecyclerVie
itemView.setOnClickListener(v -> { itemView.setOnClickListener(v -> {
Context context = v.getContext(); Context context = v.getContext();
RepositoryContext repo = new RepositoryContext(userRepositories, context); RepositoryContext repo = new RepositoryContext(userRepositories, context);
repo.saveToDB(context);
Intent intent = repo.getIntent(context, RepoDetailActivity.class); Intent intent = repo.getIntent(context, RepoDetailActivity.class);
int currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
RepositoriesApi repositoryData = BaseApi.getInstance(context, RepositoriesApi.class);
assert repositoryData != null;
Integer count = repositoryData.checkRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
if(count == 0) {
long id = repositoryData.insertRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
repo.setRepositoryId((int) id);
}
else {
Repository data = repositoryData.getRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
repo.setRepositoryId(data.getRepositoryId());
}
context.startActivity(intent); context.startActivity(intent);
}); });
} }

View File

@ -179,26 +179,10 @@ public class RepoForksAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
Context context = v.getContext(); Context context = v.getContext();
String[] parts = userRepositories.getFullName().split("/"); String[] parts = userRepositories.getFullName().split("/");
final String repoOwner = parts[0];
final String repoName = parts[1];
RepositoryContext repo = new RepositoryContext(userRepositories, context); RepositoryContext repo = new RepositoryContext(userRepositories, context);
repo.saveToDB(context);
Intent intent = repo.getIntent(context, RepoDetailActivity.class); Intent intent = repo.getIntent(context, RepoDetailActivity.class);
int currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
RepositoriesApi repositoryData = BaseApi.getInstance(context, RepositoriesApi.class);
assert repositoryData != null;
Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
if(count == 0) {
long id = repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
repo.setRepositoryId((int) id);
}
else {
Repository data = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName);
repo.setRepositoryId(data.getRepositoryId());
}
context.startActivity(intent); context.startActivity(intent);
}); });

View File

@ -110,23 +110,9 @@ public class ReposListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
itemView.setOnClickListener(v -> { itemView.setOnClickListener(v -> {
Context context = v.getContext(); Context context = v.getContext();
RepositoryContext repo = new RepositoryContext(userRepositories, context); RepositoryContext repo = new RepositoryContext(userRepositories, context);
repo.saveToDB(context);
Intent intent = repo.getIntent(context, RepoDetailActivity.class); Intent intent = repo.getIntent(context, RepoDetailActivity.class);
int currentActiveAccountId = TinyDB.getInstance(context).getInt("currentActiveAccountId");
RepositoriesApi repositoryData = BaseApi.getInstance(context, RepositoriesApi.class);
assert repositoryData != null;
Integer count = repositoryData.checkRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
if(count == 0) {
long id = repositoryData.insertRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
repo.setRepositoryId((int) id);
}
else {
Repository data = repositoryData.getRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
repo.setRepositoryId(data.getRepositoryId());
}
context.startActivity(intent); context.startActivity(intent);
}); });
} }

View File

@ -99,23 +99,9 @@ public class RepositoriesAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
itemView.setOnClickListener(v -> { itemView.setOnClickListener(v -> {
Context context = v.getContext(); Context context = v.getContext();
RepositoryContext repo = new RepositoryContext(userRepositories, context); RepositoryContext repo = new RepositoryContext(userRepositories, context);
repo.saveToDB(context);
Intent intent = repo.getIntent(context, RepoDetailActivity.class); Intent intent = repo.getIntent(context, RepoDetailActivity.class);
int currentActiveAccountId = TinyDB.getInstance(context).getInt("currentActiveAccountId");
RepositoriesApi repositoryData = BaseApi.getInstance(context, RepositoriesApi.class);
assert repositoryData != null;
Integer count = repositoryData.checkRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
if(count == 0) {
long id = repositoryData.insertRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
repo.setRepositoryId((int) id);
}
else {
org.mian.gitnex.database.models.Repository data = repositoryData.getRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
repo.setRepositoryId(data.getRepositoryId());
}
context.startActivity(intent); context.startActivity(intent);
}); });

View File

@ -99,23 +99,9 @@ public class StarredRepositoriesAdapter extends RecyclerView.Adapter<RecyclerVie
itemView.setOnClickListener(v -> { itemView.setOnClickListener(v -> {
Context context = v.getContext(); Context context = v.getContext();
RepositoryContext repo = new RepositoryContext(userRepositories, context); RepositoryContext repo = new RepositoryContext(userRepositories, context);
repo.saveToDB(context);
Intent intent = repo.getIntent(context, RepoDetailActivity.class); Intent intent = repo.getIntent(context, RepoDetailActivity.class);
int currentActiveAccountId = TinyDB.getInstance(context).getInt("currentActiveAccountId");
RepositoriesApi repositoryData = BaseApi.getInstance(context, RepositoriesApi.class);
assert repositoryData != null;
Integer count = repositoryData.checkRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
if(count == 0) {
long id = repositoryData.insertRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
repo.setRepositoryId((int) id);
}
else {
Repository data = repositoryData.getRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
repo.setRepositoryId(data.getRepositoryId());
}
context.startActivity(intent); context.startActivity(intent);
}); });
} }

View File

@ -29,6 +29,8 @@ import org.mian.gitnex.activities.IssueDetailActivity;
import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.activities.MainActivity;
import org.mian.gitnex.database.api.BaseApi; import org.mian.gitnex.database.api.BaseApi;
import org.mian.gitnex.database.api.DraftsApi; import org.mian.gitnex.database.api.DraftsApi;
import org.mian.gitnex.database.api.RepositoriesApi;
import org.mian.gitnex.database.models.Repository;
import org.mian.gitnex.databinding.BottomSheetReplyLayoutBinding; import org.mian.gitnex.databinding.BottomSheetReplyLayoutBinding;
import org.mian.gitnex.helpers.Constants; import org.mian.gitnex.helpers.Constants;
import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.TinyDB;
@ -186,10 +188,7 @@ public class BottomSheetReplyFragment extends BottomSheetDialogFragment {
if(status == ActionResult.Status.SUCCESS) { if(status == ActionResult.Status.SUCCESS) {
FragmentActivity activity = requireActivity(); IssueDetailActivity.commentPosted = true;
if(activity instanceof IssueDetailActivity) {
((IssueDetailActivity) activity).commentPosted = true;
}
Toasty.success(getContext(), getString(R.string.commentSuccess)); Toasty.success(getContext(), getString(R.string.commentSuccess));
@ -284,7 +283,7 @@ public class BottomSheetReplyFragment extends BottomSheetDialogFragment {
if(draftId == 0) { if(draftId == 0) {
draftId = draftsApi.insertDraft(issue.getRepository().getRepositoryId(), currentActiveAccountId, issue.getIssueIndex(), text, draftType, "TODO", issue.getIssueType()); draftId = draftsApi.insertDraft(issue.getRepository().saveToDB(requireContext()), currentActiveAccountId, issue.getIssueIndex(), text, draftType, "TODO", issue.getIssueType());
} }
else { else {

View File

@ -83,7 +83,8 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment {
binding.editIssue.setText(R.string.menuEditText); binding.editIssue.setText(R.string.menuEditText);
boolean canPushPullSource = issue.getPullRequest().getHead().getRepo().getPermissions().isPush(); boolean canPushPullSource = issue.getPullRequest().getHead().getRepo() != null ?
issue.getPullRequest().getHead().getRepo().getPermissions().isPush() : false;
if(issue.getPullRequest().isMerged() || issue.getIssue().getState().equals("closed")) { if(issue.getPullRequest().isMerged() || issue.getIssue().getState().equals("closed")) {
binding.updatePullRequest.setVisibility(View.GONE); binding.updatePullRequest.setVisibility(View.GONE);
binding.mergePullRequest.setVisibility(View.GONE); binding.mergePullRequest.setVisibility(View.GONE);

View File

@ -54,7 +54,7 @@ public class DiffFilesFragment extends Fragment {
binding.diffFiles.setOnItemClickListener((parent, view, position, id) -> requireActivity().getSupportFragmentManager() binding.diffFiles.setOnItemClickListener((parent, view, position, id) -> requireActivity().getSupportFragmentManager()
.beginTransaction() .beginTransaction()
.replace(R.id.fragment_container, DiffFragment.newInstance((FileDiffView) parent.getItemAtPosition(position), issue.getIssueType().toLowerCase())) .replace(R.id.fragment_container, DiffFragment.newInstance((FileDiffView) parent.getItemAtPosition(position), issue))
.commit()); .commit());
getPullDiffFiles(issue.getRepository().getOwner(), issue.getRepository().getName(), String.valueOf(issue.getIssueIndex())); getPullDiffFiles(issue.getRepository().getOwner(), issue.getRepository().getName(), String.valueOf(issue.getIssueIndex()));

View File

@ -44,6 +44,7 @@ public class DiffFragment extends Fragment {
DiffFragment fragment = new DiffFragment(); DiffFragment fragment = new DiffFragment();
fragment.setFileDiffView(fileDiffView); fragment.setFileDiffView(fileDiffView);
fragment.setIssue(issue); fragment.setIssue(issue);
fragment.type = "pull";
return fragment; return fragment;
} }

View File

@ -247,25 +247,14 @@ public class NotificationsFragment extends Fragment implements NotificationsAdap
if(StringUtils.containsAny(notificationThread.getSubject().getType().toLowerCase(), "pull", "issue")) { if(StringUtils.containsAny(notificationThread.getSubject().getType().toLowerCase(), "pull", "issue")) {
RepositoryContext repo = new RepositoryContext(notificationThread.getRepository(), context); RepositoryContext repo = new RepositoryContext(notificationThread.getRepository().getOwner().getLogin(),
notificationThread.getRepository().getName(), context); // we can't use the repository object here directly because the permissions are missing
String issueUrl = notificationThread.getSubject().getUrl(); String issueUrl = notificationThread.getSubject().getUrl();
int currentActiveAccountId = TinyDB.getInstance(requireContext()).getInt("currentActiveAccountId"); repo.saveToDB(context);
RepositoriesApi repositoryData = BaseApi.getInstance(context, RepositoriesApi.class);
Integer count = repositoryData.checkRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
if(count == 0) {
long id = repositoryData.insertRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
repo.setRepositoryId((int) id);
}
else {
Repository data = repositoryData.getRepository(currentActiveAccountId, repo.getOwner(), repo.getName());
repo.setRepositoryId(data.getRepositoryId());
}
Intent intent = new IssueContext( Intent intent = new IssueContext(
new RepositoryContext(notificationThread.getRepository(), context), repo,
Integer.parseInt(issueUrl.substring(issueUrl.lastIndexOf("/") + 1)), Integer.parseInt(issueUrl.substring(issueUrl.lastIndexOf("/") + 1)),
notificationThread.getSubject().getType() notificationThread.getSubject().getType()
).getIntent(context, IssueDetailActivity.class); ).getIntent(context, IssueDetailActivity.class);

View File

@ -235,4 +235,23 @@ public class RepositoryContext implements Serializable {
repository = null; repository = null;
} }
public int saveToDB(Context context) {
int currentActiveAccountId = TinyDB.getInstance(context).getInt("currentActiveAccountId");
RepositoriesApi repositoryData = BaseApi.getInstance(context, RepositoriesApi.class);
assert repositoryData != null;
Integer count = repositoryData.checkRepository(currentActiveAccountId, getOwner(), getName());
if(count == 0) {
long id = repositoryData.insertRepository(currentActiveAccountId, getOwner(), getName());
setRepositoryId((int) id);
return (int) id;
}
else {
Repository data = repositoryData.getRepository(currentActiveAccountId, getOwner(), getName());
setRepositoryId(data.getRepositoryId());
return data.getRepositoryId();
}
}
} }