-- Leo's gemini proxy

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

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

commit 96ff8c2bdeed3790677da04d3aa801300e16c6f7

Author: Julien Blanchard <julien@sideburns.eu>

Date: Tue Aug 13 14:51:34 2019 +0200


Handle Input status


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

new file mode 100644

index 0000000..623cf6a

--- /dev/null

+++ b/src/history.rs.rej

@@ -0,0 +1,10 @@

+diff a/src/history.rs b/src/history.rs (rejected hunks)

+@@ -2,7 +2,7 @@ use url::Url;

+ use std::sync::Mutex;

+

+ lazy_static! {

+- static ref HISTORY: Mutex<Vec<Url>> = Mutex::new(vec![]);

++ static ref HISTORY: Mutex<BTreeSet<Url>> = Mutex::new(vec![]);

+ }

+

+ pub fn init() {

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

index fbf4dc5..1b85cc7 100644

--- a/src/main.rs

+++ b/src/main.rs

@@ -9,7 +9,7 @@ use cursive::theme::Effect;

use cursive::traits::*;

use cursive::utils::markup::StyledString;

use cursive::view::Scrollable;

-use cursive::views::{Dialog, EditView, Panel, SelectView};

+use cursive::views::{Dialog, EditView, Panel, SelectView, TextView};

use cursive::Cursive;


use std::str::FromStr;

@@ -74,6 +74,24 @@ fn prompt_for_url(s: &mut Cursive) {

);

}


+fn prompt_for_answer(s: &mut Cursive, url: Url, message: String) {

+ s.add_layer(

+ Dialog::new()

+ .title(message)

+ // Padding is (left, right, top, bottom)

+ .padding((1, 1, 1, 0))

+ .content(

+ EditView::new()

+ .on_submit(move |s, response| {

+ let link = format!("{}?query={}", url.to_string(), response);

+ s.pop_layer();

+ follow_link(s, &link);

+ }).fixed_width(60)

+ )

+ .with_id("url_query"),

+ );

+}

+

fn goto_url(s: &mut Cursive, url: &str) {

// Prepend gemini scheme if needed

if url.starts_with("gemini://") {

@@ -136,6 +154,8 @@ fn draw_content(s: &mut Cursive, url: Url, content: String) {

let mut main_view = s.find_id::<SelectView>("main").unwrap();

let mut container = s.find_id::<Dialog>("container").unwrap();


+ let url_copy = url.clone();

+

// handle response status

if let Some(status_line) = content.lines().next() {

if let Ok(status) = Status::from_str(status_line) {

@@ -155,6 +175,9 @@ fn draw_content(s: &mut Cursive, url: Url, content: String) {

));

return;

}

+ Status::Input(message) => {

+ prompt_for_answer(s, url_copy, message);

+ }

other_status => {

s.add_layer(Dialog::info(format!("ERROR: {:?}", other_status)));

return;



---

Served by Pollux Gemini Server.

-- Response ended

-- Page fetched on Sun May 19 10:03:09 2024