diff --git a/lib/api_service.dart b/lib/api_service.dart index aaa016e..40a9f6e 100644 --- a/lib/api_service.dart +++ b/lib/api_service.dart @@ -3,6 +3,8 @@ import 'package:http/http.dart' as http; import 'dart:convert'; import 'dart:ui_web' as ui; import 'dart:html' as html; +import 'augment.dart'; +import 'dart:js' as js; class MailAddress { final String? name; @@ -108,7 +110,6 @@ class _EmailPageState extends State { List json = jsonDecode(response.body); for (var item in json) { if (item.length > 1 && item[0] is String && item[1] is List) { - // print('Date: ${item[0]}, Threads: ${item[1]}'); List threadIDs = List.from(item[1]); for (var threadId in threadIDs) { await fetchThreadMessages(threadId, allEmails); @@ -125,7 +126,6 @@ class _EmailPageState extends State { emails.clear(); // emails = messagesMap.values.toList().expand((list) => list).toList(); emails.addAll(allEmails); - // print(emails); ; }); } @@ -135,9 +135,9 @@ class _EmailPageState extends State { try { var url = Uri.http( '127.0.0.1:3001', 'get_thread_messages', {'id': threadId.toString()}); - // print(url); + var response = await http.get(url); - // print(response.body); + if (response.statusCode == 200) { List messagesJson = jsonDecode(response.body); List messages = @@ -156,59 +156,22 @@ class _EmailPageState extends State { String content = r""" """; - // String restcontent = ""; + try { var url = Uri.http('127.0.0.1:3001', 'email', {'id': id}); - // print(url); + var response = await http.get(url); - // print(response.body); + if (response.statusCode == 200) { - print('ok'); content = response.body; - // try { - // var restUrl = - // Uri.http('127.0.0.1:3001', 'get_thread_messages', {'id': id}); - // // print(restUrl); - // var restresponse = await http.get(restUrl); - // // print(restresponse.statusCode); - // if (restresponse.statusCode == 200) { - // print("ok squared"); - // // restcontent = restresponse.body; - // } - // } catch (i) { - // print('jsoncontent caught error: $i'); - // } } } catch (e) { print('_getEmailContent caught error: $e'); } - // print(content); - // print(restcontent); + return content; } - // Future _getThreadMessagesJson(String threadId) async { - // String jsonResponse = ""; - - // try { - // var url = - // Uri.http('127.0.0.1:3001', 'get_thread_messages', {'id': threadId}); - // // print(url); - // var response = await http.get(url); - // // print(response.statusCode); - // // print(response.body); - // if (response.statusCode == 200) { - // jsonResponse = response.body; // Here you get the JSON response - // } else { - // throw Exception('Failed to load thread messages'); - // } - // } catch (e) { - // print('_getThreadMessagesJson caught error: $e'); - // } - - // return jsonResponse; // Returns the JSON string - // } - Future> _getDrawerItems() async { List drawerItems = []; @@ -280,17 +243,14 @@ class _EmailPageState extends State { class EmailListScreen extends StatelessWidget { final List emails; final Future Function(String) getEmailContent; - // final Future Function(String) getJsonEmail; EmailListScreen({ required this.emails, required this.getEmailContent, - // required this.getJsonEmail }); @override Widget build(BuildContext context) { - // print(emails); return Scaffold( appBar: AppBar( title: Text('Emails'), @@ -310,9 +270,6 @@ class EmailListScreen extends StatelessWidget { trailing: Text(emails[index].date.toString()), onTap: () async { String emailContent = await getEmailContent(emails[index].id); - // String jsonContent = - // await getJsonEmail(emails[index].uid.toString()); - // print(emails[index]); String from = emails[index].from.toString(); String name = emails[index].name.toString(); String to = emails[index].to.toString(); @@ -388,6 +345,7 @@ class _EmailViewState extends State { @override void initState() { super.initState(); + print(widget.id); iframeKey = Key("iframe-${widget.id}"); ui.platformViewRegistry.registerViewFactory( // 'html-view33' @@ -397,67 +355,77 @@ class _EmailViewState extends State { ..height = '100%' ..srcdoc = widget.emailContent ..style.border = 'none', + // ..style.width = '100%', + // ..style.height = '100%' ); } @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(widget.name), - ), - body: Column( - children: [ - // Container( - // color: Colors.amber, - // child: Text( - // widget.from ,), - // ), - Row( - // title of email - children: [ - Text( - widget.subject, - style: TextStyle(fontSize: 30), - ), - ], - ), - Row( - children: [ - Text( - 'from ${widget.name}', - style: TextStyle(fontSize: 18), - ), - Text( - '<${widget.from}>', - style: TextStyle(fontSize: 18), - ), - Spacer(), - Text( - '${widget.date}', - textAlign: TextAlign.right, - ) - ], - ), - // TODO: make a case where if one of these is the user's email it just says me :))))) - Row( - children: [ - Text( - 'to ${widget.to.toString()}', - style: TextStyle(fontSize: 15), - ) - ], - ), + void _handleNumbering() { + // Check if the iframe content window is accessible + try { + js.context.callMethod('applyNumberingVisibility'); + } catch (e) { + print('Error accessing iframe method: $e'); + // Optionally, use postMessage for cross-origin communication + // js.context['iframeElement'].contentWindow.postMessage(jsify({'action': 'toggleNumbering'}), '*'); + } + } - Expanded( - child: HtmlElementView( - key: iframeKey, - viewType: iframeKey.toString(), - // 'html-view33', + + + return Scaffold( + appBar: AppBar( + title: Text(widget.name), + ), + body: Column( + children: [ + EmailToolbar(onButtonPressed: _handleNumbering), + Row( + // title of email + children: [ + Text( + widget.subject, + style: TextStyle(fontSize: 30), + ), + ], ), - ) - ], - ) - ); + Row( + children: [ + Text( + 'from ${widget.name}', + style: TextStyle(fontSize: 18), + ), + Text( + '<${widget.from}>', + style: TextStyle(fontSize: 18), + ), + Spacer(), + Text( + '${widget.date}', + textAlign: TextAlign.right, + ) + ], + ), + // TODO: make a case where if one of these is the user's email it just says me :))))) + Row( + children: [ + Text( + 'to ${widget.to.toString()}', + style: TextStyle(fontSize: 15), + ) + ], + ), + + Expanded( + child: HtmlElementView( + key: iframeKey, + viewType: iframeKey.toString(), + // 'html-view33', + ), + ), + ], + )); } } diff --git a/lib/augment.dart b/lib/augment.dart index 267f72e..5091d29 100644 --- a/lib/augment.dart +++ b/lib/augment.dart @@ -3,6 +3,7 @@ import 'package:http/http.dart' as http; import 'dart:convert'; import 'dart:ui_web' as ui; import 'dart:html' as html; +import 'dart:js' as js; class EmailToolbar extends StatelessWidget { final VoidCallback onButtonPressed; diff --git a/lib/home_page.dart b/lib/home_page.dart index 26b013a..e79d201 100644 --- a/lib/home_page.dart +++ b/lib/home_page.dart @@ -15,343 +15,7 @@ class _HomeScreenState extends State { @override void initState() { super.initState(); - -// // Register the HTML element - - ui.platformViewRegistry.registerViewFactory( - 'html-view11', - (int viewId) => html.IFrameElement() - ..width = '100%' - ..height = '100%' - ..srcdoc = r""" - - - - There's no time to waste: Find your size! - - - - - - - - -
- -
- - - - - - - - - - -
- sort by [author] [dates] [subjects] -
-
-

There's no time to waste: Find your size! - Atom Feed -

-
- Back -
-
-
-
-
- - -
- - There's no time to waste: Find your size! - -
- From: "GLOBO" <globoshoes@mailing.globoshoes.com> -
- Date: 2023-12-30T23:00:48+01:00 -
- -
- More - Message-Id: 0.0.D.710.1DA3B6BA55A6D60.0@mta-2d567751.ip4.emsmtp.com
-To: <sokolovskiiyura@gmail.com>
- -
- Reply - [Export] - -
- -
- """ - ..style.border = 'none', - ); - } + } bool _isSidebarOpen = true; @@ -455,13 +119,7 @@ span,td,table,div,a {font-family: Helvetica, sans-serif !important;} ), ], ), - ), - Container( - child: Expanded( - // child: EmailPage(), - child: HtmlElementView(viewType: 'html-view11',),), - ), - + ), // Expanded( // child: Center( // child: EmailPage(),