Browse Source

Use project to get scheduled meetings

Tyler Mandry 1 year ago
parent
commit
213da2a506
2 changed files with 30 additions and 8 deletions
  1. 5 5
      src/agenda.rs
  2. 25 3
      src/github.rs

+ 5 - 5
src/agenda.rs

@@ -475,10 +475,8 @@ pub fn lang<'a>() -> Box<dyn Action + Send + Sync> {
                     QueryMap {
                         name: "scheduled_meetings",
                         kind: QueryKind::List,
-                        query: Arc::new(github::Query {
-                            filters: vec![("state", "open"), ("is", "issue")],
-                            include_labels: vec!["meeting-proposal", "meeting-scheduled"],
-                            exclude_labels: vec![],
+                        query: Arc::new(github::DesignMeetings {
+                            with_status: github::DesignMeetingStatus::Scheduled,
                         }),
                     },
                 ],
@@ -596,7 +594,9 @@ pub fn lang_planning<'a>() -> Box<dyn Action + Send + Sync> {
                     QueryMap {
                         name: "proposed_meetings",
                         kind: QueryKind::List,
-                        query: Arc::new(github::ProposedDesignMeetings),
+                        query: Arc::new(github::DesignMeetings {
+                            with_status: github::DesignMeetingStatus::Proposed,
+                        }),
                     },
                 ],
             },

+ 25 - 3
src/github.rs

@@ -2169,9 +2169,30 @@ async fn project_items_by_status(
     Ok(all_items)
 }
 
-pub struct ProposedDesignMeetings;
+pub enum DesignMeetingStatus {
+    Proposed,
+    Scheduled,
+    Done,
+    Empty,
+}
+
+impl DesignMeetingStatus {
+    fn query_str(&self) -> Option<&str> {
+        match self {
+            DesignMeetingStatus::Proposed => Some("Needs triage"),
+            DesignMeetingStatus::Scheduled => Some("Scheduled"),
+            DesignMeetingStatus::Done => Some("Done"),
+            DesignMeetingStatus::Empty => None,
+        }
+    }
+}
+
+pub struct DesignMeetings {
+    pub with_status: DesignMeetingStatus,
+}
+
 #[async_trait]
-impl IssuesQuery for ProposedDesignMeetings {
+impl IssuesQuery for DesignMeetings {
     async fn query<'a>(
         &'a self,
         _repo: &'a Repository,
@@ -2181,7 +2202,8 @@ impl IssuesQuery for ProposedDesignMeetings {
         use github_graphql::project_items_by_status::ProjectV2ItemContent;
 
         let items =
-            project_items_by_status(client, |status| status == Some("Needs triage")).await?;
+            project_items_by_status(client, |status| status == self.with_status.query_str())
+                .await?;
         Ok(items
             .into_iter()
             .flat_map(|item| match item {