using Adw; using Gtk; public class MainWindow : Adw.ApplicationWindow { private ConversationListView conversation_list_view; private TranscriptContainerView transcript_container_view; public MainWindow () { Object (title: "Kordophone"); var split_view = new NavigationSplitView (); split_view.set_min_sidebar_width (400); set_content (split_view); conversation_list_view = new ConversationListView (); conversation_list_view.conversation_selected.connect (conversation_selected); var conversation_list_page = new NavigationPage (conversation_list_view, "Conversations"); split_view.sidebar = conversation_list_page; transcript_container_view = new TranscriptContainerView (); transcript_container_view.on_send.connect (on_transcript_send); var transcript_page = new NavigationPage (transcript_container_view, "Transcript"); split_view.content = transcript_page; var show_settings_action = new SimpleAction ("settings", null); show_settings_action.activate.connect(show_settings); add_action(show_settings_action); } private void show_settings () { var dialog = new PreferencesWindow (this); dialog.present (this); } private void conversation_selected(Conversation conversation) { TranscriptView transcript_view = transcript_container_view.transcript_view; if (conversation == null) { transcript_view.model = null; } else { if (transcript_view.model == null || transcript_view.model.conversation_guid != conversation.guid) { transcript_view.model = new MessageListModel (conversation.guid); transcript_view.title = conversation.display_name; try { Repository.get_instance().mark_conversation_as_read(conversation.guid); Repository.get_instance().sync_conversation(conversation.guid); } catch (Error e) { GLib.warning("Failed to sync conversation: %s", e.message); } } } } private void on_transcript_send(TranscriptContainerView view) { var body = view.message_body; var attachment_guids = view.attachment_guids; // Strip empty space at the beginning and end of the body body = body.strip(); if (transcript_container_view.transcript_view.model == null) { GLib.warning("No conversation selected"); return; } var selected_conversation = transcript_container_view.transcript_view.model.conversation_guid; if (selected_conversation == null) { GLib.warning("No conversation selected"); return; } try { Repository.get_instance().send_message(selected_conversation, body, attachment_guids.to_array()); } catch (Error e) { GLib.warning("Failed to send message: %s", e.message); } } }