diff --git a/.sqlx/query-3f51c3b54edbb7c4819ecdcfe396059750c9b841a54effa4a5ef63b43f1b1a94.json b/.sqlx/query-3f51c3b54edbb7c4819ecdcfe396059750c9b841a54effa4a5ef63b43f1b1a94.json new file mode 100644 index 0000000..6eb7a62 --- /dev/null +++ b/.sqlx/query-3f51c3b54edbb7c4819ecdcfe396059750c9b841a54effa4a5ef63b43f1b1a94.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "UPDATE refs SET tracked = 1 WHERE name = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "3f51c3b54edbb7c4819ecdcfe396059750c9b841a54effa4a5ef63b43f1b1a94" +} diff --git a/.sqlx/query-c0f80f2907ea00edd35207fb72b591eaa895db06c585e7f4355a3c5b5461acd6.json b/.sqlx/query-c0f80f2907ea00edd35207fb72b591eaa895db06c585e7f4355a3c5b5461acd6.json new file mode 100644 index 0000000..43b54a7 --- /dev/null +++ b/.sqlx/query-c0f80f2907ea00edd35207fb72b591eaa895db06c585e7f4355a3c5b5461acd6.json @@ -0,0 +1,12 @@ +{ + "db_name": "SQLite", + "query": "UPDATE refs SET tracked = 0 WHERE name = ?", + "describe": { + "columns": [], + "parameters": { + "Right": 1 + }, + "nullable": [] + }, + "hash": "c0f80f2907ea00edd35207fb72b591eaa895db06c585e7f4355a3c5b5461acd6" +} diff --git a/src/server/web.rs b/src/server/web.rs index 636f627..83df2d8 100644 --- a/src/server/web.rs +++ b/src/server/web.rs @@ -17,6 +17,7 @@ use self::{ post_admin_queue_add, post_admin_queue_add_batch, post_admin_queue_decrease, post_admin_queue_delete, post_admin_queue_increase, }, + refs::{post_admin_refs_track, post_admin_refs_untrack}, repo::post_admin_repo_update, }, api::worker::{ @@ -59,6 +60,8 @@ pub async fn run(server: Server) -> somehow::Result<()> { .typed_post(post_admin_queue_decrease) .typed_post(post_admin_queue_delete) .typed_post(post_admin_queue_increase) + .typed_post(post_admin_refs_track) + .typed_post(post_admin_refs_untrack) .typed_post(post_admin_repo_update) .merge(post_api_worker_status) .fallback(get(r#static::static_handler)) diff --git a/src/server/web/admin.rs b/src/server/web/admin.rs index e7f690b..0e97f7b 100644 --- a/src/server/web/admin.rs +++ b/src/server/web/admin.rs @@ -1,2 +1,3 @@ pub mod queue; +pub mod refs; pub mod repo; diff --git a/src/server/web/admin/refs.rs b/src/server/web/admin/refs.rs new file mode 100644 index 0000000..6b89c8a --- /dev/null +++ b/src/server/web/admin/refs.rs @@ -0,0 +1,58 @@ +use axum::{ + extract::State, + response::{IntoResponse, Redirect}, + Form, +}; +use log::info; +use serde::Deserialize; +use sqlx::SqlitePool; + +use crate::{ + config::ServerConfig, + server::web::{ + base::Base, + paths::{PathAdminRefsTrack, PathAdminRefsUntrack, PathIndex}, + }, + somehow, +}; + +#[derive(Deserialize)] +pub struct FormAdminRefsTrack { + r#ref: String, +} + +pub async fn post_admin_refs_track( + _path: PathAdminRefsTrack, + State(config): State<&'static ServerConfig>, + State(db): State, + Form(form): Form, +) -> somehow::Result { + let result = sqlx::query!("UPDATE refs SET tracked = 1 WHERE name = ?", form.r#ref) + .execute(&db) + .await?; + + if result.rows_affected() > 0 { + info!("Admin tracked {}", form.r#ref); + } + + let link = Base::link_with_config(config, PathIndex {}); + Ok(Redirect::to(&link.to_string())) +} + +pub async fn post_admin_refs_untrack( + _path: PathAdminRefsUntrack, + State(config): State<&'static ServerConfig>, + State(db): State, + Form(form): Form, +) -> somehow::Result { + let result = sqlx::query!("UPDATE refs SET tracked = 0 WHERE name = ?", form.r#ref) + .execute(&db) + .await?; + + if result.rows_affected() > 0 { + info!("Admin untracked {}", form.r#ref); + } + + let link = Base::link_with_config(config, PathIndex {}); + Ok(Redirect::to(&link.to_string())) +} diff --git a/src/server/web/pages/index.rs b/src/server/web/pages/index.rs index 6fb6e45..7026b8f 100644 --- a/src/server/web/pages/index.rs +++ b/src/server/web/pages/index.rs @@ -8,7 +8,7 @@ use crate::{ server::web::{ base::{Base, Link, Tab}, link::LinkCommit, - paths::{PathAdminRepoUpdate, PathIndex}, + paths::{PathAdminRefsTrack, PathAdminRefsUntrack, PathAdminRepoUpdate, PathIndex}, }, somehow, }; @@ -22,6 +22,8 @@ struct Ref { #[derive(Template)] #[template(path = "pages/index.html")] struct IndexTemplate { + link_admin_refs_track: Link, + link_admin_refs_untrack: Link, link_admin_repo_update: Link, base: Base, @@ -64,6 +66,8 @@ pub async fn get_index( } Ok(IndexTemplate { + link_admin_refs_track: base.link(PathAdminRefsTrack {}), + link_admin_refs_untrack: base.link(PathAdminRefsUntrack {}), link_admin_repo_update: base.link(PathAdminRepoUpdate {}), base: Base::new(config, Tab::Index), diff --git a/src/server/web/paths.rs b/src/server/web/paths.rs index 6c4ebd5..7be5788 100644 --- a/src/server/web/paths.rs +++ b/src/server/web/paths.rs @@ -53,6 +53,14 @@ pub struct PathWorkerByName { // Admin actions // /////////////////// +#[derive(Deserialize, TypedPath)] +#[typed_path("/admin/refs/track")] +pub struct PathAdminRefsTrack {} + +#[derive(Deserialize, TypedPath)] +#[typed_path("/admin/refs/untrack")] +pub struct PathAdminRefsUntrack {} + #[derive(Deserialize, TypedPath)] #[typed_path("/admin/repo/update")] pub struct PathAdminRepoUpdate {} diff --git a/static/base.css b/static/base.css index 6f248b0..2daf414 100644 --- a/static/base.css +++ b/static/base.css @@ -29,9 +29,18 @@ a:hover { } button { + font-size: inherit; padding: 0 .5ch; } +button.linkish { + background-color: unset; + border: unset; + text-decoration: underline; + padding: 0; + cursor: pointer; +} + details { padding: .3em 1ch; background-color: #ddd; @@ -145,15 +154,6 @@ nav a:hover { display: inline; } -.queue-commits button { - font-size: inherit; - background-color: unset; - border: unset; - text-decoration: underline; - padding: 0; - cursor: pointer; -} - .queue-commits button:hover { font-weight: bold; } diff --git a/templates/pages/index.html b/templates/pages/index.html index 10dbda3..820415d 100644 --- a/templates/pages/index.html +++ b/templates/pages/index.html @@ -8,22 +8,32 @@
Tracked ({{ tracked_refs.len() }}) -
- {% for ref in tracked_refs %} -
{{ ref.name }}
-
{{ ref.commit|safe }}
- {% endfor %} -
+
+
+ {% for ref in tracked_refs %} +
+ {{ ref.name }} + [] +
+
{{ ref.commit|safe }}
+ {% endfor %} +
+
Untracked ({{ untracked_refs.len() }}) -
- {% for ref in untracked_refs %} -
{{ ref.name }}
-
{{ ref.commit|safe }}
- {% endfor %} -
+
+
+ {% for ref in untracked_refs %} +
+ {{ ref.name }} + [] +
+
{{ ref.commit|safe }}
+ {% endfor %} +
+
diff --git a/templates/pages/queue_inner.html b/templates/pages/queue_inner.html index 54e0cb2..f50f5ed 100644 --- a/templates/pages/queue_inner.html +++ b/templates/pages/queue_inner.html @@ -50,9 +50,10 @@ {{ task.priority }} - [/] + [/] {% if task.workers.is_empty() %} -