Skip to content

Commit 1a49e41

Browse files
committed
ff
1 parent 91fcd9b commit 1a49e41

File tree

5 files changed

+109
-8
lines changed

5 files changed

+109
-8
lines changed

Cargo.lock

+7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ tracing-subscriber = { version = "0.3.16", features = [
4141
tracing-journald = "0.3.0"
4242
constcat = "0.5.0"
4343
nucleo = "0.5.0"
44+
tl = "0.7.8"
4445

4546
[dependencies.libcosmic]
4647
git = "https://github.com/pop-os/libcosmic"

src/clipboard.rs

+98-6
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use std::{
1111
};
1212

1313
use cosmic::iced::{futures::SinkExt, subscription, Subscription};
14+
use tl::queryselector::iterable::QueryIterable;
1415
use tokio::sync::mpsc;
1516
use wl_clipboard_rs::{copy, paste_watch};
1617

@@ -128,15 +129,34 @@ pub fn sub() -> Subscription<ClipboardMessage> {
128129
match rx.recv().await {
129130
Some(Some(mut res)) => {
130131
let metadata = if res.len() == 2 {
131-
let (mut pipe, _mimitype) = res.remove(1);
132+
let (mut pipe, mimitype) = res.remove(0);
132133

133-
let mut contents = String::new();
134-
pipe.read_to_string(&mut contents).unwrap();
135134

136-
// todo: use the mimetype to know if its html
137-
// parse accordinely
135+
eprintln!("before");
136+
let mut metadata = Vec::new();
137+
pipe.read_to_end(&mut metadata).unwrap();
138138

139-
Some(contents)
139+
140+
eprintln!("before");
141+
let mut metadata = String::new();
142+
pipe.read_to_string(&mut metadata).unwrap();
143+
144+
eprintln!("after");
145+
146+
// // #[allow(clippy::assigning_clones)]
147+
// // if mimitype == "text/html" {
148+
// // if let Some(alt) = find_alt(&metadata) {
149+
// // metadata = alt.to_owned();
150+
// // }
151+
// // }
152+
153+
// let metadata = String::from_utf8(metadata).unwrap();
154+
155+
// find_alt3(&metadata);
156+
157+
// Some(metadata)
158+
// Some(metadata)
159+
None
140160
} else {
141161
None
142162
};
@@ -246,3 +266,75 @@ pub fn sub2() -> Subscription<Message> {
246266
}
247267
248268
*/
269+
270+
#[test]
271+
fn a() {
272+
let metadata = r#"
273+
<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"><img
274+
src=\"data:image/png;base64,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\"
275+
data-deferred=\"1\" class=\"rg_i Q4LuWd\" jsname=\"Q4LuWd\" width=\"316\"
276+
height=\"160\" alt=\"The Iterator Pattern: So Simple, It's Genius (Or So They
277+
Say) | by Do Tran | Level Up Coding\" data-iml=\"1916\" data-atf=\"true\">
278+
279+
"#.to_owned();
280+
281+
assert_eq!(find_alt(&metadata), Some("The Iterator Pattern: So Simple, It's Genius (Or So They\nSay) | by Do Tran | Level Up Coding"))
282+
}
283+
284+
fn find_alt(html: &str) -> Option<&str> {
285+
const DEB: &str = "alt=\\\"";
286+
287+
if let Some(pos) = html.find(DEB) {
288+
const OFFSET: usize = DEB.as_bytes().len();
289+
290+
if let Some(pos_end) = html[pos + OFFSET..].find("\\\"") {
291+
return Some(&html[pos + OFFSET..pos + pos_end + OFFSET]);
292+
}
293+
}
294+
295+
None
296+
}
297+
298+
fn find_alt2(html: &str) {
299+
let dom = tl::parse(html, tl::ParserOptions::default()).unwrap();
300+
301+
let parser = dom.parser();
302+
303+
let element = dom
304+
.get_element_by_id("img")
305+
.expect("Failed to find element")
306+
.get(parser)
307+
.unwrap();
308+
309+
let a = element.inner_text(parser);
310+
311+
println!("{a}");
312+
}
313+
314+
fn find_alt3(html: &str) {
315+
// Parse the HTML string
316+
let dom = tl::parse(html, tl::ParserOptions::default()).unwrap();
317+
318+
// Get the parser object from the DOM
319+
let parser = dom.parser();
320+
321+
322+
let e = dom.get_elements_by_class_name("img").next();
323+
324+
info!("{e:?}")
325+
326+
}
327+
328+
#[test]
329+
fn b() {
330+
let metadata = r#"
331+
<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"><img
332+
src=\"data:image/png;base64,iVE2CC\"
333+
data-deferred=\"1\" class=\"rg_i Q4LuWd\" jsname=\"Q4LuWd\" width=\"316\"
334+
height=\"160\" alt=\"The Iterator Pattern: So Simple, It's Genius (Or So They
335+
Say) | by Do Tran | Level Up Coding\" data-iml=\"1916\" data-atf=\"true\">
336+
337+
"#.to_owned();
338+
339+
find_alt3(&metadata);
340+
}

src/db.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use crate::{
3030

3131
type TimeId = i64;
3232

33-
const DB_VERSION: &str = "1";
33+
const DB_VERSION: &str = "2";
3434
const DB_PATH: &str = constcat::concat!(APPID, "-db-", DB_VERSION, ".sqlite");
3535

3636
// warning: if you change somethings in here, change the db version
@@ -79,6 +79,7 @@ impl Debug for Entry {
7979
.field("creation", &self.creation)
8080
.field("mime", &self.mime)
8181
.field("content", &self.get_content())
82+
.field("metadata", &self.metadata)
8283
.finish()
8384
}
8485
}

src/view.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ fn uris_entry<'a>(
147147
return None;
148148
}
149149

150-
let max = 4;
150+
let max = 3;
151151

152152
let mut lines = Vec::with_capacity(min(uris.len(), max + 1));
153153

0 commit comments

Comments
 (0)