-- 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