@@ -11,6 +11,7 @@ use std::{
11
11
} ;
12
12
13
13
use cosmic:: iced:: { futures:: SinkExt , subscription, Subscription } ;
14
+ use tl:: queryselector:: iterable:: QueryIterable ;
14
15
use tokio:: sync:: mpsc;
15
16
use wl_clipboard_rs:: { copy, paste_watch} ;
16
17
@@ -128,15 +129,34 @@ pub fn sub() -> Subscription<ClipboardMessage> {
128
129
match rx. recv ( ) . await {
129
130
Some ( Some ( mut res) ) => {
130
131
let metadata = if res. len ( ) == 2 {
131
- let ( mut pipe, _mimitype ) = res. remove ( 1 ) ;
132
+ let ( mut pipe, mimitype ) = res. remove ( 0 ) ;
132
133
133
- let mut contents = String :: new ( ) ;
134
- pipe. read_to_string ( & mut contents) . unwrap ( ) ;
135
134
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 ( ) ;
138
138
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
140
160
} else {
141
161
None
142
162
} ;
@@ -246,3 +266,75 @@ pub fn sub2() -> Subscription<Message> {
246
266
}
247
267
248
268
*/
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\n Say) | 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
+ }
0 commit comments