-- Leo's gemini proxy

-- Connecting to typed-hole.org:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

commit 5fecdd68c03406ab6d11ebbf265a0c6c1dfcf29c

Author: Julien Blanchard <julien@sideburns.eu>

Date: Wed Jul 31 18:41:43 2019 +0200


Cleanup history module


diff --git a/src/history.rs b/src/history.rs

index 1b71119..f256be1 100644

--- a/src/history.rs

+++ b/src/history.rs

@@ -1,19 +1,15 @@

use std::fs::File;

-use std::io::{Read,Write};

use std::fs::OpenOptions;

+use std::io::{Read, Write};


use url::Url;


-

pub fn create_history_file() {

File::create("/tmp/asuka_history").expect("unable to create file");

}


pub fn append(url: &str) {

let mut file = OpenOptions::new()

- .read(true)

- .create(true)

- .write(true)

.append(true)

.open("/tmp/asuka_history")

.expect("file not found");

@@ -24,33 +20,60 @@ pub fn append(url: &str) {

}


pub fn get_last_host() -> Option<String> {

- let mut file = File::open("/tmp/asuka_history").expect("file not found");

- let mut content = String::new();

- file.read_to_string(&mut content)

- .expect("Unable to read file");

- let last_url = content.lines().last();

- match last_url {

- Some(url) => {

- let urlp = Url::parse(url).expect("not an URL");

- Some(urlp.host_str().unwrap().to_owned())

+ match get_history_content() {

+ Some(content) => {

+ let last_url = content.lines().last();

+

+ match last_url {

+ Some(url) => {

+ let urlp = Url::parse(url).expect("not an URL");

+ let url = urlp.host_str().unwrap();

+ Some(String::from(url))

+ }

+ None => None,

+ }

+ }

+ None => None,

+ }

+}

+

+pub fn get_current_url() -> Option<String> {

+ match get_history_content() {

+ Some(content) => {

+ let last_url = content.lines().last();

+

+ match last_url {

+ Some(url) => Some(String::from(url)),

+ None => None,

+ }

}

None => None,

}

}


pub fn get_previous_url() -> Option<String> {

- let mut file = OpenOptions::new()

- .read(true)

- .open("/tmp/asuka_history")

- .expect("file not found");

+ match get_history_content() {

+ Some(content) => {

+ let lines_count = content.lines().count();

+

+ if lines_count > 1 {

+ // Return before last line

+ Some(content.lines().nth(lines_count - 2).unwrap().to_owned())

+ } else {

+ None

+ }

+ }

+ None => None

+ }

+}

+

+fn get_history_content() -> Option<String> {

+ let mut file = File::open("/tmp/asuka_history").expect("file not found");

let mut content = String::new();

file.read_to_string(&mut content)

.expect("Unable to read file");

- let lines_count = content.lines().count();

-

- if lines_count > 1 {

- // Return before last line

- Some(content.lines().nth(lines_count - 2).unwrap().to_owned())

+ if content.len() > 0 {

+ Some(content)

} else {

None

}

diff --git a/src/main.rs b/src/main.rs

index c12d776..67a9efc 100644

--- a/src/main.rs

+++ b/src/main.rs

@@ -112,7 +112,7 @@ fn parse_link(url: &str) -> Result<url::Url, url::ParseError> {

} else if url.starts_with("/") {

format!("gemini://{}{}", host, url)

} else {

- format!("gemini://{}/{}", host, url)

+ format!("{}/{}", history::get_current_url().unwrap(), url)

};


Url::parse(&url_s)



---

Served by Pollux Gemini Server.

-- Response ended

-- Page fetched on Sun May 19 10:18:11 2024