/* * Copyright (c) 2025–2026 Emma Tebibyte * SPDX-License-Identifier: AGPL-3.0-or-later * * This file is part of Mintee. * * Mintee is free software: you can redistribute it and/or modify it under the * terms of the GNU Affero General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) * any later version. * * Mintee is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more * details. * * You should have received a copy of the GNU Affero General Public License * along with Mintee. If not, see https://www.gnu.org/licenses/. */ use std::{ env::{ args, current_dir }, error::Error, }; use gix::open; use tera::{ Context, Tera }; mod git; use git::repo_to_context; /* impl From for Context { fn from(repo: GitRepo) -> Self { let mut ctx = Context::new(); let directory = format!("{}/{}", repo.owner, repo.name); let main_branch = repo.branches .iter() .find(|b| b.name == "main") .unwrap(); let latest_commit = &main_branch.commits[0]; let hash = latest_commit.hash.clone(); let mut entries = Vec::new(); for e in latest_commit.entries.iter() { let entry = SampleEntry { class: e.kind.to_string(), last_commit: hash.clone(), last_commit_message: latest_commit.message.clone().unwrap(), last_commit_time: latest_commit.time, path: e.path.clone(), }; entries.push(entry); } /* stubs til we have a real database */ ctx.insert("user", "anon"); ctx.insert("site", "TiB."); ctx.insert("notif_count", ""); ctx.insert("ticket_count", "(47)"); ctx.insert("readme_content", "this is a readme"); ctx.insert("owner", &repo.owner); ctx.insert("branch", &main_branch.name); ctx.insert("repo", &repo.name); ctx.insert("directory", &directory); ctx.insert("entries", &entries); ctx } } */ fn main() -> Result<(), Box> { if let Some(templates) = args().collect::>().get(1) { let tera = Tera::new(templates.as_str())?; let ctx = repo_to_context(open(current_dir()?)?)?; println!("{}", tera.render("code.html", &ctx)?); Ok(()) } else { eprintln!("Usage: {} template_glob", args().collect::>()[0]); std::process::exit(64); } }