use crate::config;
use crate::network;
use crate::network::*;
use crate::network::responses::*;
use url::Url;
use windmark::response::Response;
pub fn handler(cfg: &config::Config) -> Result<Response, network::error::Error> {
let platform_url: &Url = &cfg.forge_url;
let api_url: Url = platform_url.join("api/v1/").unwrap(); println!("Forgejo API URL is {}", api_url.as_str());
let version_url: Url = api_url.join("version").unwrap(); let version_obj: Version = get(version_url)?;
println!("Forgejo {}", version_obj.version);
let mut repos_url: Url = api_url.join(format!("repos/search").as_str()).unwrap(); repos_url.set_query(Some("sort=updated&order=desc&limit=12"));
println!("Getting repos from {}...", repos_url.as_str());
let repos_json: RepoSearch = get(repos_url)?;
let mut repos = repos_json.data;
repos.sort_by(|a: &Repo, b: &Repo| {
return b.updated_at.cmp(&a.updated_at);
});
let repo_links: Vec<String> = repos.iter()
.map(super::templates::repo_link)
.collect();
let gemtext_list: String = repo_links.iter()
.map(|n: &String| format!("{n}\n"))
.collect::<Vec<String>>()
.concat();
let gemtext = format!("## Recent Activity\n{gemtext_list}");
return Ok(Response::success(gemtext));
}