This commit is contained in:
parent
a76bdc867c
commit
a50d894926
2 changed files with 86 additions and 58 deletions
|
@ -1,6 +1,8 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
use crate::{
|
||||
config::Config,
|
||||
github::{fetch_pr, Project},
|
||||
github::{fetch_pr, ProjectState},
|
||||
template::Infos,
|
||||
};
|
||||
use actix_web::{get, web, HttpResponse, Responder};
|
||||
|
@ -14,19 +16,78 @@ pub async fn page(config: web::Data<Config>) -> impl Responder {
|
|||
|
||||
#[derive(Content)]
|
||||
struct PortfolioTemplate {
|
||||
data: Vec<Project>,
|
||||
projects: Vec<Project>,
|
||||
waiting: Vec<Project>,
|
||||
closed: Vec<Project>,
|
||||
}
|
||||
|
||||
#[once(time = 60)]
|
||||
#[derive(Content)]
|
||||
struct Project {
|
||||
name: String,
|
||||
url: String,
|
||||
pulls_merged: Vec<Pull>,
|
||||
pulls_open: Vec<Pull>,
|
||||
pulls_closed: Vec<Pull>,
|
||||
}
|
||||
|
||||
#[derive(Content, Clone)]
|
||||
struct Pull {
|
||||
url: String,
|
||||
id: u32,
|
||||
name: String,
|
||||
state: u8,
|
||||
}
|
||||
|
||||
#[once(time = 120)]
|
||||
pub async fn get_page(config: Config) -> std::string::String {
|
||||
// Fetch latest data from github
|
||||
let projects = fetch_pr().await;
|
||||
|
||||
println!("{:#?}", projects);
|
||||
let mut data: Vec<Project> = Vec::new();
|
||||
let mut map: HashMap<&str, Vec<Pull>> = HashMap::new();
|
||||
projects.iter().for_each(|p| {
|
||||
let project = Pull {
|
||||
url: p.contrib_url.clone(),
|
||||
id: p.id,
|
||||
name: p.project.clone(),
|
||||
state: p.status as u8,
|
||||
};
|
||||
let project_name = p.project.as_str();
|
||||
if map.contains_key(project_name) {
|
||||
map.entry(project_name).and_modify(|v| v.push(project));
|
||||
} else {
|
||||
data.push(Project {
|
||||
name: project_name.to_string(),
|
||||
url: p.project_url.clone(),
|
||||
pulls_merged: Vec::new(),
|
||||
pulls_closed: Vec::new(),
|
||||
pulls_open: Vec::new(),
|
||||
});
|
||||
map.insert(project_name, vec![project]);
|
||||
}
|
||||
});
|
||||
|
||||
data.iter_mut().for_each(|d| {
|
||||
map.get(d.name.as_str()).unwrap().iter().for_each(|p| {
|
||||
let state = p.state.into();
|
||||
match state {
|
||||
ProjectState::Closed => d.pulls_closed.push(p.clone()),
|
||||
ProjectState::Merged => d.pulls_merged.push(p.clone()),
|
||||
ProjectState::Open => d.pulls_open.push(p.clone()),
|
||||
}
|
||||
});
|
||||
let mut name: Vec<char> = d.name.replace('-', " ").chars().collect();
|
||||
name[0] = name[0].to_uppercase().next().unwrap();
|
||||
d.name = name.into_iter().collect();
|
||||
});
|
||||
|
||||
config.tmpl.render(
|
||||
"contrib.html",
|
||||
PortfolioTemplate { data: projects },
|
||||
"contrib2.html",
|
||||
PortfolioTemplate {
|
||||
projects: data,
|
||||
waiting: Vec::new(),
|
||||
closed: Vec::new(),
|
||||
},
|
||||
Infos {
|
||||
page_title: Some("Mes contributions".to_string()),
|
||||
page_desc: Some("Contributions à l'opensource par Anri".to_string()),
|
||||
|
|
|
@ -2,68 +2,35 @@
|
|||
<html class="index" lang="fr">
|
||||
{{> header.html }}
|
||||
<body>
|
||||
{{#data}}
|
||||
<div id="content">
|
||||
<h1 class="subtitle">Mes contributions</h1>
|
||||
<h2 class="subtitle">PineDocs</h2>
|
||||
<!-- Add URL? -->
|
||||
{{#projects}}
|
||||
<h2 class="subtitle">{{name}}</h2>
|
||||
<p>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/193">#193</a>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/194">#194</a>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/196">#196</a>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/228">#228</a>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/230">#230</a>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/231">#231</a>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/237">#237</a>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/240">#240</a>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/243">#243</a>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/259">#259</a>
|
||||
{{#pulls_merged}}
|
||||
<a href="{{url}}">#{{id}}</a>
|
||||
{{/pulls_merged}}
|
||||
</p>
|
||||
<h2 class="subtitle">Tachiyomi Extensions</h2>
|
||||
<p>
|
||||
<a
|
||||
href="https://github.com/tachiyomiorg/tachiyomi-extensions/pull/10994"
|
||||
>#10994</a
|
||||
>
|
||||
<a
|
||||
href="https://github.com/tachiyomiorg/tachiyomi-extensions/pull/12181"
|
||||
>#12181</a
|
||||
>
|
||||
<a
|
||||
href="https://github.com/tachiyomiorg/tachiyomi-extensions/pull/15397"
|
||||
>#15397</a
|
||||
>
|
||||
</p>
|
||||
|
||||
<h2 class="subtitle">x11 Emoji Picker</h2>
|
||||
<p>
|
||||
<a href="https://github.com/GaZaTu/x11-emoji-picker/pull/12">#12</a>
|
||||
</p>
|
||||
<h2 class="subtitle">Joal</h2>
|
||||
<p><a href="https://github.com/anthonyraymond/joal/pull/112">#122</a></p>
|
||||
<h2 class="subtitle">Node Genius Lyrics</h2>
|
||||
<p>
|
||||
<a href="https://github.com/zyrouge/node-genius-lyrics/pull/44">#44</a>
|
||||
</p>
|
||||
|
||||
{{/projects}}
|
||||
<h1 class="subtitle">En attente</h1>
|
||||
{{#waiting}}
|
||||
<p>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/213">PineDocs#213</a>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/232">PineDocs#232</a>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/234">PineDocs#234</a>
|
||||
<a href="https://github.com/xy2z/PineDocs/pull/257">PineDocs#257</a>
|
||||
<a href="https://github.com/SimpleMobileTools/Simple-Contacts/pull/937"
|
||||
>Simple-Contacts#937</a
|
||||
>
|
||||
<a
|
||||
href="https://github.com/SimpleMobileTools/Simple-Flashlight/pull/193"
|
||||
>Simple-Flashlight#193</a
|
||||
>
|
||||
{{#pulls_open}}
|
||||
<a href="{{url}}">{{name}}#{{id}}</a>
|
||||
{{/pulls_open}}
|
||||
</p>
|
||||
|
||||
{{/waiting}}
|
||||
<h1 class="subtitle">Non mergées</h1>
|
||||
{{#closed}}
|
||||
<p>
|
||||
<a href="https://github.com/secure-77/Perlite/pull/16">Perlite#16</a>
|
||||
{{#pulls_closed}}
|
||||
<a href="{{url}}">{{name}}#{{id}}</a>
|
||||
{{/pulls_closed}}
|
||||
</p>
|
||||
{{/closed}}
|
||||
</div>
|
||||
{{> footer.html }}
|
||||
{{/data}} {{> footer.html }}
|
||||
</body>
|
||||
</html>
|
||||
|
|
Loading…
Reference in a new issue