view libervia/desktop_kivy/plugins/plugin_wid_blog.kv @ 506:0480f883f0a6

plugin calls: update UI: - there is now a "search" UI to select a contact to call - "call" UI is displayed only when we actually are in a call - new control button to (un)mute audio and video - new control button to go to fullscreen/back to normal - add an extra "hang up" button directly in the call UI, so there is always one even in fullscreen mode - UI is similar to the one implemented in web frontend - notification + ringtone + desktop notification on incoming call - if an incoming call is cancelled from initiator, confirmation dialog is removed rel 425
author Goffi <goffi@goffi.org>
date Wed, 25 Oct 2023 15:28:44 +0200
parents b3cedbee561d
children 196483685a63
line wrap: on
line source

# desktop/mobile frontend for Libervia XMPP client
# Copyright (C) 2016-2022 Jérôme Poisson (goffi@goffi.org)

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.

# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

#:import date_fmt libervia.backend.tools.common.date_utils.date_fmt

<SearchButton>:
    size_hint: None, 1
    symbol: "search"
    width: dp(30)
    font_size: dp(25)
    color: 0.4, 0.4, 0.4, 1


<NewPostButton>:
    size_hint: None, 1
    symbol: "pencil"
    width: dp(30)
    font_size: dp(25)
    color: 0.4, 0.4, 0.4, 1

<NewPosttMenu>:
    padding: dp(20)
    spacing: dp(10)
    e2ee: e2ee_checkbox
    Label:
        size_hint: 1, None
        color: 1, 1, 1, 1
        text: _("Publish a new post on {node} node of {service}").format(node=root.blog.node or "personal blog", service=root.blog.service or root.blog.profile)
        text_size: root.width, None
        size: self.texture_size
        halign: "center"
        bold: True
    TextInput:
        id: title
        size_hint: 1, None
        height: sp(30)
        hint_text: _("title of your post (optional)")
    TextInput:
        id: content
        size_hint: 1, None
        height: sp(300)
        hint_text: _("body of your post (markdown syntax allowed)")
    BoxLayout
        id: e2ee
        size_hint: 1, None
        padding_y: None
        height: dp(25)
        Widget:
        CheckBox:
            id: e2ee_checkbox
            size_hint: None, 1
            width: dp(20)
            active: False
            color: 1, 1, 1, 1
        Label:
            size_hint: None, None
            text: _("encrypt post")
            text_size: None, None
            size: self.texture_size
            padding_x: dp(10)
            font_size: sp(15)
            color: 1, 1, 1, 1
        Widget:
    Button:
        size_hint: 1, None
        height: sp(50)
        text: _("publish")
        on_release: root.publish(title.text, content.text, e2ee=e2ee_checkbox.active)
    Widget:


<BlogPostAvatar>:
    size_hint: None, None
    size: dp(30), dp(30)
    canvas.before:
        Color:
            rgba: (0.87,0.87,0.87,1)
        RoundedRectangle:
            radius: [dp(5)]
            pos: self.pos
            size: self.size

<BlogPostWidget>:
    size_hint: 1, None
    avatar: avatar
    header_box: header_box
    height: self.minimum_height
    orientation: "vertical"
    Label:
        color: 0, 0, 0, 1
        bold: True
        font_size: root.title_font_size
        text_size: None, None
        size_hint: None, None
        size: self.texture_size[0], self.texture_size[1] if root.blog_data.get("title") else 0
        opacity: 1 if root.blog_data.get("title") else 0
        padding: dp(5), 0
        text: root.blog_data.get("title", "")
    BoxLayout:
        id: header_box
        size_hint: 1, None
        height: dp(40)
        BoxLayout:
            orientation: 'vertical'
            width: avatar.width
            size_hint: None, 1
            BlogPostAvatar:
                id: avatar
                source: app.default_avatar
        Label:
            id: created_ts
            color: (0, 0, 0, 1)
            font_size: root.font_size
            text_size: None, None
            size_hint: None, None
            size: self.texture_size
            padding: dp(5), 0
            markup: True
            valign: 'middle'
            text: f"published on [b]{date_fmt(root.blog_data.get('published', 0), 'auto_day')}[/b]"
        Symbol:
            size_hint: None, None
            height: created_ts.height
            width: self.height
            id: encrypted
            symbol: 'lock-filled' if root.blog_data.get("encrypted") else 'lock-open'
            font_size: created_ts.height
            opacity: 1 if root.blog_data.get("encrypted") else 0
            color: 0.29,0.87,0.0,1
    SimpleXHTMLWidget:
        size_hint: 1, None
        height: self.minimum_height
        xhtml: root.blog_data.get("content_xhtml") or self.escape(root.blog_data.get("content", ""))
        color: (0, 0, 0, 1)
        padding: dp(5), dp(5)


<Blog>:
    float_layout: float_layout
    orientation: 'vertical'
    posts_widget: posts_widget
    FloatLayout:
        id: float_layout
        ScrollView:
            size_hint: 1, 1
            pos_hint: {'x': 0, 'y': 0}
            do_scroll_x: False
            scroll_type: ['bars', 'content']
            bar_width: dp(6)
            BoxLayout:
                id: posts_widget
                orientation: "vertical"
                size_hint: 1, None
                height: self.minimum_height
                spacing: dp(10)