public static List<GithubIssue> getIssuesQueried(@NotNull GithubConnection connection,
@NotNull String user,
@NotNull String repo,
+ @Nullable String assignedUser,
@Nullable String query,
boolean withClosed) throws IOException {
try {
String state = withClosed ? "" : " state:open";
- query = URLEncoder.encode("repo:" + user + "/" + repo + " " + query + state, CharsetToolkit.UTF8);
+ String assignee = StringUtil.isEmptyOrSpaces(assignedUser) ? "" : " assignee:" + assignedUser;
+ query = URLEncoder.encode("repo:" + user + "/" + repo + state + assignee + " " + query, CharsetToolkit.UTF8);
String path = "/search/issues?q=" + query;
//TODO: Use bodyHtml for issues - GitHub does not support this feature for SearchApi yet
@NotNull private String myRepoName = "";
@NotNull private String myUser = "";
@NotNull private String myToken = "";
+ private boolean myAssignedIssuesOnly = false;
@SuppressWarnings({"UnusedDeclaration"})
public GithubRepository() {
setRepoName(other.myRepoName);
setRepoAuthor(other.myRepoAuthor);
setToken(other.myToken);
+ setAssignedIssuesOnly(other.myAssignedIssuesOnly);
}
public GithubRepository(GithubRepositoryType type) {
@Override
protected void doTest() throws Exception {
try {
- GithubApiUtil.getIssuesQueried(myConnection, getRepoAuthor(), getRepoName(), "", false);
+ GithubApiUtil.getIssuesQueried(myConnection, getRepoAuthor(), getRepoName(), null, null, false);
}
catch (GithubOperationCanceledException ignore) {
}
GithubConnection connection = getConnection();
try {
- List<GithubIssue> issues;
- if (StringUtil.isEmptyOrSpaces(query)) {
+ String assigned = null;
+ if (myAssignedIssuesOnly) {
if (StringUtil.isEmptyOrSpaces(myUser)) {
myUser = GithubApiUtil.getCurrentUser(connection).getLogin();
}
- issues = GithubApiUtil.getIssuesAssigned(connection, getRepoAuthor(), getRepoName(), myUser, max, withClosed);
+ assigned = myUser;
+ }
+
+ List<GithubIssue> issues;
+ if (StringUtil.isEmptyOrSpaces(query)) {
+ // search queries have way smaller request number limit
+ issues =
+ GithubApiUtil.getIssuesAssigned(connection, getRepoAuthor(), getRepoName(), assigned, max, withClosed);
}
else {
- issues = GithubApiUtil.getIssuesQueried(connection, getRepoAuthor(), getRepoName(), query, withClosed);
+ issues =
+ GithubApiUtil.getIssuesQueried(connection, getRepoAuthor(), getRepoName(), assigned, query, withClosed);
}
return ContainerUtil.map2Array(issues, Task.class, new Function<GithubIssue, Task>() {
setUser("");
}
+ public boolean isAssignedIssuesOnly() {
+ return myAssignedIssuesOnly;
+ }
+
+ public void setAssignedIssuesOnly(boolean value) {
+ myAssignedIssuesOnly = value;
+ }
+
@Tag("token")
public String getEncodedToken() {
return PasswordUtil.encodePassword(getToken());
if (!Comparing.equal(getRepoAuthor(), that.getRepoAuthor())) return false;
if (!Comparing.equal(getRepoName(), that.getRepoName())) return false;
if (!Comparing.equal(getToken(), that.getToken())) return false;
+ if (!Comparing.equal(isAssignedIssuesOnly(), that.isAssignedIssuesOnly())) return false;
return true;
}
+ @Override
+ public int hashCode() {
+ return StringUtil.stringHashCode(getRepoName()) +
+ 31 * StringUtil.stringHashCode(getRepoAuthor());
+ }
+
@Override
protected int getFeatures() {
return super.getFeatures() | STATE_UPDATING;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.tasks.config.BaseRepositoryEditor;
import com.intellij.ui.DocumentAdapter;
+import com.intellij.ui.components.JBCheckBox;
import com.intellij.ui.components.JBLabel;
import com.intellij.ui.components.JBTextField;
import com.intellij.util.Consumer;
private MyTextField myRepoAuthor;
private MyTextField myRepoName;
private MyTextField myToken;
+ private JBCheckBox myAssignedIssuesOnly;
private JButton myTokenButton;
private JBLabel myHostLabel;
private JBLabel myRepositoryLabel;
myRepoAuthor.setText(repository.getRepoAuthor());
myRepoName.setText(repository.getRepoName());
myToken.setText(repository.getToken());
+ myToken.setText(repository.getToken());
+ myAssignedIssuesOnly.setSelected(repository.isAssignedIssuesOnly());
DocumentListener buttonUpdater = new DocumentAdapter() {
@Override
myTokenPanel.add(myToken, BorderLayout.CENTER);
myTokenPanel.add(myTokenButton, BorderLayout.EAST);
+ myAssignedIssuesOnly = new JBCheckBox("Assigned Issues Only");
+
installListener(myRepoAuthor);
installListener(myRepoName);
installListener(myToken);
-
- return FormBuilder.createFormBuilder().setAlignLabelOnRight(true).addLabeledComponent(myHostLabel, myHostPanel)
- .addLabeledComponent(myRepositoryLabel, myRepoPanel).addLabeledComponent(myTokenLabel, myTokenPanel).getPanel();
+ installListener(myAssignedIssuesOnly);
+
+ return FormBuilder.createFormBuilder()
+ .setAlignLabelOnRight(true)
+ .addLabeledComponent(myHostLabel, myHostPanel)
+ .addLabeledComponent(myRepositoryLabel, myRepoPanel)
+ .addLabeledComponent(myTokenLabel, myTokenPanel)
+ .addComponent(myAssignedIssuesOnly)
+ .getPanel();
}
@Override
myRepository.setRepoName(getRepoName());
myRepository.setRepoAuthor(getRepoAuthor());
myRepository.setToken(getToken());
+ myRepository.setAssignedIssuesOnly(isAssignedIssuesOnly());
super.apply();
}
myHostLabel.setAnchor(anchor);
myRepositoryLabel.setAnchor(anchor);
myTokenLabel.setAnchor(anchor);
+ myAssignedIssuesOnly.setAnchor(anchor);
}
private void updateTokenButton() {
return myToken.getText().trim();
}
+ private boolean isAssignedIssuesOnly() {
+ return myAssignedIssuesOnly.isSelected();
+ }
+
public static class MyTextField extends JBTextField {
private int myWidth = -1;
}
public void testQueriedIssues1() throws Exception {
- List<GithubIssue> result = GithubApiUtil.getIssuesQueried(new GithubConnection(myAuth), myLogin2, REPO_NAME, "abracadabra", true);
+ List<GithubIssue> result = GithubApiUtil.getIssuesQueried(new GithubConnection(myAuth), myLogin2, REPO_NAME, null, "abracadabra", true);
List<Long> issues = ContainerUtil.map(result, new Function<GithubIssue, Long>() {
@Override
public Long fun(GithubIssue githubIssue) {
}
public void testQueriedIssues2() throws Exception {
- List<GithubIssue> result = GithubApiUtil.getIssuesQueried(new GithubConnection(myAuth), myLogin2, REPO_NAME, "commentary", true);
+ List<GithubIssue> result = GithubApiUtil.getIssuesQueried(new GithubConnection(myAuth), myLogin2, REPO_NAME, null, "commentary", true);
List<Long> issues = ContainerUtil.map(result, new Function<GithubIssue, Long>() {
@Override
public Long fun(GithubIssue githubIssue) {
}
public void testQueriedIssues3() throws Exception {
- List<GithubIssue> result = GithubApiUtil.getIssuesQueried(new GithubConnection(myAuth), myLogin2, REPO_NAME, "abracadabra", false);
+ List<GithubIssue> result = GithubApiUtil.getIssuesQueried(new GithubConnection(myAuth), myLogin2, REPO_NAME, null, "abracadabra", false);
List<Long> issues = ContainerUtil.map(result, new Function<GithubIssue, Long>() {
@Override
public Long fun(GithubIssue githubIssue) {