Skip to content

Commit

Permalink
Add akademik, koub, translite to fastside-actualizer (#21)
Browse files Browse the repository at this point in the history
  • Loading branch information
vlnst authored Jan 17, 2025
1 parent 3366be7 commit 62b4c20
Show file tree
Hide file tree
Showing 4 changed files with 212 additions and 0 deletions.
69 changes: 69 additions & 0 deletions fastside-actualizer/src/services/akademik.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
use crate::{types::ServiceUpdater, ChangesSummary};
use async_trait::async_trait;
use fastside_shared::serde_types::Instance;
use serde::Deserialize;
use url::Url;

pub struct AkademikUpdater {
pub instances_url: String,
}

impl AkademikUpdater {
pub fn new() -> Self {
Self {
instances_url:
"https://git.bloat.cat/gospodin/akademik/raw/branch/master/instances.json"
.to_string(),
}
}
}

impl Default for AkademikUpdater {
fn default() -> Self {
Self::new()
}
}

#[derive(Debug, Deserialize)]
struct AkademikInstance {
url: Url,
}

#[derive(Debug, Deserialize)]
struct InstancesResponse(Vec<AkademikInstance>);

#[async_trait]
impl ServiceUpdater for AkademikUpdater {
async fn update(
&self,
client: reqwest::Client,
current_instances: &[Instance],
changes_summary: ChangesSummary,
) -> anyhow::Result<Vec<Instance>> {
let response = client.get(&self.instances_url).send().await?;
let response_str = response.text().await?;
let parsed: InstancesResponse = serde_json::from_str(&response_str)?;

let mut instances = current_instances.to_vec();
let mut new_instances = Vec::new();

for instance in parsed.0 {
let url = instance.url;
if current_instances.iter().any(|i| i.url == url) {
continue;
}
new_instances.push(Instance::from(url.clone()));
}

changes_summary
.set_new_instances_added(
"akademik",
new_instances.iter().map(|i| i.url.clone()).collect(),
)
.await;

instances.extend(new_instances);

Ok(instances)
}
}
68 changes: 68 additions & 0 deletions fastside-actualizer/src/services/koub.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
use crate::{types::ServiceUpdater, ChangesSummary};
use async_trait::async_trait;
use fastside_shared::serde_types::Instance;
use serde::Deserialize;
use url::Url;

pub struct KoubUpdater {
pub instances_url: String,
}

impl KoubUpdater {
pub fn new() -> Self {
Self {
instances_url: "https://git.bloat.cat/gospodin/koub/raw/branch/master/instances.json"
.to_string(),
}
}
}

impl Default for KoubUpdater {
fn default() -> Self {
Self::new()
}
}

#[derive(Debug, Deserialize)]
struct KoubInstance {
url: Url,
}

#[derive(Debug, Deserialize)]
struct InstancesResponse(Vec<KoubInstance>);

#[async_trait]
impl ServiceUpdater for KoubUpdater {
async fn update(
&self,
client: reqwest::Client,
current_instances: &[Instance],
changes_summary: ChangesSummary,
) -> anyhow::Result<Vec<Instance>> {
let response = client.get(&self.instances_url).send().await?;
let response_str = response.text().await?;
let parsed: InstancesResponse = serde_json::from_str(&response_str)?;

let mut instances = current_instances.to_vec();
let mut new_instances = Vec::new();

for instance in parsed.0 {
let url = instance.url;
if current_instances.iter().any(|i| i.url == url) {
continue;
}
new_instances.push(Instance::from(url.clone()));
}

changes_summary
.set_new_instances_added(
"koub",
new_instances.iter().map(|i| i.url.clone()).collect(),
)
.await;

instances.extend(new_instances);

Ok(instances)
}
}
6 changes: 6 additions & 0 deletions fastside-actualizer/src/services/mod.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
mod akademik;
mod breezewiki;
mod default;
mod fastside;
mod gothub;
mod invidious;
mod koub;
mod libreddit;
mod librex;
mod scribe;
mod searx;
mod searxng;
mod simplytranslate;
mod tent;
mod translite;

use crate::types::ServiceUpdater;

Expand All @@ -28,6 +31,9 @@ pub fn get_service_updater(name: &str) -> Option<Box<dyn ServiceUpdater>> {
"librex" => Some(Box::new(librex::LibrexUpdater::new())),
"gothub" => Some(Box::new(gothub::GothubUpdater::new())),
"tent" => Some(Box::new(tent::TentUpdater::new())),
"akademik" => Some(Box::new(akademik::AkademikUpdater::new())),
"translite" => Some(Box::new(translite::TransLiteUpdater::new())),
"koub" => Some(Box::new(koub::KoubUpdater::new())),
"fastside" => Some(Box::new(fastside::FastsideUpdater::new())),
_ => None,
}
Expand Down
69 changes: 69 additions & 0 deletions fastside-actualizer/src/services/translite.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
use crate::{types::ServiceUpdater, ChangesSummary};
use async_trait::async_trait;
use fastside_shared::serde_types::Instance;
use serde::Deserialize;
use url::Url;

pub struct TransLiteUpdater {
pub instances_url: String,
}

impl TransLiteUpdater {
pub fn new() -> Self {
Self {
instances_url:
"https://git.bloat.cat/gospodin/translite/raw/branch/master/instances.json"
.to_string(),
}
}
}

impl Default for TransLiteUpdater {
fn default() -> Self {
Self::new()
}
}

#[derive(Debug, Deserialize)]
struct TransLiteInstance {
url: Url,
}

#[derive(Debug, Deserialize)]
struct InstancesResponse(Vec<TransLiteInstance>);

#[async_trait]
impl ServiceUpdater for TransLiteUpdater {
async fn update(
&self,
client: reqwest::Client,
current_instances: &[Instance],
changes_summary: ChangesSummary,
) -> anyhow::Result<Vec<Instance>> {
let response = client.get(&self.instances_url).send().await?;
let response_str = response.text().await?;
let parsed: InstancesResponse = serde_json::from_str(&response_str)?;

let mut instances = current_instances.to_vec();
let mut new_instances = Vec::new();

for instance in parsed.0 {
let url = instance.url;
if current_instances.iter().any(|i| i.url == url) {
continue;
}
new_instances.push(Instance::from(url.clone()));
}

changes_summary
.set_new_instances_added(
"translite",
new_instances.iter().map(|i| i.url.clone()).collect(),
)
.await;

instances.extend(new_instances);

Ok(instances)
}
}

0 comments on commit 62b4c20

Please sign in to comment.