added resulting listview for when emails are searched, (when each individual email is clicked it is not applied)
This commit is contained in:
		
							parent
							
								
									36c161cb55
								
							
						
					
					
						commit
						61c91b633b
					
				
					 4 changed files with 241 additions and 90 deletions
				
			
		| 
						 | 
					@ -67,20 +67,34 @@ class ApiService {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Future<List<String>> sonicSearch(
 | 
					  Future<List<SerializableMessage>> sonicSearch(
 | 
				
			||||||
      String list, int limit, int offset, String query) async {
 | 
					      String list, int limit, int offset, String query) async {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
      var url = Uri.http('127.0.0.1:3001', 'search',
 | 
					      var url = Uri.http('127.0.0.1:3001', 'search', {
 | 
				
			||||||
          {'list': list, 'limit': limit.toString(), 'offset': offset.toString(), 'query': query});
 | 
					        'list': list,
 | 
				
			||||||
 | 
					        'limit': limit.toString(),
 | 
				
			||||||
 | 
					        'offset': offset.toString(),
 | 
				
			||||||
 | 
					        'query': query
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
      var response = await http.get(url);
 | 
					      var response = await http.get(url);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (response.statusCode == 200) {
 | 
					      if (response.statusCode == 200) {
 | 
				
			||||||
        List<String> matches = List<String>.from(json.decode(response.body));
 | 
					        List<dynamic> messagesJson = json.decode(response.body);
 | 
				
			||||||
        print(matches);
 | 
					        List<SerializableMessage> messages =
 | 
				
			||||||
        return matches;
 | 
					            messagesJson.map((mj) => SerializableMessage.fromJson(mj)).toList();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // messages[0].id;
 | 
				
			||||||
 | 
					        // List<SerializableMessage> messages =
 | 
				
			||||||
 | 
					        //     List<SerializableMessage>.from(json.decode(response.body));
 | 
				
			||||||
 | 
					        //         List<SerializableMessage> messages =
 | 
				
			||||||
 | 
					        // -            messagesJson.map((mj) => SerializableMessage.fromJson(mj)).toList();
 | 
				
			||||||
 | 
					        // print("above mess");
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        print(messages[0].uid);
 | 
				
			||||||
 | 
					        return messages;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    } catch (e) {
 | 
					    } catch (e) {
 | 
				
			||||||
      print(e);
 | 
					      print("caught $e");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return [];
 | 
					    return [];
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,10 @@
 | 
				
			||||||
import 'package:crab_ui/folder_drawer.dart';
 | 
					import 'package:crab_ui/folder_drawer.dart';
 | 
				
			||||||
 | 
					import 'package:crab_ui/structs.dart';
 | 
				
			||||||
import 'package:flutter/widgets.dart';
 | 
					import 'package:flutter/widgets.dart';
 | 
				
			||||||
import 'api_service.dart';
 | 
					import 'api_service.dart';
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
import 'email.dart';
 | 
					import 'email.dart';
 | 
				
			||||||
 | 
					// import 'serialize.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class HomeScreen extends StatefulWidget {
 | 
					class HomeScreen extends StatefulWidget {
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
| 
						 | 
					@ -34,8 +36,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
 | 
				
			||||||
    setState(() {
 | 
					    setState(() {
 | 
				
			||||||
      if (!_tabs.contains(query)) {
 | 
					      if (!_tabs.contains(query)) {
 | 
				
			||||||
        _tabs.add(query);
 | 
					        _tabs.add(query);
 | 
				
			||||||
        _tabWidgets[query] = _buildSearchResultsWidget(
 | 
					        _tabWidgets[query] = _buildSearchResultsWidget(query); // Store a different widget for this tab
 | 
				
			||||||
            query); // Store a different widget for this tab
 | 
					 | 
				
			||||||
        _tabController = TabController(length: _tabs.length, vsync: this);
 | 
					        _tabController = TabController(length: _tabs.length, vsync: this);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
| 
						 | 
					@ -56,16 +57,91 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Build a custom widget for each search query
 | 
					  // Build a custom widget for each search query
 | 
				
			||||||
  Widget _buildSearchResultsWidget(String query) {
 | 
					  Widget _buildSearchResultsWidget(String query) {
 | 
				
			||||||
    return Center(
 | 
					    // Future<List<SerializableMessage>> result = apiService.sonicSearch("INBOX", 10, 0, query);
 | 
				
			||||||
      child: Column(
 | 
					    // return Center(
 | 
				
			||||||
        mainAxisAlignment: MainAxisAlignment.center,
 | 
					    //   child: Column(
 | 
				
			||||||
        children: [
 | 
					    //     mainAxisAlignment: MainAxisAlignment.center,
 | 
				
			||||||
          Text("Results for: $query", style: TextStyle(fontSize: 24)),
 | 
					    //     children: [
 | 
				
			||||||
          // You can add a list or any custom widget here
 | 
					    //       // Text("Results for: $query", style: TextStyle(fontSize: 24)),
 | 
				
			||||||
          Text("Here you can display search results or other content."),
 | 
					    //       // // You can add a list or any custom widget here
 | 
				
			||||||
        ],
 | 
					    //       // Text("Here you can display search results or other content."),
 | 
				
			||||||
      ),
 | 
					    //       // Text(result[0].messages.toString()),
 | 
				
			||||||
    );
 | 
					    //       Text(query),
 | 
				
			||||||
 | 
					    //       Text(result[0].name),
 | 
				
			||||||
 | 
					    //     ],
 | 
				
			||||||
 | 
					    //   ),
 | 
				
			||||||
 | 
					    // );
 | 
				
			||||||
 | 
					    return FutureBuilder<List<SerializableMessage>>(
 | 
				
			||||||
 | 
					    future: apiService.sonicSearch("INBOX", 10, 0, query),
 | 
				
			||||||
 | 
					    builder: (BuildContext context, AsyncSnapshot<List<SerializableMessage>> snapshot) {
 | 
				
			||||||
 | 
					      if (snapshot.connectionState == ConnectionState.waiting) {
 | 
				
			||||||
 | 
					        return Center(child: CircularProgressIndicator());
 | 
				
			||||||
 | 
					      } else if (snapshot.hasError) {
 | 
				
			||||||
 | 
					        return Center(child: Text('Error: ${snapshot.error}'));
 | 
				
			||||||
 | 
					      } else if (!snapshot.hasData || snapshot.data!.isEmpty) {
 | 
				
			||||||
 | 
					        return Center(child: Text('No results found for: $query'));
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        List<SerializableMessage> result = snapshot.data!;
 | 
				
			||||||
 | 
					        return Scaffold(
 | 
				
			||||||
 | 
					          body: ListView.separated(
 | 
				
			||||||
 | 
					            itemCount: result.length,
 | 
				
			||||||
 | 
					            itemBuilder: (context, index){
 | 
				
			||||||
 | 
					              final email = result[index];
 | 
				
			||||||
 | 
					              return ListTile(
 | 
				
			||||||
 | 
					              title: Text(email.from,
 | 
				
			||||||
 | 
					                  style: TextStyle(fontWeight: FontWeight.bold)),
 | 
				
			||||||
 | 
					              subtitle: Column(
 | 
				
			||||||
 | 
					                crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
 | 
					                children: [Text(email.subject)],
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					              trailing: Text(email.date.toString()),
 | 
				
			||||||
 | 
					              onTap: () async {
 | 
				
			||||||
 | 
					                String emailContent = await apiService.fetchEmailContent(email.id as List<String>);
 | 
				
			||||||
 | 
					                Navigator.push(
 | 
				
			||||||
 | 
					                  context,
 | 
				
			||||||
 | 
					                  MaterialPageRoute(
 | 
				
			||||||
 | 
					                    builder: (context) => EmailView(
 | 
				
			||||||
 | 
					                      emailContent: emailContent,
 | 
				
			||||||
 | 
					                      from: email.from,
 | 
				
			||||||
 | 
					                      name: email.name,
 | 
				
			||||||
 | 
					                      to: email.to.toString(),
 | 
				
			||||||
 | 
					                      subject: email.subject,
 | 
				
			||||||
 | 
					                      date: email.date.toString(),
 | 
				
			||||||
 | 
					                      id: email.id.toString(),
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              );
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					              separatorBuilder: (context, index) => Divider(),
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					          // child: Column(
 | 
				
			||||||
 | 
					          //   mainAxisAlignment: MainAxisAlignment.center,
 | 
				
			||||||
 | 
					          //   children: [
 | 
				
			||||||
 | 
					          //     Text("Results for: $query", style: TextStyle(fontSize: 24)),
 | 
				
			||||||
 | 
					          //     // Display the actual data
 | 
				
			||||||
 | 
					          //     Text(result[0].name), // Accessing the first result safely
 | 
				
			||||||
 | 
					          //     Text(result[0].from), // Displaying the 'from' field as an example
 | 
				
			||||||
 | 
					          //     Text(result[0].hash),
 | 
				
			||||||
 | 
					          //     Text(result[0].subject),
 | 
				
			||||||
 | 
					          //     Text(result[0].uid.toString()),
 | 
				
			||||||
 | 
					          //     Text(result[0].list),
 | 
				
			||||||
 | 
					          //     Text(result[0].id),
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					          //     // Add more fields or customize the display
 | 
				
			||||||
 | 
					          //     // SerializableEmailListScreen(emails: result, getEmailContent: getEmailContent)
 | 
				
			||||||
 | 
					          //     // Expanded(
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          //     //   child: 
 | 
				
			||||||
 | 
					          //     // ),
 | 
				
			||||||
 | 
					            // ],
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					        // );
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
| 
						 | 
					@ -84,31 +160,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
 | 
				
			||||||
          _emailPageKey.currentState?.updateSelectedFolder(folder);
 | 
					          _emailPageKey.currentState?.updateSelectedFolder(folder);
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
      // appBar: AppBar(
 | 
					
 | 
				
			||||||
      //   title: Text('Search with Tabs'),
 | 
					 | 
				
			||||||
      //   bottom: _tabs.isNotEmpty
 | 
					 | 
				
			||||||
      //       ? TabBar(
 | 
					 | 
				
			||||||
      //           controller: _tabController,
 | 
					 | 
				
			||||||
      //           isScrollable: true,
 | 
					 | 
				
			||||||
      //           tabs: _tabs
 | 
					 | 
				
			||||||
      //               .asMap()
 | 
					 | 
				
			||||||
      //               .entries
 | 
					 | 
				
			||||||
      //               .map((entry) => Tab(
 | 
					 | 
				
			||||||
      //                     child: Row(
 | 
					 | 
				
			||||||
      //                       children: [
 | 
					 | 
				
			||||||
      //                         Text(entry.value),
 | 
					 | 
				
			||||||
      //                         SizedBox(width: 8),
 | 
					 | 
				
			||||||
      //                         GestureDetector(
 | 
					 | 
				
			||||||
      //                           onTap: () => _removeTab(entry.key),
 | 
					 | 
				
			||||||
      //                           child: Icon(Icons.close, size: 16),
 | 
					 | 
				
			||||||
      //                         ),
 | 
					 | 
				
			||||||
      //                       ],
 | 
					 | 
				
			||||||
      //                     ),
 | 
					 | 
				
			||||||
      //                   ))
 | 
					 | 
				
			||||||
      //               .toList(),
 | 
					 | 
				
			||||||
      //         )
 | 
					 | 
				
			||||||
      //       : null,
 | 
					 | 
				
			||||||
      // ),
 | 
					 | 
				
			||||||
      body: Stack(
 | 
					      body: Stack(
 | 
				
			||||||
        children: [
 | 
					        children: [
 | 
				
			||||||
          Row(
 | 
					          Row(
 | 
				
			||||||
| 
						 | 
					@ -264,7 +316,7 @@ class _HomeScreenState extends State<HomeScreen> with TickerProviderStateMixin {
 | 
				
			||||||
                        controller: _tabController,
 | 
					                        controller: _tabController,
 | 
				
			||||||
                        children: _tabs.map((tab) {
 | 
					                        children: _tabs.map((tab) {
 | 
				
			||||||
                          return _tabWidgets[tab] ??
 | 
					                          return _tabWidgets[tab] ??
 | 
				
			||||||
                              Center(child: Text("No content found"));
 | 
					                            Center(child: Text("No content found"));
 | 
				
			||||||
                          // return Center(
 | 
					                          // return Center(
 | 
				
			||||||
                          //     child: EmailPage(
 | 
					                          //     child: EmailPage(
 | 
				
			||||||
                          //   key: _emailPageKey,
 | 
					                          //   key: _emailPageKey,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										85
									
								
								lib/serialize.dart
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								lib/serialize.dart
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,85 @@
 | 
				
			||||||
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					import 'api_service.dart';
 | 
				
			||||||
 | 
					import 'structs.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SerializableMessageListScreen extends StatefulWidget {
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  _SerializableMessageListScreenState createState() => _SerializableMessageListScreenState();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class _SerializableMessageListScreenState extends State<SerializableMessageListScreen> {
 | 
				
			||||||
 | 
					  List<SerializableMessage>? messages;
 | 
				
			||||||
 | 
					  bool isLoading = true;
 | 
				
			||||||
 | 
					  bool hasError = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  final ApiService apiService = ApiService();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  void initState() {
 | 
				
			||||||
 | 
					    super.initState();
 | 
				
			||||||
 | 
					    _fetchMessages();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Future<void> _fetchMessages() async {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      List<SerializableMessage> fetchedMessages = await apiService.sonicSearch("INBOX", 10, 0, "searchQuery");
 | 
				
			||||||
 | 
					      setState(() {
 | 
				
			||||||
 | 
					        messages = fetchedMessages;
 | 
				
			||||||
 | 
					        isLoading = false;
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					      setState(() {
 | 
				
			||||||
 | 
					        hasError = true;
 | 
				
			||||||
 | 
					        isLoading = false;
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
 | 
					    if (isLoading) {
 | 
				
			||||||
 | 
					      return Center(child: CircularProgressIndicator());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (hasError) {
 | 
				
			||||||
 | 
					      return Center(child: Text("Error fetching messages."));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (messages == null || messages!.isEmpty) {
 | 
				
			||||||
 | 
					      return Center(child: Text("No messages found."));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ListView.separated(
 | 
				
			||||||
 | 
					      itemCount: messages!.length,
 | 
				
			||||||
 | 
					      itemBuilder: (context, index) {
 | 
				
			||||||
 | 
					        final message = messages![index];
 | 
				
			||||||
 | 
					        return ListTile(
 | 
				
			||||||
 | 
					          title: Text(message.name, style: TextStyle(fontWeight: FontWeight.bold)),
 | 
				
			||||||
 | 
					          subtitle: Column(
 | 
				
			||||||
 | 
					            crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
 | 
					            children: [Text(message.subject)],
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					          trailing: Text(message.date),
 | 
				
			||||||
 | 
					          onTap: () async {
 | 
				
			||||||
 | 
					            String emailContent = await apiService.fetchEmailContent([message.id]);
 | 
				
			||||||
 | 
					            Navigator.push(
 | 
				
			||||||
 | 
					              context,
 | 
				
			||||||
 | 
					              MaterialPageRoute(
 | 
				
			||||||
 | 
					                builder: (context) => EmailView(
 | 
				
			||||||
 | 
					                  emailContent: emailContent,
 | 
				
			||||||
 | 
					                  from: message.from,
 | 
				
			||||||
 | 
					                  name: message.name,
 | 
				
			||||||
 | 
					                  to: message.to.toString(),
 | 
				
			||||||
 | 
					                  subject: message.subject,
 | 
				
			||||||
 | 
					                  date: message.date,
 | 
				
			||||||
 | 
					                  id: message.id,
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      separatorBuilder: (context, index) => Divider(),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -52,52 +52,52 @@ class MailAddress {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// //old data structure
 | 
					// //old data structure
 | 
				
			||||||
// class SerializableMessage {
 | 
					class SerializableMessage {
 | 
				
			||||||
//   final String name;
 | 
					  final String name;
 | 
				
			||||||
//   final String from;
 | 
					  final String from;
 | 
				
			||||||
//   final List<MailAddress> to;
 | 
					  final List<MailAddress> to;
 | 
				
			||||||
//   final List<MailAddress> cc;
 | 
					  final List<MailAddress> cc;
 | 
				
			||||||
//   final String hash;
 | 
					  final String hash;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//   final String subject;
 | 
					  final String subject;
 | 
				
			||||||
//   final String date;
 | 
					  final String date;
 | 
				
			||||||
//   final int uid;
 | 
					  final int uid;
 | 
				
			||||||
//   final String list;
 | 
					  final String list;
 | 
				
			||||||
//   final String id;
 | 
					  final String id;
 | 
				
			||||||
//   final String in_reply_to;
 | 
					  final String in_reply_to;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//   SerializableMessage({
 | 
					  SerializableMessage({
 | 
				
			||||||
//     required this.name,
 | 
					    required this.name,
 | 
				
			||||||
//     required this.from,
 | 
					    required this.from,
 | 
				
			||||||
//     required this.to,
 | 
					    required this.to,
 | 
				
			||||||
//     required this.cc,
 | 
					    required this.cc,
 | 
				
			||||||
//     required this.hash,
 | 
					    required this.hash,
 | 
				
			||||||
//     required this.subject,
 | 
					    required this.subject,
 | 
				
			||||||
//     required this.date,
 | 
					    required this.date,
 | 
				
			||||||
//     required this.uid,
 | 
					    required this.uid,
 | 
				
			||||||
//     required this.list,
 | 
					    required this.list,
 | 
				
			||||||
//     required this.id,
 | 
					    required this.id,
 | 
				
			||||||
//     required this.in_reply_to,
 | 
					    required this.in_reply_to,
 | 
				
			||||||
//   });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//   factory SerializableMessage.fromJson(Map<String, dynamic> json) {
 | 
					  factory SerializableMessage.fromJson(Map<String, dynamic> json) {
 | 
				
			||||||
//     var toList = json['to'] as List;
 | 
					    var toList = json['to'] as List;
 | 
				
			||||||
//     var ccList = json['cc'] as List;
 | 
					    var ccList = json['cc'] as List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//     return SerializableMessage(
 | 
					    return SerializableMessage(
 | 
				
			||||||
//       name: json['name'],
 | 
					      name: json['name'],
 | 
				
			||||||
//       from: json['from'],
 | 
					      from: json['from'],
 | 
				
			||||||
//       // to: json['name', 'address']
 | 
					      // to: json['name', 'address']
 | 
				
			||||||
//       to: toList.map((i) => MailAddress.fromJson(i)).toList(),
 | 
					      to: toList.map((i) => MailAddress.fromJson(i)).toList(),
 | 
				
			||||||
//       cc: ccList.map((i) => MailAddress.fromJson(i)).toList(),
 | 
					      cc: ccList.map((i) => MailAddress.fromJson(i)).toList(),
 | 
				
			||||||
//       // path: json['path'],
 | 
					      // path: json['path'],
 | 
				
			||||||
//       hash: json['hash'],
 | 
					      hash: json['hash'],
 | 
				
			||||||
//       subject: json['subject'],
 | 
					      subject: json['subject'],
 | 
				
			||||||
//       date: json['date'],
 | 
					      date: json['date'],
 | 
				
			||||||
//       uid: json['uid'],
 | 
					      uid: json['uid'],
 | 
				
			||||||
//       list: json['list'],
 | 
					      list: json['list'],
 | 
				
			||||||
//       id: json['id'],
 | 
					      id: json['id'],
 | 
				
			||||||
//       in_reply_to: json['in_reply_to'],
 | 
					      in_reply_to: json['in_reply_to'],
 | 
				
			||||||
//     );
 | 
					    );
 | 
				
			||||||
//   }
 | 
					  }
 | 
				
			||||||
// }
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue