diff --git a/src/main/scala/service/IssuesService.scala b/src/main/scala/service/IssuesService.scala index c9a3c81..a13dbf2 100644 --- a/src/main/scala/service/IssuesService.scala +++ b/src/main/scala/service/IssuesService.scala @@ -71,7 +71,8 @@ (t1.userName is owner.bind) && (t1.repositoryName is repository.bind) && (t1.closed is (condition.state == "closed").bind) && - (t1.milestoneId is condition.milestoneId.get.bind, condition.milestoneId.isDefined) && + (t1.milestoneId is condition.milestoneId.get.get.bind, condition.milestoneId.flatten.isDefined) && + (t1.milestoneId isNull, condition.milestoneId == Some(None)) && (t1.assignedUserName is userName.get.bind, filter == "assigned") && (t1.openedUserName is userName.get.bind, filter == "created_by") } @@ -151,7 +152,8 @@ (t1.userName is owner.bind) && (t1.repositoryName is repository.bind) && (t1.closed is (condition.state == "closed").bind) && - (t1.milestoneId is condition.milestoneId.get.bind, condition.milestoneId.isDefined) && + (t1.milestoneId is condition.milestoneId.get.get.bind, condition.milestoneId.flatten.isDefined) && + (t1.milestoneId isNull, condition.milestoneId == Some(None)) && (t1.assignedUserName is userName.get.bind, filter == "assigned") && (t1.openedUserName is userName.get.bind, filter == "created_by") && (IssueLabels filter { t2 => @@ -211,18 +213,21 @@ val IssueLimit = 30 case class IssueSearchCondition( - labels: Set[String] = Set.empty, - milestoneId: Option[Int] = None, - state: String = "open", - sort: String = "created", - direction: String = "desc"){ + labels: Set[String] = Set.empty, + milestoneId: Option[Option[Int]] = None, + state: String = "open", + sort: String = "created", + direction: String = "desc"){ import IssueSearchCondition._ def toURL: String = "?" + List( if(labels.isEmpty) None else Some("labels=" + urlEncode(labels.mkString(" "))), - milestoneId.map("milestone=" + _), + milestoneId.map { id => "milestone=" + (id match { + case Some(x) => x.toString + case None => "none" + })}, Some("state=" + urlEncode(state)), Some("sort=" + urlEncode(sort)), Some("direction=" + urlEncode(direction))).flatten.mkString("&") @@ -241,7 +246,10 @@ def apply(request: HttpServletRequest): IssueSearchCondition = IssueSearchCondition( param(request, "labels").map(_.split(" ").toSet).getOrElse(Set.empty), - param(request, "milestone").map(_.toInt), + param(request, "milestone").map(_ match { + case "none" => None + case x => Some(x.toInt) + }), param(request, "state", Seq("open", "closed")).getOrElse("open"), param(request, "sort", Seq("created", "comments", "updated")).getOrElse("created"), param(request, "direction", Seq("asc", "desc")).getOrElse("desc")) diff --git a/src/main/twirl/issues/issues.scala.html b/src/main/twirl/issues/issues.scala.html index 57af3e0..66a46ac 100644 --- a/src/main/twirl/issues/issues.scala.html +++ b/src/main/twirl/issues/issues.scala.html @@ -33,9 +33,13 @@