This commit is contained in:
Julien Wadel 2021-07-23 18:55:21 +02:00
parent 8cb6261cb3
commit 6f4b12c61e
187 changed files with 10798 additions and 2589 deletions

View file

@ -181,7 +181,7 @@ if(ENABLE_BUILD_APP_PLUGINS)
endif()
if(NOT LINPHONE_QT_ONLY)
ExternalProject_Add(sdk PREFIX "${CMAKE_BINARY_DIR}/sdk"
SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-sdk"
INSTALL_DIR "${LINPHONE_OUTPUT_DIR}"
@ -192,7 +192,7 @@ ExternalProject_Add(sdk PREFIX "${CMAKE_BINARY_DIR}/sdk"
INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step is already done at build time."
LIST_SEPARATOR | # Use the alternate list separator
CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
#BUILD_ALWAYS NO #${DO_BUILD}
BUILD_ALWAYS NO #${DO_BUILD}
)
ExternalProject_Add_Step(sdk force_build
COMMENT "Forcing build for 'desktop'"
@ -200,6 +200,7 @@ ExternalProject_Add_Step(sdk force_build
DEPENDERS build
ALWAYS 1
)
endif()
include(FindPkgConfig)
set(APP_DEPENDS sdk)
@ -257,7 +258,9 @@ else()
message("Adding Linphone Desktop in an IDE-friendly state")
set(CMAKE_INSTALL_PREFIX "${APPLICATION_OUTPUT_DIR}")
add_subdirectory(${CMAKE_SOURCE_DIR}/linphone-app)
add_dependencies(app-library ${APP_DEPENDS})
if(NOT LINPHONE_QT_ONLY)
add_dependencies(app-library ${APP_DEPENDS})
endif()
if( ENABLE_BUILD_APP_PLUGINS)
add_subdirectory(${CMAKE_SOURCE_DIR}/plugins "plugins-app")
endif()
@ -271,5 +274,5 @@ ExternalProject_Add(linphone-qt-only PREFIX "${CMAKE_BINARY_DIR}/linphone-app"
LIST_SEPARATOR | # Use the alternate list separator
CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
EXCLUDE_FROM_ALL ON
BUILD_ALWAYS ON
#BUILD_ALWAYS ON
)

View file

@ -122,6 +122,7 @@ set(SOURCES
src/components/calls/CallsListProxyModel.cpp
src/components/camera/Camera.cpp
src/components/camera/CameraPreview.cpp
src/components/chat-message/ChatMessageModel.cpp
src/components/chat-room/ChatRoomModel.cpp
src/components/chat-room/ChatRoomListModel.cpp
src/components/chat-room/ChatRoomProxyModel.cpp
@ -155,6 +156,11 @@ set(SOURCES
src/components/other/text-to-speech/TextToSpeech.cpp
src/components/other/units/Units.cpp
src/components/participant/ParticipantModel.cpp
src/components/participant/ParticipantListModel.cpp
src/components/participant/ParticipantProxyModel.cpp
src/components/participant/ParticipantDeviceModel.cpp
src/components/participant/ParticipantDeviceListModel.cpp
src/components/participant/ParticipantDeviceProxyModel.cpp
src/components/presence/OwnPresenceModel.cpp
src/components/presence/Presence.cpp
src/components/search/SearchHandler.cpp
@ -162,18 +168,21 @@ set(SOURCES
src/components/settings/SettingsModel.cpp
src/components/sip-addresses/SipAddressesModel.cpp
src/components/sip-addresses/SipAddressesProxyModel.cpp
src/components/sip-addresses/SipAddressesSorter.cpp
src/components/sip-addresses/SipAddressObserver.cpp
src/components/sip-addresses/SearchSipAddressesModel.cpp
src/components/sip-addresses/SearchSipAddressesProxyModel.cpp
src/components/sound-player/SoundPlayer.cpp
src/components/telephone-numbers/TelephoneNumbersModel.cpp
src/components/timeline/TimelineModel.cpp
src/components/timeline/TimelineListModel.cpp
src/components/timeline/TimelineProxyModel.cpp
src/components/url-handlers/UrlHandlers.cpp
src/utils/LinphoneUtils.cpp
src/utils/LinphoneEnums.cpp
src/utils/MediastreamerUtils.cpp
src/utils/QExifImageHeader.cpp
src/utils/Utils.cpp
src/utils/Tools.cpp
src/utils/plugins/PluginsManager.cpp
)
set(PLUGIN_SOURCES src/utils/plugins/PluginDataAPI.cpp
@ -200,6 +209,7 @@ set(HEADERS
src/components/calls/CallsListProxyModel.hpp
src/components/camera/Camera.hpp
src/components/camera/CameraPreview.hpp
src/components/chat-message/ChatMessageModel.hpp
src/components/chat-room/ChatRoomModel.hpp
src/components/chat-room/ChatRoomListModel.hpp
src/components/chat-room/ChatRoomProxyModel.hpp
@ -235,6 +245,11 @@ set(HEADERS
src/components/other/text-to-speech/TextToSpeech.hpp
src/components/other/units/Units.hpp
src/components/participant/ParticipantModel.hpp
src/components/participant/ParticipantListModel.hpp
src/components/participant/ParticipantProxyModel.hpp
src/components/participant/ParticipantDeviceModel.hpp
src/components/participant/ParticipantDeviceListModel.hpp
src/components/participant/ParticipantDeviceProxyModel.hpp
src/components/presence/OwnPresenceModel.hpp
src/components/presence/Presence.hpp
src/components/search/SearchHandler.hpp
@ -242,18 +257,21 @@ set(HEADERS
src/components/settings/SettingsModel.hpp
src/components/sip-addresses/SipAddressesModel.hpp
src/components/sip-addresses/SipAddressesProxyModel.hpp
src/components/sip-addresses/SipAddressesSorter.hpp
src/components/sip-addresses/SipAddressObserver.hpp
src/components/sip-addresses/SearchSipAddressesModel.hpp
src/components/sip-addresses/SearchSipAddressesProxyModel.hpp
src/components/sound-player/SoundPlayer.hpp
src/components/telephone-numbers/TelephoneNumbersModel.hpp
src/components/timeline/TimelineModel.hpp
src/components/timeline/TimelineListModel.hpp
src/components/timeline/TimelineProxyModel.hpp
src/components/url-handlers/UrlHandlers.hpp
src/utils/LinphoneUtils.hpp
src/utils/LinphoneEnums.hpp
src/utils/MediastreamerUtils.hpp
src/utils/QExifImageHeader.hpp
src/utils/Utils.hpp
src/utils/Tools.hpp
src/utils/plugins/PluginsManager.hpp
)
set(PLUGIN_HEADERS

View file

@ -14,6 +14,7 @@
<entry name="nat_policy_ref" overwrite="true">nat_policy_default_values</entry>
<entry name="realm" overwrite="true">sip.linphone.org</entry>
<entry name="contact_parameters" overwrite="true">message-expires=604800</entry>
<entry name="conference_factory_uri" overwrite="true">sip:conference-factory@sip.linphone.org</entry>
</section>
<section name="nat_policy_default_values">
<entry name="stun_server" overwrite="true">stun.linphone.org</entry>

View file

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="40"
height="40"
viewBox="0 0 40 40"
version="1.1"
id="svg12"
sodipodi:docname="add_participant_hovered.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs16" />
<sodipodi:namedview
id="namedview14"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="21.825"
inkscape:cx="20"
inkscape:cy="20.02291"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg12" />
<g
fill="none"
fill-rule="evenodd"
stroke-linecap="round"
stroke-linejoin="round"
id="g10">
<g
stroke="#4B5964"
stroke-width="2"
id="g8">
<g
id="g6">
<g
id="g4">
<path
d="M7.994 0v14.957L7.995 16 7.994 0zM16 7.994H1.043L0 7.995l16-.001z"
transform="translate(12.000000, 12.000000) translate(8.000000, 8.000000) rotate(-180.000000) translate(-8.000000, -8.000000) translate(-0.000000, 0.000000) translate(8.000000, 8.000000) rotate(-360.000000) translate(-8.000000, -8.000000)"
id="path2" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="40"
height="40"
viewBox="0 0 40 40"
version="1.1"
id="svg12"
sodipodi:docname="add_participant_normal.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs16" />
<sodipodi:namedview
id="namedview14"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="21.825"
inkscape:cx="20"
inkscape:cy="20.02291"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg12" />
<g
fill="none"
fill-rule="evenodd"
stroke-linecap="round"
stroke-linejoin="round"
id="g10">
<g
stroke="#96A5B1"
stroke-width="2"
id="g8">
<g
id="g6">
<g
id="g4">
<path
d="M7.994 0v14.957L7.995 16 7.994 0zM16 7.994H1.043L0 7.995l16-.001z"
transform="translate(12.000000, 12.000000) translate(8.000000, 8.000000) rotate(-180.000000) translate(-8.000000, -8.000000) translate(-0.000000, 0.000000) translate(8.000000, 8.000000) rotate(-360.000000) translate(-8.000000, -8.000000)"
id="path2" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="40"
height="40"
viewBox="0 0 40 40"
version="1.1"
id="svg12"
sodipodi:docname="add_participant_pressed.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs16" />
<sodipodi:namedview
id="namedview14"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="21.825"
inkscape:cx="20"
inkscape:cy="20.02291"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg12" />
<g
fill="none"
fill-rule="evenodd"
stroke-linecap="round"
stroke-linejoin="round"
id="g10">
<g
stroke="#FF5E00"
stroke-width="2"
id="g8">
<g
id="g6">
<g
id="g4">
<path
d="M7.994 0v14.957L7.995 16 7.994 0zM16 7.994H1.043L0 7.995l16-.001z"
transform="translate(12.000000, 12.000000) translate(8.000000, 8.000000) rotate(-180.000000) translate(-8.000000, -8.000000) translate(-0.000000, 0.000000) translate(8.000000, 8.000000) rotate(-360.000000) translate(-8.000000, -8.000000)"
id="path2" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="14"
height="14"
viewBox="0 0 14 14"
sodipodi:docname="timeline_close.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="29.1"
inkscape:cx="8.3333333"
inkscape:cy="15"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="14"
height="14"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAAAERlWElmTU0A KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAAB AAAAHgAAAADKQTcFAAAFMUlEQVRIDbVXfUxbVRS/5z5axteCzjkdRJMlUnUZmXxFw2YWJzBti4CC aysVtC2MuUT9x8SvNC4x+oeZn4w95sKEQlgj+2hxMtBtaGIic1PnMLIsi4loYjIZAweWvnc9t+w9 7gNKCGH3j95zfufjd8959913K9mcngP3bCy4dPHnM3+TmzisTl+lZUPOq1nZuauGzp89C1aHhxEg /xICZd3tzX03g9vm9O5mjL2u5wZaRWMKIynAWLfN5XlKNy6D4Pf7qd3paTSQYl4gZP00MSqMEDNh 0Gl3+DzLwEl8Pp/pzNBwQGVkh5gPgIxRKnVwYuScHrgyqhK12er0vqJhS5ntPl/yn+PsKObbLsYj 6RUA2Hqsbe9vVKKSG4uPig6EsXdsDu+7BmyRSlnNi+nqGOtF0scMIQB/mCTz5lCgeYDj2G5C7C6v TWUsiLWv4Lo+AD5NLiuqC1ZVKTq2gFBZ03DHxH+RHmxhttENhhLBXNzV/snvGh4j5kqps+5hhagh rHalZuQztubzpKwMZ9Dvj4j4bNnq3LGOkKleXDzOMwMJzpkSErYdbm0yvK46MXctddc/oEaVL7FN t8+EogTQl5xuKg82No4b8BvKEy7fhihjPbjoOw12IP3pkGQPBD66ZsBR0Xc1Nxz7rOkcQpvwAegt iQUw9ujE1chX5e6dq2K68GNz1D2EpKdnk+JGCq02Z5bMR8rDDcQcCLfvu5gIZBOKv3JdG4yRgkg0 0m9z12doGO7+EgJqH5LeomF8xsfTmpeVWdHS4p8UcVE2tFo08OqmopHj2PZ8EefdACIV4ZzDmNqK pCbRjqQfhALySzjrr6lo1+S4xNyhsqEhFVt8BKvdqgXEZoBrGJiKizJ2DOib3e3yboNvHEWKg8fg wYGBSMmWws6Riej9CNwn+CairC8aq1MpgRfCHc3vCT4LinrwQl6Vhw5JE4d7ZUbYc3P9IEol5g61 7e+Ya4uPGFsV3w/LY3G6w4CpsOg8GkWcZJqZkJoa/4rRCz8Gcac8PYMaJE5absnOuzJ0/ofvDZYF lAWJXa5dK0ei/4QxfpuYAxcxSgHMiGmPCmf2uCU7h+BH/rToG0+O26LK2l2rR9nkSSTZIgbjRrps NtNcvD1sRzbDMYq73291eD/E3a4tSAw1yPM62N2+u1hUPYGJLKI3Ov9ilmhxV5v8F8ftLl+xytQu PJ9TRD+U2/ItmbV4ETB+9QSnOcR4EbhXBYaHPcsU/PA0It8xYrJ2t+8dEXG7y/OgqpJuxG4VcexM OGlNalVwz54JEddkA3FpdV2eqqj8tLpNc+AzJumBVKgIyfJ1Eddk+7Pe9SzCTuBjWathfAYC3ySl gT0oy6MizmX9GdurPY+oivL1XFLSuTYV7PFIeZLQweYLkMDPd7jEdW3ge7/5+jg7VV5db/zaoUOM 2ObylqtR+AKfaZoWxGestAkPe6csy1MiPp8cat1/WUpJLsQqfzLYGds4pSjfVjh33i3igJ+1WkKU ZmyT4dWiQN8Otcuvic6LkfnVZyoyHsYNVyj644KGJUqLjwb2DXKcMqIcmEXKkPTlpZDyhEda3r+a vCatCLt1nOvawLZnKEzptznrCzg2faG/YcWdpjBKn+8OyAe1gKXO/Ho7PMYwD3OIObDycSol5Omb C7fgJL4yTy4HKSfi+yLfkvEModAoEmPlqaqqOGIVI+EYoQml4bamU6LTcsn4b+ItvNi/oefDvzCS JTt3nQRSbSiwL3bf1Y3LKOD5fTIrO28QC4wAhY/xP1rr/65z4vA1bJBHAAAAAElFTkSuQmCC "
id="image10"
x="0"
y="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="12"
height="12"
viewBox="0 0 12 12"
version="1.1"
id="svg11"
sodipodi:docname="drop_down.svg"
inkscape:version="0.92.2 2405546, 2018-03-11">
<metadata
id="metadata15">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>drop_down_list</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="985"
id="namedview13"
showgrid="false"
inkscape:zoom="5.9599"
inkscape:cx="4.2497286"
inkscape:cy="-10.038144"
inkscape:window-x="0"
inkscape:window-y="35"
inkscape:window-maximized="1"
inkscape:current-layer="svg11" />
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
<title
id="title2">drop_down_list</title>
<desc
id="desc4">Created with Sketch.</desc>
<defs
id="defs6" />
<g
id="Symbols"
style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
transform="translate(0,2.5)">
<g
id="drop_down_list"
style="stroke:#6b7a86;stroke-width:2">
<path
d="m 3.5,8.5 5,-5 M 3.5041964,-1.5 8.5,3.5"
id="status_username_disconnected"
transform="rotate(90,6,3.5)"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="24"
height="24"
viewBox="0 0 24 24"
sodipodi:docname="conferences_normal.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="true"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="2.2451317"
inkscape:cy="10.67583"
inkscape:window-width="1467"
inkscape:window-height="882"
inkscape:window-x="2167"
inkscape:window-y="33"
inkscape:window-maximized="0"
inkscape:current-layer="g8">
<inkscape:grid
type="xygrid"
id="grid7" />
</sodipodi:namedview>
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="30"
height="30"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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 SUVORK5CYII= "
id="image10"
x="-3"
y="-3" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="24"
height="24"
viewBox="0 0 24 24"
sodipodi:docname="conferences_normal.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="true"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="2.2451317"
inkscape:cy="10.67583"
inkscape:window-width="1467"
inkscape:window-height="882"
inkscape:window-x="2167"
inkscape:window-y="33"
inkscape:window-maximized="0"
inkscape:current-layer="g8">
<inkscape:grid
type="xygrid"
id="grid7" />
</sodipodi:namedview>
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="30"
height="30"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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 SUVORK5CYII= "
id="image10"
x="-3"
y="-3" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="17"
height="16"
viewBox="0 0 17 16"
version="1.1"
id="svg18"
sodipodi:docname="current_account_status_available.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs22" />
<sodipodi:namedview
id="namedview20"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="54.5625"
inkscape:cx="8.4948454"
inkscape:cy="8"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="svg18" />
<g
fill="none"
fill-rule="evenodd"
id="g16">
<g
id="g14">
<g
id="g12">
<g
id="g10">
<g
id="g8">
<g
transform="translate(-103.000000, -48.000000) translate(-0.000000, 0.000000) translate(54.023615, 47.000000) translate(49.021429, 1.000000) translate(0.000000, -0.000000)"
id="g6">
<ellipse
cx="8.003"
cy="8"
fill="#9ECD1D"
rx="8.003"
ry="8"
transform="translate(8.003499, 8.000000) rotate(-180.000000) translate(-8.003499, -8.000000)"
id="ellipse2" />
<path
stroke="#FFF"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M4.575 6.856l3.428 3.43m3.43-3.427l-3.43 3.427"
id="path4" />
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="12"
height="12"
viewBox="0 0 12 12"
version="1.1"
id="svg11"
sodipodi:docname="expanded.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata15">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>drop_down_list</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1092"
id="namedview13"
showgrid="false"
inkscape:zoom="5.9599"
inkscape:cx="4.2785953"
inkscape:cy="-9.983389"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="svg11"
inkscape:pagecheckerboard="0" />
<!-- Generator: Sketch 42 (36781) - http://www.bohemiancoding.com/sketch -->
<title
id="title2">drop_down_list</title>
<desc
id="desc4">Created with Sketch.</desc>
<defs
id="defs6" />
<g
id="Symbols"
style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(1,0,0,-1,0,9.5)">
<g
id="drop_down_list"
style="stroke:#6b7a86;stroke-width:2">
<path
d="m 3.5,8.5 5,-5 M 3.5041964,-1.5 8.5,3.5"
id="status_username_disconnected"
transform="rotate(90,6,3.5)"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="home_disabled.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="22.130584"
inkscape:cy="40"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="80"
height="80"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAAXNSR0IArs4c6QAAAERlWElmTU0A
KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAUKADAAQAAAAB
AAAAUAAAAAAx4ExPAAAFdElEQVR4Ae2d/28URRjGn11aClioRaG0ikJaKISgJTTRKGKiiT9pov4v
GP8EEv4XbCI/GhP8mmgNZ4wCRWoD2laBWlJoa7+tz7Nz19a7097d3Oxt7Psmd7e3M+87M599d2fm
3b25CFUkSUbbUZh+F0j4wjA/+5Cgs0rW/++uCI+AaJINHOXnCIYOjUTR8HJ5g6PyHUnh4/ewhkuE
1l+etr2/R7cR40I09M5HmzmsA0ySJEbhykUkyYXNGWy7jEAUXcLQ2x9GUbSmlLb1ZIO3juI/N+Rg
hSvK8oHeUg90p21yWTtMaiQQR+/rdI7TDiO95tWoaNkcATITO1730t7WOoy6HYOdLNnFxaFK3eqm
IAKJAGqcZ9IggWF5YF+DyqZGdvG2m2E087BzdqZT2MSDgAH0gCdVA2gAPQl4qpsHGkBPAp7q5oEG
0JOAp7p5oAH0JOCpnn8PfPoIoFdOZSOkn8cKPvci0NXraranC7jzfe5qmVOAvNNw9Cyw9wDnSsWT
5EkGjXa0A798R4hJbkDm7xSOWKWBlx08ba8suZe2BVRp2s6J5KcmAhLzhDj+KvBENyHRC5cXgBtX
3Uvb2qc05VHeHEh+ALbtBAZfA3btdVgW+WDAjc82PFDbfz12acqjvNJpseQDYPtuAnkd6NhDHLy+
zc8CY18CaysbeLR983OXpjzKKx3ptlBaD7CDj9ycOE8Q9KY13uyfuw/c+pocVyuxJExX2twDl1c6
0pWNFklrAe7m0GTwnOtdBW92Chj/lijoYf8qTBv/xuWVjnpm2ZCtFkjrAHY+BRx7xQGQt92f4Div
UDsC5ZWOdAVRtmQzY2kNwH09QP9LbDh70jUCmBoDJq/X33TpSFc2ZEs2u3rqt+OhkT3A7mfdIDne
4Rp+9wfgj9uNN0G6siGIsnnkLLCfZWQk2Q6mDhwF+k66hqrBE9eAh7zu+crMXWB1hfDOONuHX6BH
soO5N+5reUv97Dyw9wSgV8nz1BE0A16pibIlmyVP7B105ZXSA31mA/DwaUDeJ3jylFtfueFKsxuV
DoFoW2WoLJUpbwwogQFy6qVrkq57Cgqs8hHjsS+Kg+FArUoH4Swjhcgyu59xdQDrEkDCAdSEX73i
voNu8r9CeJpJLM4FaEaZSZVx8yqngSxT9VAdBliXABDDAdSEv3O/CwAsL7qAwNJ8WUsDfl1aKAYh
WLaCEBojnnqj6QWGAdgz4IICmnrpov7nb4wqP0+PZCiqfVfTG1FhsK3DdSAqU2WrDprcaN58sL8i
u8+OcMMYHfWYMwTJoWPuM2Erjp8DfvzEfQ/1fvotAuPBqxY3VOfSRAnjgb//DOgUKhdBzUJUdjV4
jxiEmObMpYkSzgN/+vSf1Rw8D+i+Rpay8NDFFAOWGcYDA1Y4b6YNoOcRMYAG0JOAp7p5oAH0JOCp
bh5oAD0JeKqbBxpATwKe6uaBBtCTgKd6dh6op6skOxmTC/k8i2yrDEm1iJBLadp7uGhMeRVnpxla
72GcjjHBU2+6KHF5nmZ91yMfugejMgNLdh6oe7czv7qGKdgZShR9Vvj53gTLY5mBJTsPVEP0PMuD
Oy4uqOdZQoju/M0zDvh4JoT1CpvZAlTxalhGjatobYAd2Z3CASqfB5MG0PMoGEAD6EnAU9080AB6
EvBUNw80gJ4EPNXNAw2gJwFP9ZjPHPJHaSYNESA7nsLpUr8N6ZtSNKlr4KiBaJjAqDxwpGH1ba8Y
jUTpIrTXpq4zCNm/7XnUBYALc5/pPRmny5tzhe66dC0zI+tc1ZxLw6fjwHR5c63QbVIbAbIqLQmf
Aky1uLw5fw5gELdCWFwKvpSt4qlv+zOCEpryzy3+jGBzdvs7DNKo8e8w/gZoXXQz0JFzfwAAAABJ
RU5ErkJggg==
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="home_hovered.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="22.130584"
inkscape:cy="40"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="80"
height="80"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
Rw4AAAAASUVORK5CYII=
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View file

@ -1,12 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 40.3 (33839) - http://www.bohemiancoding.com/sketch -->
<title>home_icon_default</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Symbols-vecto" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.5">
<g id="home_icon_default" fill="#FFFFFF">
<path d="M11.6533805,22 L19.9060865,22 L19.9060871,11.816648 L21.9872183,11.816648 L11.8075425,2 L2,11.769531 L4.20958624,11.769531 L4.20958624,22 L11.6533805,22 Z M11.6533805,24 L4.20958624,24 C3.10501674,24 2.20958624,23.1045695 2.20958624,22 L2.20958624,11.769531 L4.20958624,13.769531 L2,13.769531 C0.21631736,13.769531 -0.675165619,11.6113771 0.588534983,10.3525742 L10.3960775,0.583043223 C11.1675448,-0.185434046 12.4120294,-0.195521499 13.1958527,0.560349009 L23.3755284,10.376997 C24.6707593,11.6260373 23.7865862,13.816648 21.9872183,13.816648 L19.9060871,13.816648 L21.9060871,11.8166481 L21.9060865,22.0000001 C21.9060864,23.1045696 21.0106559,24 19.9060865,24 L11.6533805,24 Z"></path>
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="home_normal.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="22.130584"
inkscape:cy="40"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="80"
height="80"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
ricAAAAASUVORK5CYII=
"
id="image10" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="home_pressed.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="22.130584"
inkscape:cy="40"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="80"
height="80"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
DHRUZA9TAAAAAElFTkSuQmCC
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="71"
height="82"
viewBox="0 0 71 82"
version="1.1"
id="svg10"
sodipodi:docname="menu_chatroom_devices.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs14" />
<sodipodi:namedview
id="namedview12"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.646341"
inkscape:cx="35.45819"
inkscape:cy="41.046964"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg10" />
<g
fill="none"
fill-rule="evenodd"
id="g8">
<g
id="g6">
<path
stroke="#444"
stroke-width="5"
d="M33.308 74.729c-.042.027-.083.059-.13.081-.214.123-.457.19-.7.19-.23 0-.453-.058-.66-.176-.348-.195-8.638-4.942-16.75-14.693C7.58 51.118-1.1 35.978.115 15.028c.036-.61.485-1.122 1.094-1.244C18.102 10.444 31.131.906 31.676.5c.019-.014.041-.033.065-.047l.334-.221c.486-.325 1.132-.308 1.599.05.128.1 13.13 9.919 30.109 13.276.61.118 1.058.633 1.096 1.244 2.3 39.737-28.873 58.393-31.571 59.927"
transform="translate(3.000000, 4.000000)"
id="path2" />
<path
fill="#444"
d="M18.5 19L15.255 25.255 8 26.257 13.25 31.126 12.011 38 18.5 34.754 24.989 38 23.75 31.126 29 26.257 21.745 25.255zM45.5 19L42.255 25.255 35 26.257 40.25 31.126 39.011 38 45.5 34.754 51.989 38 50.75 31.126 56 26.257 48.745 25.255z"
transform="translate(3.000000, 4.000000)"
id="path4" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="69"
height="82"
viewBox="0 0 69 82"
version="1.1"
id="svg12"
sodipodi:docname="menu_chatroom_ephemeral.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs16" />
<sodipodi:namedview
id="namedview14"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.646341"
inkscape:cx="34.5189"
inkscape:cy="41.046964"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg12" />
<g
fill="none"
fill-rule="evenodd"
id="g10">
<g
fill="#444"
id="g8">
<path
d="M19.256 19.172l-3.665-5.405c-.656-.966-1.937-1.194-2.862-.51l-5.444 4.026c-.925.684-1.144 2.023-.489 2.989l3.696 5.453M56.999 25.725L60.6 21.02c.653-.854.436-2.036-.488-2.642l-5.429-3.559c-.922-.603-2.2-.401-2.853.452l-3.69 4.822M38.773 16.078v-2.002c0-1.28 1.085-2.33 2.412-2.33h1.33c1.33 0 2.415-1.049 2.415-2.33V2.332C44.93 1.049 43.844 0 42.516 0h-17.64c-1.325 0-2.41 1.049-2.41 2.331v7.086c0 1.28 1.085 2.33 2.41 2.33h1.334c1.327 0 2.413 1.048 2.413 2.329v2.002"
id="path2" />
<path
fill-rule="nonzero"
d="M34.5 13.667C15.89 13.667.802 28.784.802 47.43.802 66.08 15.89 81.196 34.5 81.196c18.61 0 33.698-15.117 33.698-33.765 0-18.647-15.087-33.764-33.698-33.764zm0 4.823c15.952 0 28.884 12.958 28.884 28.941 0 15.984-12.932 28.942-28.884 28.942S5.616 63.415 5.616 47.43c0-15.983 12.932-28.94 28.884-28.94z"
id="path4" />
<path
d="M34.5 22.51c-.067 0-.133.006-.198.006v24.717H9.633c-.001.065-.005.13-.005.199 0 13.676 11.051 24.81 24.674 24.917.066 0 .131.004.198.004 13.714 0 24.872-11.178 24.872-24.921 0-.068-.005-.134-.005-.2C59.26 33.584 48.147 22.51 34.5 22.51z"
id="path6" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View file

@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="85"
height="85"
viewBox="0 0 85 85"
sodipodi:docname="menu_infos.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.270588"
inkscape:cx="42.5"
inkscape:cy="42.5"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="85"
height="85"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

View file

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="86"
height="86"
viewBox="0 0 86 86"
version="1.1"
id="svg12"
sodipodi:docname="menu_infos.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs16" />
<sodipodi:namedview
id="namedview14"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.151163"
inkscape:cx="42.999999"
inkscape:cy="43.09851"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="svg12" />
<g
fill="none"
fill-rule="evenodd"
id="g10">
<g
transform="translate(3.000000, 3.000000)"
id="g8">
<circle
cx="40"
cy="40"
r="40"
stroke="#444"
stroke-width="5"
id="circle2" />
<text
fill="#444"
font-family="Baskerville-Bold, Baskerville"
font-size="65"
font-weight="bold"
id="text6"><tspan
x="29"
y="61"
id="tspan4">i</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;}
</style>
<g>
<path class="st0" d="M315.1,452.9c0,32.6-26.5,59.1-59.1,59.1s-59.1-26.5-59.1-59.1s26.5-59.1,59.1-59.1S315.1,420.3,315.1,452.9z
M315.1,256c0,32.6-26.5,59.1-59.1,59.1s-59.1-26.5-59.1-59.1s26.5-59.1,59.1-59.1S315.1,223.4,315.1,256z M315.1,59.1
c0,32.6-26.5,59.1-59.1,59.1s-59.1-26.5-59.1-59.1S223.4,0,256,0S315.1,26.5,315.1,59.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 791 B

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;}
</style>
<g>
<path class="st0" d="M315.1,452.9c0,32.6-26.5,59.1-59.1,59.1s-59.1-26.5-59.1-59.1s26.5-59.1,59.1-59.1S315.1,420.3,315.1,452.9z
M315.1,256c0,32.6-26.5,59.1-59.1,59.1s-59.1-26.5-59.1-59.1s26.5-59.1,59.1-59.1S315.1,223.4,315.1,256z M315.1,59.1
c0,32.6-26.5,59.1-59.1,59.1s-59.1-26.5-59.1-59.1S223.4,0,256,0S315.1,26.5,315.1,59.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 791 B

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;}
</style>
<g>
<path class="st0" d="M315.1,452.9c0,32.6-26.5,59.1-59.1,59.1s-59.1-26.5-59.1-59.1s26.5-59.1,59.1-59.1S315.1,420.3,315.1,452.9z
M315.1,256c0,32.6-26.5,59.1-59.1,59.1s-59.1-26.5-59.1-59.1s26.5-59.1,59.1-59.1S315.1,223.4,315.1,256z M315.1,59.1
c0,32.6-26.5,59.1-59.1,59.1s-59.1-26.5-59.1-59.1S223.4,0,256,0S315.1,26.5,315.1,59.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 791 B

View file

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="new_chat_group_disabled.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="22.130584"
inkscape:cy="40"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="80"
height="80"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.4 KiB

View file

@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="new_chat_group_hovered.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="22.130584"
inkscape:cy="40"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="80"
height="80"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
+C+VtQmfiJTG7gAAAABJRU5ErkJggg==
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="new_chat_group_normal.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="22.130584"
inkscape:cy="40"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="80"
height="80"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

View file

@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="new_chat_group_pressed.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="22.130584"
inkscape:cy="40"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="80"
height="80"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
QKNV/w7jf9TLq/s/EHOtAAAAAElFTkSuQmCC
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="41"
height="40"
viewBox="0 0 41 40"
version="1.1"
id="svg29"
sodipodi:docname="home.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview31"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="19.4"
inkscape:cx="20.489691"
inkscape:cy="20"
inkscape:window-width="1920"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg29" />
<defs
id="defs5">
<filter
id="oozatiu60a"
color-interpolation-filters="auto"
x="0"
y="0"
width="1.0083297"
height="1">
<feColorMatrix
in="SourceGraphic"
values="0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 1.000000 0"
id="feColorMatrix2" />
</filter>
</defs>
<g
fill="none"
fill-rule="evenodd"
id="g27">
<g
id="g25">
<g
id="g23">
<g
id="g21">
<path
fill="#FF5E00"
d="M0 5.005C0 2.241 2.237 0 5.008 0H35.01c2.766 0 5.007 2.236 5.007 5.005v29.99c0 2.764-2.237 5.005-5.007 5.005H5.008C2.242 40 0 37.764 0 34.995V5.005z"
transform="translate(-920.000000, -45.000000) translate(-0.000000, 0.000000) translate(920.402332, 45.000000) translate(20.008746, 20.000000) scale(1, -1) translate(-20.008746, -20.000000)"
id="path7" />
<g
filter="url(#oozatiu60a)"
transform="translate(-920.000000, -45.000000) translate(-0.000000, 0.000000) translate(920.402332, 45.000000) translate(5.002187, 7.000000)"
id="g19">
<g
fill="#FFF"
fill-rule="nonzero"
stroke="#FFF"
stroke-width=".5"
id="g11">
<path
d="M15.84.892c-.102-.06-.23-.063-.335-.006l-3.672 1.988V1.681C11.83.753 11.073.001 10.137 0H1.696C.76.001 0 .753 0 1.681V8.32c.001.928.76 1.68 1.696 1.681h8.44c.937-.001 1.695-.753 1.697-1.681V7.148l3.672 1.988c.105.057.233.054.336-.006.103-.06.166-.17.166-.29V1.182c0-.119-.063-.229-.166-.29zm-4.686 7.427c0 .557-.456 1.008-1.017 1.009H1.696C1.134 9.327.679 8.876.678 8.319V1.681c0-.557.456-1.008 1.018-1.009h8.44c.562.001 1.018.452 1.018 1.01v6.637zm4.175-.045l-3.496-1.892V3.64l3.496-1.892v6.526z"
transform="translate(14.006122, 9.000000)"
id="path9" />
</g>
<g
stroke="#FFF"
stroke-linecap="round"
stroke-width="1.5"
id="g15">
<path
d="M2.001 0L2.001 4M4.002 2L0 2"
transform="translate(18.007872, 12.000000)"
id="path13" />
</g>
<path
fill="#000"
fill-rule="nonzero"
d="M4.002 7.429c0 .315.256.571.571.571h6.86c.316 0 .572-.256.572-.571 0-1.6-.947-2.98-2.31-3.62.366-.405.595-.936.595-1.523C10.29 1.026 9.264 0 8.003 0c-1.26 0-2.286 1.025-2.286 2.286 0 .587.229 1.118.594 1.523-1.362.64-2.31 2.02-2.31 3.62zM6.86 2.286c0-.63.513-1.143 1.143-1.143.631 0 1.144.513 1.144 1.143s-.513 1.143-1.144 1.143c-.63 0-1.143-.513-1.143-1.143zM8.003 4.57c1.38 0 2.536.984 2.801 2.286H5.203c.265-1.302 1.42-2.286 2.8-2.286zM4.002 25.429c0 .315.256.571.571.571h6.86c.316 0 .572-.256.572-.571 0-1.6-.947-2.98-2.31-3.62.366-.405.595-.936.595-1.523 0-1.26-1.026-2.286-2.287-2.286-1.26 0-2.286 1.025-2.286 2.286 0 .587.229 1.118.594 1.523-1.362.64-2.31 2.02-2.31 3.62zm2.858-5.143c0-.63.513-1.143 1.143-1.143.631 0 1.144.513 1.144 1.143s-.513 1.143-1.144 1.143c-.63 0-1.143-.513-1.143-1.143zm1.143 2.285c1.38 0 2.536.984 2.801 2.286H5.203c.265-1.302 1.42-2.286 2.8-2.286zM0 16.429c0 .315.256.571.572.571h6.86c.316 0 .571-.256.571-.571 0-1.6-.947-2.98-2.309-3.62.366-.405.594-.936.594-1.523C6.288 10.026 5.263 9 4.002 9c-1.261 0-2.287 1.025-2.287 2.286 0 .587.229 1.118.594 1.523C.948 13.45 0 14.83 0 16.43zm2.858-5.143c0-.63.513-1.143 1.144-1.143.63 0 1.143.513 1.143 1.143s-.513 1.143-1.143 1.143-1.144-.513-1.144-1.143zm1.144 2.285c1.38 0 2.535.984 2.8 2.286H1.202c.265-1.302 1.42-2.286 2.8-2.286z"
id="path17" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="41"
height="40"
viewBox="0 0 41 40"
version="1.1"
id="svg29"
sodipodi:docname="home.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview31"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="19.4"
inkscape:cx="20.489691"
inkscape:cy="20"
inkscape:window-width="1920"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg29" />
<defs
id="defs5">
<filter
id="oozatiu60a"
color-interpolation-filters="auto"
x="0"
y="0"
width="1.0083297"
height="1">
<feColorMatrix
in="SourceGraphic"
values="0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 1.000000 0"
id="feColorMatrix2" />
</filter>
</defs>
<g
fill="none"
fill-rule="evenodd"
id="g27">
<g
id="g25">
<g
id="g23">
<g
id="g21">
<path
fill="#FF5E00"
d="M0 5.005C0 2.241 2.237 0 5.008 0H35.01c2.766 0 5.007 2.236 5.007 5.005v29.99c0 2.764-2.237 5.005-5.007 5.005H5.008C2.242 40 0 37.764 0 34.995V5.005z"
transform="translate(-920.000000, -45.000000) translate(-0.000000, 0.000000) translate(920.402332, 45.000000) translate(20.008746, 20.000000) scale(1, -1) translate(-20.008746, -20.000000)"
id="path7" />
<g
filter="url(#oozatiu60a)"
transform="translate(-920.000000, -45.000000) translate(-0.000000, 0.000000) translate(920.402332, 45.000000) translate(5.002187, 7.000000)"
id="g19">
<g
fill="#FFF"
fill-rule="nonzero"
stroke="#FFF"
stroke-width=".5"
id="g11">
<path
d="M15.84.892c-.102-.06-.23-.063-.335-.006l-3.672 1.988V1.681C11.83.753 11.073.001 10.137 0H1.696C.76.001 0 .753 0 1.681V8.32c.001.928.76 1.68 1.696 1.681h8.44c.937-.001 1.695-.753 1.697-1.681V7.148l3.672 1.988c.105.057.233.054.336-.006.103-.06.166-.17.166-.29V1.182c0-.119-.063-.229-.166-.29zm-4.686 7.427c0 .557-.456 1.008-1.017 1.009H1.696C1.134 9.327.679 8.876.678 8.319V1.681c0-.557.456-1.008 1.018-1.009h8.44c.562.001 1.018.452 1.018 1.01v6.637zm4.175-.045l-3.496-1.892V3.64l3.496-1.892v6.526z"
transform="translate(14.006122, 9.000000)"
id="path9" />
</g>
<g
stroke="#FFF"
stroke-linecap="round"
stroke-width="1.5"
id="g15">
<path
d="M2.001 0L2.001 4M4.002 2L0 2"
transform="translate(18.007872, 12.000000)"
id="path13" />
</g>
<path
fill="#000"
fill-rule="nonzero"
d="M4.002 7.429c0 .315.256.571.571.571h6.86c.316 0 .572-.256.572-.571 0-1.6-.947-2.98-2.31-3.62.366-.405.595-.936.595-1.523C10.29 1.026 9.264 0 8.003 0c-1.26 0-2.286 1.025-2.286 2.286 0 .587.229 1.118.594 1.523-1.362.64-2.31 2.02-2.31 3.62zM6.86 2.286c0-.63.513-1.143 1.143-1.143.631 0 1.144.513 1.144 1.143s-.513 1.143-1.144 1.143c-.63 0-1.143-.513-1.143-1.143zM8.003 4.57c1.38 0 2.536.984 2.801 2.286H5.203c.265-1.302 1.42-2.286 2.8-2.286zM4.002 25.429c0 .315.256.571.571.571h6.86c.316 0 .572-.256.572-.571 0-1.6-.947-2.98-2.31-3.62.366-.405.595-.936.595-1.523 0-1.26-1.026-2.286-2.287-2.286-1.26 0-2.286 1.025-2.286 2.286 0 .587.229 1.118.594 1.523-1.362.64-2.31 2.02-2.31 3.62zm2.858-5.143c0-.63.513-1.143 1.143-1.143.631 0 1.144.513 1.144 1.143s-.513 1.143-1.144 1.143c-.63 0-1.143-.513-1.143-1.143zm1.143 2.285c1.38 0 2.536.984 2.801 2.286H5.203c.265-1.302 1.42-2.286 2.8-2.286zM0 16.429c0 .315.256.571.572.571h6.86c.316 0 .571-.256.571-.571 0-1.6-.947-2.98-2.309-3.62.366-.405.594-.936.594-1.523C6.288 10.026 5.263 9 4.002 9c-1.261 0-2.287 1.025-2.287 2.286 0 .587.229 1.118.594 1.523C.948 13.45 0 14.83 0 16.43zm2.858-5.143c0-.63.513-1.143 1.144-1.143.63 0 1.143.513 1.143 1.143s-.513 1.143-1.143 1.143-1.144-.513-1.144-1.143zm1.144 2.285c1.38 0 2.535.984 2.8 2.286H1.202c.265-1.302 1.42-2.286 2.8-2.286z"
id="path17" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="41"
height="40"
viewBox="0 0 41 40"
version="1.1"
id="svg29"
sodipodi:docname="home.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview31"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="19.4"
inkscape:cx="20.489691"
inkscape:cy="20"
inkscape:window-width="1920"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg29" />
<defs
id="defs5">
<filter
id="oozatiu60a"
color-interpolation-filters="auto"
x="0"
y="0"
width="1.0083297"
height="1">
<feColorMatrix
in="SourceGraphic"
values="0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 0 1.000000 0 0 0 1.000000 0"
id="feColorMatrix2" />
</filter>
</defs>
<g
fill="none"
fill-rule="evenodd"
id="g27">
<g
id="g25">
<g
id="g23">
<g
id="g21">
<path
fill="#FF5E00"
d="M0 5.005C0 2.241 2.237 0 5.008 0H35.01c2.766 0 5.007 2.236 5.007 5.005v29.99c0 2.764-2.237 5.005-5.007 5.005H5.008C2.242 40 0 37.764 0 34.995V5.005z"
transform="translate(-920.000000, -45.000000) translate(-0.000000, 0.000000) translate(920.402332, 45.000000) translate(20.008746, 20.000000) scale(1, -1) translate(-20.008746, -20.000000)"
id="path7" />
<g
filter="url(#oozatiu60a)"
transform="translate(-920.000000, -45.000000) translate(-0.000000, 0.000000) translate(920.402332, 45.000000) translate(5.002187, 7.000000)"
id="g19">
<g
fill="#FFF"
fill-rule="nonzero"
stroke="#FFF"
stroke-width=".5"
id="g11">
<path
d="M15.84.892c-.102-.06-.23-.063-.335-.006l-3.672 1.988V1.681C11.83.753 11.073.001 10.137 0H1.696C.76.001 0 .753 0 1.681V8.32c.001.928.76 1.68 1.696 1.681h8.44c.937-.001 1.695-.753 1.697-1.681V7.148l3.672 1.988c.105.057.233.054.336-.006.103-.06.166-.17.166-.29V1.182c0-.119-.063-.229-.166-.29zm-4.686 7.427c0 .557-.456 1.008-1.017 1.009H1.696C1.134 9.327.679 8.876.678 8.319V1.681c0-.557.456-1.008 1.018-1.009h8.44c.562.001 1.018.452 1.018 1.01v6.637zm4.175-.045l-3.496-1.892V3.64l3.496-1.892v6.526z"
transform="translate(14.006122, 9.000000)"
id="path9" />
</g>
<g
stroke="#FFF"
stroke-linecap="round"
stroke-width="1.5"
id="g15">
<path
d="M2.001 0L2.001 4M4.002 2L0 2"
transform="translate(18.007872, 12.000000)"
id="path13" />
</g>
<path
fill="#000"
fill-rule="nonzero"
d="M4.002 7.429c0 .315.256.571.571.571h6.86c.316 0 .572-.256.572-.571 0-1.6-.947-2.98-2.31-3.62.366-.405.595-.936.595-1.523C10.29 1.026 9.264 0 8.003 0c-1.26 0-2.286 1.025-2.286 2.286 0 .587.229 1.118.594 1.523-1.362.64-2.31 2.02-2.31 3.62zM6.86 2.286c0-.63.513-1.143 1.143-1.143.631 0 1.144.513 1.144 1.143s-.513 1.143-1.144 1.143c-.63 0-1.143-.513-1.143-1.143zM8.003 4.57c1.38 0 2.536.984 2.801 2.286H5.203c.265-1.302 1.42-2.286 2.8-2.286zM4.002 25.429c0 .315.256.571.571.571h6.86c.316 0 .572-.256.572-.571 0-1.6-.947-2.98-2.31-3.62.366-.405.595-.936.595-1.523 0-1.26-1.026-2.286-2.287-2.286-1.26 0-2.286 1.025-2.286 2.286 0 .587.229 1.118.594 1.523-1.362.64-2.31 2.02-2.31 3.62zm2.858-5.143c0-.63.513-1.143 1.143-1.143.631 0 1.144.513 1.144 1.143s-.513 1.143-1.144 1.143c-.63 0-1.143-.513-1.143-1.143zm1.143 2.285c1.38 0 2.536.984 2.801 2.286H5.203c.265-1.302 1.42-2.286 2.8-2.286zM0 16.429c0 .315.256.571.572.571h6.86c.316 0 .571-.256.571-.571 0-1.6-.947-2.98-2.309-3.62.366-.405.594-.936.594-1.523C6.288 10.026 5.263 9 4.002 9c-1.261 0-2.287 1.025-2.287 2.286 0 .587.229 1.118.594 1.523C.948 13.45 0 14.83 0 16.43zm2.858-5.143c0-.63.513-1.143 1.144-1.143.63 0 1.143.513 1.143 1.143s-.513 1.143-1.143 1.143-1.144-.513-1.144-1.143zm1.144 2.285c1.38 0 2.535.984 2.8 2.286H1.202c.265-1.302 1.42-2.286 2.8-2.286z"
id="path17" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="new_conference_disabled.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="22.130584"
inkscape:cy="40"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="80"
height="80"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAAXNSR0IArs4c6QAAAERlWElmTU0A
KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAUKADAAQAAAAB
AAAAUAAAAAAx4ExPAAAJIElEQVR4Ae2dD3AU1R3Hv7u5BAImONCQBBDEBBCG0gGp/6hEbZOZOFBt
lbGITKpMK+HPdBiIBZt2/EOnoMV/jCSYAbEircOItjqFFlMKtFKmsVREqUD4ozYQqHKGGJPLXba/
37vb425vL7u3tyt3uX0ze/v2vd97u+9z7+17+33v9iToOOVhyPgIRVBo8+NyMulPW5aOaV8OClDh
OuGBFxLOYCTOSA+jR1tgSRug3ItiQjWBTAdo4zL6WEYHAvhA2ozTkRzCABWFON+P8VTjSiINXL+G
gAfN2IjDkkTtk5wcjnbhhVH06uEKxqxCTgAUzdateSoT4z2xEszIUhIdxgnc4t7zjLlFWfA9cTR2
BXtbt8OIYmPqgJnRSEUWQxVTKVyjGAI0zJND47yYODfABAEaI3MnwoNk11kj0J8BZtoThjVU+qmy
Lo4D9Q3cUAMCLkADQEbRLkAjQgbxHoP45KK/s2AUKh+cg8sLx4qMvK1HsP3xl/HWulPJZZw6qSVl
LmY6cjnzGq7H9Hk1kKTsqPwVpRt7NjyBDT/6R1R4mh4404RLbsjDt6oWCXid7Z+gadtasbGfgXIc
2/QB50wTrlg0GVnZ+egJdGDNjIfw4W6vYDWu7J9Y0Vgv4timbt+edGfoTA0cWjpSgPni/MkwPA5g
kBzGTrURB+n74QxAb0urQJKbPwIFpRefdNjPYexUG3GQvh/ONOFdGw5g8swueHLy8Yu/1WLvxt8K
RDfdP1uE9QS6wDZ9wDnXC686vBjDri7XZdTyn51YPn6tblyaBdrfhEdPvQy/bl4WFx4DYrBsw7Zp
7uytgYNH5eCxd36FvCFjBJcLnx7F0bd34uS/ggPnK6eMwpgbyyPij+Dn1zyEz0750pWjvQCfOLYU
hSVlBEPBgTfr8dQd20FzgdGOxJ8lr1di8oz5FC6htXk3akrXRNukz5F9Tfjb1SMJ3nRR9A/+sglP
zdSBx7EElOPYhh2n4bRp6uwDWL6IHwkldHWcwaqK1wx5sA3bcppgWsMkqWhg3zAmv7hUFLCttRn3
Pj3FVGHbzh5HwZVFyC9O28l8+wDm5hULaAWjp6Fi0TRTAFWj3Lxhqjfd9vY14XPH91HhxXKHBCEo
CKZNMFlqmNvbC6dGmb7Sq7CvCTtx2cMnDsCMn04l4WEElJiVZYmdMeDrwukjn2DTA/sTS9i7dXI1
0EnF+YZ7ilH98noogS8hZfWjYiR3u1EUP3r8nfjC+zGWlqxA14Ukv5EgWOsAnVScr5g0EI82NZBu
OJAuU4Hvy/M02Akvxeu9TsSJzc4dLGIYZPunzVhYUBNjyTW+evMcDBt/MxruW4Z9W6LWAsbYU4C1
JqxVnA/9OTjum1jxPfS/bIRQnP+68X0077ugd1LDsNtqpkCSeb5awhura7F1+XuGacwYPNvyKAYV
TaBHyVLkD/Wg7axfJBs4xIOFv5uJCbf8gE6ZRaq5B7f/7PsE8DmjbK01C63i/OydO8Ebq8+sQrMa
zTZWXcFVV0CmZtvd5bUNHl/LG6tfoOvzI0BNefLtNOyi72j+lpuxtmUTwZtN58yBLOcQQBnt3vNm
Lt8aQFVNdkpxlkSPYfLaCMKCLWViM1pk4cnmPGmoRetLS68djobP1+O6WQtIo+T5GYlE3oPw+9rM
gFNtrDVhVU1WFedzxzpFhpdCcV7wUhmun71ULRDW3bM77I/nkeVsmjFcLmpaD3VSHd6T+OOT6/CH
xz7Exs4X4yXTC7cGMJUU58GjLj7FRPr1SquGSQSQwfl97dj70vPJDG2sATz45v9w5ugeIYwOKpyE
GSsmqdcm9hzHNqnqeG763T/9BmtnbYe/I6nhTOIAWUVe+Mp8DL1qelw+QcW5H567ux4nmtrj2lmK
4HseNVu1thWWTAxnw/7av88Wx5+dasG6udSctXokxXJH0vTqv5OFx+dJDCArzst2PBKhKMdXnBnw
sh1FtivO2nueoBX6GFT4dfAm3I3Bnf490coze+gk0bvEAK5oXByCF09xPkxDgx1hxTlvyFiaSF+c
zopzNK7YI/MAdRXn2AzDivPyxv6YcOt9IcV5KxrrPtKzTjhMNEtKFdmE1Vr3eet7NEVwSOQZbsIJ
nyGhBOYBWlGcG9oq0W9AkVCcG+sMR/XmrpzuaZHNku95KkCGt3JacA66t8xkuR+mzbkOe1/cpnuP
7C2tJs48wL6kOPNj4tVld+N5bzka6+vwSs1BDRfTh+YBpqrizE0VoQ5D+E2UXenxkZVMz+3DUbmk
FtN/eAKvr6zHzmdOmEgdZWIeIKvGRWNvpdSJqiLOKs7qPZGLFemPKqbmoKfHj/1b6/HNO6qQlTMA
eV8bhzlPPo7blrwjxASNeW+H5gE+OO4Zyog3551CD/M0WqPNxHBDc0/s7er83Zwn5U3P2od3NeOF
B+aR5liBb1RWCQVm8Mhrxb63PDRxfKGp584d/5gGuz6xEGnWqtC4zobLvOuRGqHySKS6HPj9aSGq
Pv3dHVhaWoVj+7cR1wBt3VAIcE5urpkzWhdUzeRuVbFmQfWX73JvyjVQQjcJqvS7SDOnjGsjpCoC
x0rM2ea3UTNmTYwt65zVm/kp6yasLq/C+28ZSlrOAUxWsWZJ/8eb1lB5syB7kpf0QUq0Qj8r55r9
kxFzw2JqDMXEApwByN9k7e46IazyumitYh3obsPKsmpDxTo4qXQNWGANaoSJlS7S2ufrRutR2yeV
zHcikRdj5Ncq1lbXSP/3UAfWz91rdLpLGe9MJ+K0Yn0piWnO7QxArWKtnvRSKNbquR3aO9OEU0mx
dgicmq0znQjn7q6RVhknuHfXSCcILNLcXSMdScOC310jbQGamkRXsdaZ0HHXSKvENHsrirW7RjoC
Yl9SrCOKZeS1bxyYqoq1EYEk4+17EnHXSCf5VWRocvtqoAswQwkkWWy3BtoAUG+0m2S2GZM8wDUw
uLo0Y8psa0E7ZfGeZFvzzKDM6B3TMk0a8k9OXWeFALGT+Q3dNFffYSV9RqdhZvx2c4YgXukrYWpG
A0m08Aqa+K3mYhgjXm/Ob+h2nTkCxEp9JfzFcSC93pw6FBeiEcLQq+BVs5ilau6fEahoNHujPyOI
NBdvN3f/DoMfMAz/DuP/PbaWclv2z5EAAAAASUVORK5CYII=
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

View file

@ -1,13 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41 (35326) - http://www.bohemiancoding.com/sketch -->
<title>new_conference_clic</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="new_conference_clic">
<rect class="color-b-fill" fill="#D64D00" transform="translate(20.000000, 20.000000) scale(1, -1) translate(-20.000000, -20.000000) " x="0" y="0" width="40" height="40" rx="5"></rect>
<path d="M12.995,18.684375 C14.2175,18.684375 15.20875,19.6775 15.20875,20.90125 C15.20875,21.486875 14.981875,22.02 14.61125,22.41625 C14.55875,22.471875 14.579375,22.4625 14.521875,22.5125 L14.614375,22.575 C17.968125,24.0375 17.10875,26.49625 17.10875,26.49625 C14.948125,27.1825 12.99875,27.07625 12.99875,27.07625 L12.949375,27.07625 C12.949375,27.07625 11,27.1825 8.84,26.49625 C8.84,26.49625 7.98,24.0375 11.334375,22.575 L11.42625,22.5125 C11.36875,22.4625 11.389375,22.471875 11.3375,22.41625 C10.966875,22.02 10.74,21.486875 10.74,20.90125 C10.74,19.6775 11.730625,18.684375 12.953125,18.684375 L12.995,18.684375 L12.995,18.684375 Z M25.949375,18.684375 C27.171875,18.684375 28.1625,19.6775 28.1625,20.90125 C28.1625,21.486875 27.935,22.02 27.565,22.41625 C27.513125,22.471875 27.533125,22.4625 27.475625,22.5125 L27.568125,22.575 C30.9225,24.0375 30.0625,26.49625 30.0625,26.49625 C27.9025,27.1825 25.9525,27.07625 25.9525,27.07625 L25.903125,27.07625 C25.903125,27.07625 23.95375,27.1825 21.794375,26.49625 C21.794375,26.49625 20.93375,24.0375 24.288125,22.575 L24.38,22.5125 C24.3225,22.4625 24.34375,22.471875 24.29125,22.41625 C23.920625,22.02 23.69375,21.486875 23.69375,20.90125 C23.69375,19.6775 24.685,18.684375 25.906875,18.684375 L25.949375,18.684375 L25.949375,18.684375 Z M19.471875,7.5 C20.694375,7.5 21.685,8.4925 21.685,9.716875 C21.685,10.3025 21.458125,10.835625 21.0875,11.231875 C21.035625,11.2875 21.05625,11.27875 20.99875,11.328125 L21.09125,11.39 C24.445,12.8525 23.585,15.311875 23.585,15.311875 C21.425,15.998125 19.475625,15.891875 19.475625,15.891875 L19.425625,15.891875 C19.425625,15.891875 17.47625,15.998125 15.316875,15.311875 C15.316875,15.311875 14.45625,12.8525 17.810625,11.39 L17.903125,11.328125 C17.845,11.27875 17.86625,11.2875 17.81375,11.231875 C17.443125,10.835625 17.21625,10.3025 17.21625,9.716875 C17.21625,8.4925 18.2075,7.5 19.429375,7.5 L19.471875,7.5 L19.471875,7.5 Z M23.01625,30.265 C20.89625,32.37875 17.45875,32.37875 15.33875,30.265 M15.8075,32.5 L15.33875,30.265 L17.58,29.7975 L15.8075,32.5 Z M7.5,16.72 C7.5,13.73 9.93,11.306875 12.92875,11.306875 M11.011875,10.056875 L12.92875,11.306875 L11.675,13.2175 L11.011875,10.056875 Z M25.8175,11.306875 C28.815625,11.306875 31.24625,13.730625 31.24625,16.72 M32.5,14.80875 L31.24625,16.72 L29.33,15.47 L32.5,14.80875 Z" stroke="#FFFFFF" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path>
</g>
</g>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="new_conference_hovered.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="22.130584"
inkscape:cy="40"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="80"
height="80"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
AABJRU5ErkJggg==
"
id="image10" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -1,13 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41 (35326) - http://www.bohemiancoding.com/sketch -->
<title>new_conference_default</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="new_conference_default">
<rect class="color-i-fill" fill="#FE5E00" transform="translate(20.000000, 20.000000) scale(1, -1) translate(-20.000000, -20.000000) " x="0" y="0" width="40" height="40" rx="5"></rect>
<path d="M12.995,18.684375 C14.2175,18.684375 15.20875,19.6775 15.20875,20.90125 C15.20875,21.486875 14.981875,22.02 14.61125,22.41625 C14.55875,22.471875 14.579375,22.4625 14.521875,22.5125 L14.614375,22.575 C17.968125,24.0375 17.10875,26.49625 17.10875,26.49625 C14.948125,27.1825 12.99875,27.07625 12.99875,27.07625 L12.949375,27.07625 C12.949375,27.07625 11,27.1825 8.84,26.49625 C8.84,26.49625 7.98,24.0375 11.334375,22.575 L11.42625,22.5125 C11.36875,22.4625 11.389375,22.471875 11.3375,22.41625 C10.966875,22.02 10.74,21.486875 10.74,20.90125 C10.74,19.6775 11.730625,18.684375 12.953125,18.684375 L12.995,18.684375 L12.995,18.684375 Z M25.949375,18.684375 C27.171875,18.684375 28.1625,19.6775 28.1625,20.90125 C28.1625,21.486875 27.935,22.02 27.565,22.41625 C27.513125,22.471875 27.533125,22.4625 27.475625,22.5125 L27.568125,22.575 C30.9225,24.0375 30.0625,26.49625 30.0625,26.49625 C27.9025,27.1825 25.9525,27.07625 25.9525,27.07625 L25.903125,27.07625 C25.903125,27.07625 23.95375,27.1825 21.794375,26.49625 C21.794375,26.49625 20.93375,24.0375 24.288125,22.575 L24.38,22.5125 C24.3225,22.4625 24.34375,22.471875 24.29125,22.41625 C23.920625,22.02 23.69375,21.486875 23.69375,20.90125 C23.69375,19.6775 24.685,18.684375 25.906875,18.684375 L25.949375,18.684375 L25.949375,18.684375 Z M19.471875,7.5 C20.694375,7.5 21.685,8.4925 21.685,9.716875 C21.685,10.3025 21.458125,10.835625 21.0875,11.231875 C21.035625,11.2875 21.05625,11.27875 20.99875,11.328125 L21.09125,11.39 C24.445,12.8525 23.585,15.311875 23.585,15.311875 C21.425,15.998125 19.475625,15.891875 19.475625,15.891875 L19.425625,15.891875 C19.425625,15.891875 17.47625,15.998125 15.316875,15.311875 C15.316875,15.311875 14.45625,12.8525 17.810625,11.39 L17.903125,11.328125 C17.845,11.27875 17.86625,11.2875 17.81375,11.231875 C17.443125,10.835625 17.21625,10.3025 17.21625,9.716875 C17.21625,8.4925 18.2075,7.5 19.429375,7.5 L19.471875,7.5 L19.471875,7.5 Z M23.01625,30.265 C20.89625,32.37875 17.45875,32.37875 15.33875,30.265 M15.8075,32.5 L15.33875,30.265 L17.58,29.7975 L15.8075,32.5 Z M7.5,16.72 C7.5,13.73 9.93,11.306875 12.92875,11.306875 M11.011875,10.056875 L12.92875,11.306875 L11.675,13.2175 L11.011875,10.056875 Z M25.8175,11.306875 C28.815625,11.306875 31.24625,13.730625 31.24625,16.72 M32.5,14.80875 L31.24625,16.72 L29.33,15.47 L32.5,14.80875 Z" stroke="#FFFFFF" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path>
</g>
</g>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="new_conference_normal.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="22.130584"
inkscape:cy="40"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="80"
height="80"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAAXNSR0IArs4c6QAAAERlWElmTU0A
KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAUKADAAQAAAAB
AAAAUAAAAAAx4ExPAAAIH0lEQVR4Ae1da2wUVRT+drEtT9+8TUSKQBUwyEOKUUASohjlEaMoigYJ
KShojAX5gRZNECh/NCpVxAe+MBgFNaJRBDFaoUERlEKwQEAgIKLlYemDrufb2+lOZ6fdeUJnmZPM
7p17z319e8+9535zMxuBicSmIgNVGItauYCBiKAzYmhnopq+URGckD4fkr6XyLUamVgVeQ3Vxg5H
jBGxSRgnGQolc7Yx7by+j6BMMMmPLMcnehzqAYwVIIrdWCCJ+XqFMJyEQCG646lIgdinyAX1ySF4
9VCkCOTLQKPM4kd8BMbNFviYEaFYRmA8zTkSXzAqURrOeZaBU4qcE7OQE42vtuGCYRM9USdm4qlE
61wV+wWEOQjimKjgMDDEwiECMQyKyjLS2WH2MJtgF5VheH7tMLz82QU7mnAoLhAIAXQBHrOGALoE
MLGVc1mQafYr+gLjnwWyb1DJZRtlv/M08Oc2U/UgRkZkGxfzpeEDxgHTV8huO7Nh8TVVwCsTgM0N
SI2GOgG688eE214OTF6qwDu0E1g2RV0ME1CmUScNxB8T7jNKALoMqDgBzB8GHD+soNryObBol0qj
zk/vBx5Cf0Zg12sVMPu3JsBjDIFkHEXTUXeB/fQHwKN7FCCdewFZbRPgMMw4iqaj7gL76Q+A274C
Kv8D2sk89/inQC8xY14MM45p1EkD8WcOPLYf2Cgr8M2TgWtGqEsPFtOokwbi/Qhscykw7QMFXmMA
EVjqUDfg4q0fmNkamLMe6D5IwbK7BNjwRsJxpmNN8LT0sk3AAhmhVWLSARVvAcwTtyT3XiEaY8Dy
R4BviwQWCTcQeQxzSx4w6WV5IiPhYhmJRfc10AjSjXcm3LUPMER2GJQPZwt4SyRgBI+JEsc06lCY
h3kDKt4BOGqmGlF/7QHWLE4NB3Woy1HIvAEV71bhbgMUBHs2A/1utQbH3p+B9lcBV15vTb8Zank3
BxaVA60udNbFiuNA3kXO8p7jXN6ZMNkVLh52hXkCzMx4NwLtApcm+t7NgX4A0krM+rrRQJccZ6Nb
36aqCuBgKfDLan2s67A7AP1knDv0AAqF+jp9UggJcdAjLmebmmrZg0tZB7YDzw8Hamtcg8cCnJuw
n4xz64uBxXIEit+cI8sPsanuOnxJF5WfQO4VT+G53OTyOOL5CGLoRGDeEODIH8k6hhhnI9DIOH9R
qIodLUcLSVeRcd75PXDyqKE6i7d9xQ1qkaF8xIUjgdJ1FjOmUJv1NdDzJtlKDhRmPAuoqVQZWmQq
X3TsM1KvQMK6b58FvDk1RYFOn8oZGecNy2TPKxfZZ7LQZKOp41Q459Fsy4WA9Qo8tmWF/MAEjdNC
h2yJkFE99H7ghQPAuAIgo5VcLQWVFsC/HPWpxdnEorHJfjHOsVrpm9WmCQi5YnK8Upk5geGUwLJp
KZxjH5RtJX9w5i1dC5ywZzXOTFhjkzXGmZMz5VwwzrlCROS9q+rnZ/F7iXBjIZrvoyvVSONo5EB4
axpQVgy8aG3kaUU7A9DIOK+ap8rjHHK2GeeOV2t9AfThRGxyKEMAJHCn/gHemeHKtXEGYNAZZz6b
XjkHWCvmGzuTDLCNGPsAkkUml6dRV2aVkTQluUpO8NQxMw0XcZzzxGy10dZbFi5NGB5boO4Oy/xW
LPykGaXGheT3b1yDx4rsAUhQnvxS3IBBqpFNMc4EuH137xln45ynWqI+c4YDvPRiNic62bPry9SF
7QE4+XUFHhtgxjjv+gFY92qCcc4eLD6h5Akw46zDyjRoHUBTxtmsTAGXjDNX5AmLlKl/Nl+2UL+Z
KduPi5ulZNObsDbqStcDO75TZdabsP0q7OSwDqATxnmkuAYkTJnXgldvreHyA+nNknOeBiDBWyX3
qSRTHOb+dwI8q2M2R6bKr0u3DmA6Mc7cqo2ZCwx7GHh7OrBdHGiHYh3Ajj1UFYPvAnjZkU46X81O
Piu6NFVN9GEtzuy7+rTajXTqKaclhN7a96ua0/dtMdNuMs46gGSNb5wkFYsbYUe44PjJOGtzItuk
DzfVRvqBXATvXiCPIYSByRbmZe6PwNY1sjuxDgmrsK699CGA19kQ7lW5H7bkbhjmxKbaVytOc1TK
5jcfaD3RTcx4igKSZt3/DsXENFWGIU1Ka4ZC5riyQm0Lc0Z418Bp4ljTlyXrcqRMkarrioDHugCk
5M5UA9XiZBPglu0s1eucULVSvFPGmkTqEtmncgRyyrBILTXZJNJUXH05uks+Et90YrI6ec4HXhLX
6x5gpoAaJ3KT1fQx/gHolrEmpV+wSRGcWW1Ux/Uttxvm6KqVaaFaRvaMTgky1W45Bn1/AOQvuXCH
4tnoaxkZ65N/A7N7p2asOcH3u63uoZJ03o1w5T0obWpWD5Ua65CRsXZ6RrqiXJ0zbKyeZhDvzyLi
N2PdDIDTmuAPgEbGWqvtXDDWWt0+ffsDoJGxDs9I2/z5gs5Y2+iu9yMwPCNtA36jKr38OeutMdbM
G56RNiAYnpE2AGLn1pSxlq1YkkhceEY6CRXFOnPfGp6RNgHHSlQ6MdZW+lun491eODwjbQN2M9Xw
jLQZKmFcKgS8d6RT1Zhm6SGALn/QEEDXAPJttaE4Q0Cw48vH7B3JdFZVeuYS7Pj6u5L07N1Z6JVg
RwDlbEMojhAQ7KJ8Q7eAKE+ZQ7GFADET7KLx15vLG7ptZQ6VeSoun9jF3Zi615vL2YZQLCJQqL0S
PuEHyuvNJXMIYmoE46+C19SSzqqFf0agQWP4TvVnBHr18O8wBA2Lf4fxP9jExcGiub0YAAAAAElF
TkSuQmCC
"
id="image10" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View file

@ -1,13 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 41 (35326) - http://www.bohemiancoding.com/sketch -->
<title>new_conference_default</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="new_conference_default">
<rect class="color-i-fill" fill="#FE5E00" transform="translate(20.000000, 20.000000) scale(1, -1) translate(-20.000000, -20.000000) " x="0" y="0" width="40" height="40" rx="5"></rect>
<path d="M12.995,18.684375 C14.2175,18.684375 15.20875,19.6775 15.20875,20.90125 C15.20875,21.486875 14.981875,22.02 14.61125,22.41625 C14.55875,22.471875 14.579375,22.4625 14.521875,22.5125 L14.614375,22.575 C17.968125,24.0375 17.10875,26.49625 17.10875,26.49625 C14.948125,27.1825 12.99875,27.07625 12.99875,27.07625 L12.949375,27.07625 C12.949375,27.07625 11,27.1825 8.84,26.49625 C8.84,26.49625 7.98,24.0375 11.334375,22.575 L11.42625,22.5125 C11.36875,22.4625 11.389375,22.471875 11.3375,22.41625 C10.966875,22.02 10.74,21.486875 10.74,20.90125 C10.74,19.6775 11.730625,18.684375 12.953125,18.684375 L12.995,18.684375 L12.995,18.684375 Z M25.949375,18.684375 C27.171875,18.684375 28.1625,19.6775 28.1625,20.90125 C28.1625,21.486875 27.935,22.02 27.565,22.41625 C27.513125,22.471875 27.533125,22.4625 27.475625,22.5125 L27.568125,22.575 C30.9225,24.0375 30.0625,26.49625 30.0625,26.49625 C27.9025,27.1825 25.9525,27.07625 25.9525,27.07625 L25.903125,27.07625 C25.903125,27.07625 23.95375,27.1825 21.794375,26.49625 C21.794375,26.49625 20.93375,24.0375 24.288125,22.575 L24.38,22.5125 C24.3225,22.4625 24.34375,22.471875 24.29125,22.41625 C23.920625,22.02 23.69375,21.486875 23.69375,20.90125 C23.69375,19.6775 24.685,18.684375 25.906875,18.684375 L25.949375,18.684375 L25.949375,18.684375 Z M19.471875,7.5 C20.694375,7.5 21.685,8.4925 21.685,9.716875 C21.685,10.3025 21.458125,10.835625 21.0875,11.231875 C21.035625,11.2875 21.05625,11.27875 20.99875,11.328125 L21.09125,11.39 C24.445,12.8525 23.585,15.311875 23.585,15.311875 C21.425,15.998125 19.475625,15.891875 19.475625,15.891875 L19.425625,15.891875 C19.425625,15.891875 17.47625,15.998125 15.316875,15.311875 C15.316875,15.311875 14.45625,12.8525 17.810625,11.39 L17.903125,11.328125 C17.845,11.27875 17.86625,11.2875 17.81375,11.231875 C17.443125,10.835625 17.21625,10.3025 17.21625,9.716875 C17.21625,8.4925 18.2075,7.5 19.429375,7.5 L19.471875,7.5 L19.471875,7.5 Z M23.01625,30.265 C20.89625,32.37875 17.45875,32.37875 15.33875,30.265 M15.8075,32.5 L15.33875,30.265 L17.58,29.7975 L15.8075,32.5 Z M7.5,16.72 C7.5,13.73 9.93,11.306875 12.92875,11.306875 M11.011875,10.056875 L12.92875,11.306875 L11.675,13.2175 L11.011875,10.056875 Z M25.8175,11.306875 C28.815625,11.306875 31.24625,13.730625 31.24625,16.72 M32.5,14.80875 L31.24625,16.72 L29.33,15.47 L32.5,14.80875 Z" stroke="#FFFFFF" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"></path>
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="80"
height="80"
viewBox="0 0 80 80"
sodipodi:docname="new_conference_pressed.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="10.9125"
inkscape:cx="22.130584"
inkscape:cy="40"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="80"
height="80"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
"
id="image10" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg66"
width="20"
height="20"
viewBox="0 0 20 20"
sodipodi:docname="panel_hide_normal.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs70" />
<sodipodi:namedview
id="namedview68"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="5.725"
inkscape:cx="3.7554585"
inkscape:cy="13.973799"
inkscape:window-width="1920"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g72" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g72">
<image
width="20"
height="20"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAAAXNSR0IArs4c6QAAAERlWElmTU0A
KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAFKADAAQAAAAB
AAAAFAAAAACy3fD9AAABRklEQVQ4EWOcuWqz3N/f/x4ygMC0pRv/gxlAggnGANGMyDLIEkA2NikU
zTD1jNOXbfz5/z8DG0wASO8Bs5GNALJXYdVOvCADyCKYJchmw8RA9LRlm7YzobkGWR7B/v//M1a7
ESoQLKIVgkJ0NwMj4x8GoPFA/aFAvBphDpwVDFHIwOACF0JjMDIy/GJiYVIF+wgkN2PVNq3pSzc2
oKkDc0EhwwS1Eps8XAwUMkR7ZlgpBAX4X2A4rAUGLB/DfwZZYJa4Cg8XEIORkRcYhCywmHECCuyC
hSlIEzDs3BkZGK5haEQxBcqBGOYG5O1jARKgaF6dFeUXBpUGx+b/379BLlidFe3fABPHR4PyEFA+
lOh4wWcYstyogcihQR6b6mHIAioB/jMAEyWFAJzgGRh+MUIrhblAATuiikgsFoMd9Z/hEDMrUzIA
qmd2ang5O3UAAAAASUVORK5CYII=
"
id="image74" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg66"
width="20"
height="20"
viewBox="0 0 20 20"
sodipodi:docname="panel_hide_normal.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs70" />
<sodipodi:namedview
id="namedview68"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="5.725"
inkscape:cx="3.7554585"
inkscape:cy="13.973799"
inkscape:window-width="1920"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g72" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g72">
<image
width="20"
height="20"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAAAXNSR0IArs4c6QAAAERlWElmTU0A
KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAFKADAAQAAAAB
AAAAFAAAAACy3fD9AAABRklEQVQ4EWOcuWqz3N/f/x4ygMC0pRv/gxlAggnGANGMyDLIEkA2NikU
zTD1jNOXbfz5/z8DG0wASO8Bs5GNALJXYdVOvCADyCKYJchmw8RA9LRlm7YzobkGWR7B/v//M1a7
ESoQLKIVgkJ0NwMj4x8GoPFA/aFAvBphDpwVDFHIwOACF0JjMDIy/GJiYVIF+wgkN2PVNq3pSzc2
oKkDc0EhwwS1Eps8XAwUMkR7ZlgpBAX4X2A4rAUGLB/DfwZZYJa4Cg8XEIORkRcYhCywmHECCuyC
hSlIEzDs3BkZGK5haEQxBcqBGOYG5O1jARKgaF6dFeUXBpUGx+b/379BLlidFe3fABPHR4PyEFA+
lOh4wWcYstyogcihQR6b6mHIAioB/jMAEyWFAJzgGRh+MUIrhblAATuiikgsFoMd9Z/hEDMrUzIA
qmd2ang5O3UAAAAASUVORK5CYII=
"
id="image74" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg66"
width="20"
height="20"
viewBox="0 0 20 20"
sodipodi:docname="panel_hide_normal.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs70" />
<sodipodi:namedview
id="namedview68"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="5.725"
inkscape:cx="3.7554585"
inkscape:cy="13.973799"
inkscape:window-width="1920"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g72" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g72">
<image
width="20"
height="20"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAAAXNSR0IArs4c6QAAAERlWElmTU0A
KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAFKADAAQAAAAB
AAAAFAAAAACy3fD9AAABRklEQVQ4EWOcuWqz3N/f/x4ygMC0pRv/gxlAggnGANGMyDLIEkA2NikU
zTD1jNOXbfz5/z8DG0wASO8Bs5GNALJXYdVOvCADyCKYJchmw8RA9LRlm7YzobkGWR7B/v//M1a7
ESoQLKIVgkJ0NwMj4x8GoPFA/aFAvBphDpwVDFHIwOACF0JjMDIy/GJiYVIF+wgkN2PVNq3pSzc2
oKkDc0EhwwS1Eps8XAwUMkR7ZlgpBAX4X2A4rAUGLB/DfwZZYJa4Cg8XEIORkRcYhCywmHECCuyC
hSlIEzDs3BkZGK5haEQxBcqBGOYG5O1jARKgaF6dFeUXBpUGx+b/379BLlidFe3fABPHR4PyEFA+
lOh4wWcYstyogcihQR6b6mHIAioB/jMAEyWFAJzgGRh+MUIrhblAATuiikgsFoMd9Z/hEDMrUzIA
qmd2ang5O3UAAAAASUVORK5CYII=
"
id="image74" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="20"
height="20"
viewBox="0 0 20 20"
sodipodi:docname="panel_shown.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="9.7"
inkscape:cx="11.597938"
inkscape:cy="10.824742"
inkscape:window-width="1920"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="20"
height="20"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAAAXNSR0IArs4c6QAAAERlWElmTU0A
KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAFKADAAQAAAAB
AAAAFAAAAACy3fD9AAABaUlEQVQ4EWP0jUuT+/f730MGEPCOTPkPZgAJJhgDRDPCZf6fXAlWgpAG
ScFEYXoQsjARkCE+kSk/gZrZ4GKMjHsYQFrhpgNlvKNSV2HVTrwgA9gioLnoZsMtBtkTmbKdCcU1
yLLIbEbGz1jtRlYDYxOtkBHoz93GckIunOwsDEduvQQGD+NqmCkwmpGBIRiskOH/fxeYIDoNVPSL
kZVJlaGuohzs40fb5v33iUprQFcI4oNChglkJSEAChmiPTOsFDL6RKX8s1YVZ3z96efrmy8/vgYG
1VWU4Pr/nxcYWyzgmGFk+O9sJCfMCAtTsKYXH0SBCq5haEQxBcoBGsbIyOgGDO99LKBotlYTZ6jw
0oMrffz2q2jm4mMMjAyMq7csm9UAl8DDAOUhoFmhRMcLHrNQpEYNRAkOsjjUD0NQCfD95x+yXIOs
CWgOH7g0AVcKf/7PZfz/346oIhLZFCgbZNB/RsZDTCyMyQDaFIDgRDxcmgAAAABJRU5ErkJggg==
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="20"
height="20"
viewBox="0 0 20 20"
sodipodi:docname="panel_shown.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="9.7"
inkscape:cx="11.597938"
inkscape:cy="10.824742"
inkscape:window-width="1920"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="20"
height="20"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAAAXNSR0IArs4c6QAAAERlWElmTU0A
KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAFKADAAQAAAAB
AAAAFAAAAACy3fD9AAABaUlEQVQ4EWP0jUuT+/f730MGEPCOTPkPZgAJJhgDRDPCZf6fXAlWgpAG
ScFEYXoQsjARkCE+kSk/gZrZ4GKMjHsYQFrhpgNlvKNSV2HVTrwgA9gioLnoZsMtBtkTmbKdCcU1
yLLIbEbGz1jtRlYDYxOtkBHoz93GckIunOwsDEduvQQGD+NqmCkwmpGBIRiskOH/fxeYIDoNVPSL
kZVJlaGuohzs40fb5v33iUprQFcI4oNChglkJSEAChmiPTOsFDL6RKX8s1YVZ3z96efrmy8/vgYG
1VWU4Pr/nxcYWyzgmGFk+O9sJCfMCAtTsKYXH0SBCq5haEQxBcoBGsbIyOgGDO99LKBotlYTZ6jw
0oMrffz2q2jm4mMMjAyMq7csm9UAl8DDAOUhoFmhRMcLHrNQpEYNRAkOsjjUD0NQCfD95x+yXIOs
CWgOH7g0AVcKf/7PZfz/346oIhLZFCgbZNB/RsZDTCyMyQDaFIDgRDxcmgAAAABJRU5ErkJggg==
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="20"
height="20"
viewBox="0 0 20 20"
sodipodi:docname="panel_shown.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="9.7"
inkscape:cx="11.597938"
inkscape:cy="10.824742"
inkscape:window-width="1920"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="20"
height="20"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAAH6ji2bAAAAAXNSR0IArs4c6QAAAERlWElmTU0A
KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAFKADAAQAAAAB
AAAAFAAAAACy3fD9AAABaUlEQVQ4EWP0jUuT+/f730MGEPCOTPkPZgAJJhgDRDPCZf6fXAlWgpAG
ScFEYXoQsjARkCE+kSk/gZrZ4GKMjHsYQFrhpgNlvKNSV2HVTrwgA9gioLnoZsMtBtkTmbKdCcU1
yLLIbEbGz1jtRlYDYxOtkBHoz93GckIunOwsDEduvQQGD+NqmCkwmpGBIRiskOH/fxeYIDoNVPSL
kZVJlaGuohzs40fb5v33iUprQFcI4oNChglkJSEAChmiPTOsFDL6RKX8s1YVZ3z96efrmy8/vgYG
1VWU4Pr/nxcYWyzgmGFk+O9sJCfMCAtTsKYXH0SBCq5haEQxBcoBGsbIyOgGDO99LKBotlYTZ6jw
0oMrffz2q2jm4mMMjAyMq7csm9UAl8DDAOUhoFmhRMcLHrNQpEYNRAkOsjjUD0NQCfD95x+yXIOs
CWgOH7g0AVcKf/7PZfz/346oIhLZFCgbZNB/RsZDTCyMyQDaFIDgRDxcmgAAAABJRU5ErkJggg==
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="41"
height="40"
viewBox="0 0 41 40"
version="1.1"
id="svg18"
sodipodi:docname="plus_disabled.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs22" />
<sodipodi:namedview
id="namedview20"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="21.825"
inkscape:cx="20.504009"
inkscape:cy="20"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="svg18" />
<g
fill="none"
fill-rule="evenodd"
stroke-linecap="round"
stroke-linejoin="round"
id="g16">
<g
stroke="#96A5B1"
stroke-width="2"
id="g14">
<g
id="g12">
<g
id="g10">
<g
id="g8">
<g
id="g6">
<g
id="g4">
<path
d="M7.994 0v14.957L7.995 16 7.994 0zM16 7.994H1.043L0 7.995l16-.001z"
transform="translate(-812.000000, -218.000000) translate(73.000000, 89.000000) translate(504.000000, 124.000000) translate(235.193878, 5.000000) translate(12.000000, 12.000000) translate(8.000000, 8.000000) rotate(-180.000000) translate(-8.000000, -8.000000) translate(-0.000000, 0.000000) translate(8.000000, 8.000000) rotate(-360.000000) translate(-8.000000, -8.000000)"
id="path2" />
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="41"
height="40"
viewBox="0 0 41 40"
version="1.1"
id="svg18"
sodipodi:docname="plus_hovered.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs22" />
<sodipodi:namedview
id="namedview20"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="21.825"
inkscape:cx="20.504009"
inkscape:cy="20"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="svg18" />
<g
fill="none"
fill-rule="evenodd"
stroke-linecap="round"
stroke-linejoin="round"
id="g16">
<g
stroke="#96A5B1"
stroke-width="2"
id="g14">
<g
id="g12">
<g
id="g10">
<g
id="g8">
<g
id="g6">
<g
id="g4">
<path
d="M7.994 0v14.957L7.995 16 7.994 0zM16 7.994H1.043L0 7.995l16-.001z"
transform="translate(-812.000000, -218.000000) translate(73.000000, 89.000000) translate(504.000000, 124.000000) translate(235.193878, 5.000000) translate(12.000000, 12.000000) translate(8.000000, 8.000000) rotate(-180.000000) translate(-8.000000, -8.000000) translate(-0.000000, 0.000000) translate(8.000000, 8.000000) rotate(-360.000000) translate(-8.000000, -8.000000)"
id="path2" />
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="41"
height="40"
viewBox="0 0 41 40"
version="1.1"
id="svg18"
sodipodi:docname="plus_normal.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs22" />
<sodipodi:namedview
id="namedview20"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="21.825"
inkscape:cx="20.504009"
inkscape:cy="20"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="svg18" />
<g
fill="none"
fill-rule="evenodd"
stroke-linecap="round"
stroke-linejoin="round"
id="g16">
<g
stroke="#96A5B1"
stroke-width="2"
id="g14">
<g
id="g12">
<g
id="g10">
<g
id="g8">
<g
id="g6">
<g
id="g4">
<path
d="M7.994 0v14.957L7.995 16 7.994 0zM16 7.994H1.043L0 7.995l16-.001z"
transform="translate(-812.000000, -218.000000) translate(73.000000, 89.000000) translate(504.000000, 124.000000) translate(235.193878, 5.000000) translate(12.000000, 12.000000) translate(8.000000, 8.000000) rotate(-180.000000) translate(-8.000000, -8.000000) translate(-0.000000, 0.000000) translate(8.000000, 8.000000) rotate(-360.000000) translate(-8.000000, -8.000000)"
id="path2" />
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="41"
height="40"
viewBox="0 0 41 40"
version="1.1"
id="svg18"
sodipodi:docname="plus_pressed.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs22" />
<sodipodi:namedview
id="namedview20"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="21.825"
inkscape:cx="20.504009"
inkscape:cy="20"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="svg18" />
<g
fill="none"
fill-rule="evenodd"
stroke-linecap="round"
stroke-linejoin="round"
id="g16">
<g
stroke="#96A5B1"
stroke-width="2"
id="g14">
<g
id="g12">
<g
id="g10">
<g
id="g8">
<g
id="g6">
<g
id="g4">
<path
d="M7.994 0v14.957L7.995 16 7.994 0zM16 7.994H1.043L0 7.995l16-.001z"
transform="translate(-812.000000, -218.000000) translate(73.000000, 89.000000) translate(504.000000, 124.000000) translate(235.193878, 5.000000) translate(12.000000, 12.000000) translate(8.000000, 8.000000) rotate(-180.000000) translate(-8.000000, -8.000000) translate(-0.000000, 0.000000) translate(8.000000, 8.000000) rotate(-360.000000) translate(-8.000000, -8.000000)"
id="path2" />
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="14"
height="14"
viewBox="0 0 14 14"
sodipodi:docname="timeline_close.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="29.1"
inkscape:cx="8.3333333"
inkscape:cy="15"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="14"
height="14"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAAAERlWElmTU0A KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAAB AAAAHgAAAADKQTcFAAAFMUlEQVRIDbVXfUxbVRS/5z5axteCzjkdRJMlUnUZmXxFw2YWJzBti4CC aysVtC2MuUT9x8SvNC4x+oeZn4w95sKEQlgj+2hxMtBtaGIic1PnMLIsi4loYjIZAweWvnc9t+w9 7gNKCGH3j95zfufjd8959913K9mcngP3bCy4dPHnM3+TmzisTl+lZUPOq1nZuauGzp89C1aHhxEg /xICZd3tzX03g9vm9O5mjL2u5wZaRWMKIynAWLfN5XlKNy6D4Pf7qd3paTSQYl4gZP00MSqMEDNh 0Gl3+DzLwEl8Pp/pzNBwQGVkh5gPgIxRKnVwYuScHrgyqhK12er0vqJhS5ntPl/yn+PsKObbLsYj 6RUA2Hqsbe9vVKKSG4uPig6EsXdsDu+7BmyRSlnNi+nqGOtF0scMIQB/mCTz5lCgeYDj2G5C7C6v TWUsiLWv4Lo+AD5NLiuqC1ZVKTq2gFBZ03DHxH+RHmxhttENhhLBXNzV/snvGh4j5kqps+5hhagh rHalZuQztubzpKwMZ9Dvj4j4bNnq3LGOkKleXDzOMwMJzpkSErYdbm0yvK46MXctddc/oEaVL7FN t8+EogTQl5xuKg82No4b8BvKEy7fhihjPbjoOw12IP3pkGQPBD66ZsBR0Xc1Nxz7rOkcQpvwAegt iQUw9ujE1chX5e6dq2K68GNz1D2EpKdnk+JGCq02Z5bMR8rDDcQcCLfvu5gIZBOKv3JdG4yRgkg0 0m9z12doGO7+EgJqH5LeomF8xsfTmpeVWdHS4p8UcVE2tFo08OqmopHj2PZ8EefdACIV4ZzDmNqK pCbRjqQfhALySzjrr6lo1+S4xNyhsqEhFVt8BKvdqgXEZoBrGJiKizJ2DOib3e3yboNvHEWKg8fg wYGBSMmWws6Riej9CNwn+CairC8aq1MpgRfCHc3vCT4LinrwQl6Vhw5JE4d7ZUbYc3P9IEol5g61 7e+Ya4uPGFsV3w/LY3G6w4CpsOg8GkWcZJqZkJoa/4rRCz8Gcac8PYMaJE5absnOuzJ0/ofvDZYF lAWJXa5dK0ei/4QxfpuYAxcxSgHMiGmPCmf2uCU7h+BH/rToG0+O26LK2l2rR9nkSSTZIgbjRrps NtNcvD1sRzbDMYq73291eD/E3a4tSAw1yPM62N2+u1hUPYGJLKI3Ov9ilmhxV5v8F8ftLl+xytQu PJ9TRD+U2/ItmbV4ETB+9QSnOcR4EbhXBYaHPcsU/PA0It8xYrJ2t+8dEXG7y/OgqpJuxG4VcexM OGlNalVwz54JEddkA3FpdV2eqqj8tLpNc+AzJumBVKgIyfJ1Eddk+7Pe9SzCTuBjWathfAYC3ySl gT0oy6MizmX9GdurPY+oivL1XFLSuTYV7PFIeZLQweYLkMDPd7jEdW3ge7/5+jg7VV5db/zaoUOM 2ObylqtR+AKfaZoWxGestAkPe6csy1MiPp8cat1/WUpJLsQqfzLYGds4pSjfVjh33i3igJ+1WkKU ZmyT4dWiQN8Otcuvic6LkfnVZyoyHsYNVyj644KGJUqLjwb2DXKcMqIcmEXKkPTlpZDyhEda3r+a vCatCLt1nOvawLZnKEzptznrCzg2faG/YcWdpjBKn+8OyAe1gKXO/Ho7PMYwD3OIObDycSol5Omb C7fgJL4yTy4HKSfi+yLfkvEModAoEmPlqaqqOGIVI+EYoQml4bamU6LTcsn4b+ItvNi/oefDvzCS JTt3nQRSbSiwL3bf1Y3LKOD5fTIrO28QC4wAhY/xP1rr/65z4vA1bJBHAAAAAElFTkSuQmCC "
id="image10"
x="0"
y="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="40"
height="40"
viewBox="0 0 40 40"
version="1.1"
id="svg12"
sodipodi:docname="remove_participant_hovered.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs16" />
<sodipodi:namedview
id="namedview14"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="21.825"
inkscape:cx="20"
inkscape:cy="20.02291"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg12" />
<g
fill="none"
fill-rule="evenodd"
stroke-linecap="round"
stroke-linejoin="round"
id="g10">
<g
stroke="#4B5964"
stroke-width="2"
id="g8">
<g
id="g6">
<g
id="g4">
<path
d="M7.994 0v14.957L7.995 16 7.994 0zM16 7.994H1.043L0 7.995l16-.001z"
transform="translate(8.686292, 8.686292) translate(11.313708, 11.313708) rotate(-135.000000) translate(-11.313708, -11.313708) translate(3.313708, 3.313708) translate(8.000000, 8.000000) rotate(-360.000000) translate(-8.000000, -8.000000)"
id="path2" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="40"
height="40"
viewBox="0 0 40 40"
version="1.1"
id="svg12"
sodipodi:docname="remove_participant_normal.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs16" />
<sodipodi:namedview
id="namedview14"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="21.825"
inkscape:cx="20"
inkscape:cy="20.02291"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg12" />
<g
fill="none"
fill-rule="evenodd"
stroke-linecap="round"
stroke-linejoin="round"
id="g10">
<g
stroke="#96A5B1"
stroke-width="2"
id="g8">
<g
id="g6">
<g
id="g4">
<path
d="M7.994 0v14.957L7.995 16 7.994 0zM16 7.994H1.043L0 7.995l16-.001z"
transform="translate(8.686292, 8.686292) translate(11.313708, 11.313708) rotate(-135.000000) translate(-11.313708, -11.313708) translate(3.313708, 3.313708) translate(8.000000, 8.000000) rotate(-360.000000) translate(-8.000000, -8.000000)"
id="path2" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="40"
height="40"
viewBox="0 0 40 40"
version="1.1"
id="svg12"
sodipodi:docname="remove_participant_pressed.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs16" />
<sodipodi:namedview
id="namedview14"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="21.825"
inkscape:cx="20"
inkscape:cy="20.02291"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg12" />
<g
fill="none"
fill-rule="evenodd"
stroke-linecap="round"
stroke-linejoin="round"
id="g10">
<g
stroke="#FF5E00"
stroke-width="2"
id="g8">
<g
id="g6">
<g
id="g4">
<path
d="M7.994 0v14.957L7.995 16 7.994 0zM16 7.994H1.043L0 7.995l16-.001z"
transform="translate(8.686292, 8.686292) translate(11.313708, 11.313708) rotate(-135.000000) translate(-11.313708, -11.313708) translate(3.313708, 3.313708) translate(8.000000, 8.000000) rotate(-360.000000) translate(-8.000000, -8.000000)"
id="path2" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="13"
height="15"
viewBox="0 0 13 15"
version="1.1"
id="svg16"
sodipodi:docname="secure_level_1.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs20" />
<sodipodi:namedview
id="namedview18"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="58.2"
inkscape:cx="6.5034364"
inkscape:cy="7.5"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="svg16" />
<g
fill="none"
fill-rule="evenodd"
id="g14">
<g
id="g12">
<g
id="g10">
<g
id="g8">
<path
fill="#96C11F"
d="M6.478 14.72c-.008.006-.016.012-.025.016-.042.025-.09.038-.136.038-.045 0-.089-.012-.129-.035-.068-.038-1.68-.973-3.257-2.894C1.474 10.07-.214 7.087.022 2.96c.007-.12.095-.22.213-.245C3.521 2.057 6.055.178 6.161.098L6.173.09l.065-.043c.095-.064.22-.061.311.01.025.02 2.554 1.953 5.856 2.615.118.023.206.124.213.245.447 7.827-5.615 11.502-6.14 11.804"
transform="translate(-637.000000, -296.000000) translate(609.000000, 196.000000) translate(0.000000, 90.000000) translate(28.153846, 10.000000)"
id="path2" />
<path
fill="#FEFEFE"
d="M3.652 3.681L3.033 4.934 1.65 5.135 2.651 6.111 2.415 7.488 3.652 6.838 4.889 7.488 4.653 6.111 5.654 5.135 4.27 4.934z"
transform="translate(-637.000000, -296.000000) translate(609.000000, 196.000000) translate(0.000000, 90.000000) translate(28.153846, 10.000000)"
id="path4" />
<path
fill="#FEFEFE"
d="M8.856 3.681L8.237 4.934 6.854 5.135 7.855 6.111 7.619 7.488 8.856 6.838 10.093 7.488 9.857 6.111 10.858 5.135 9.474 4.934z"
opacity=".35"
transform="translate(-637.000000, -296.000000) translate(609.000000, 196.000000) translate(0.000000, 90.000000) translate(28.153846, 10.000000)"
id="path6" />
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View file

@ -0,0 +1,198 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="200"
height="234"
viewBox="0 0 200 234"
sodipodi:docname="secure_level_2.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="3.7307692"
inkscape:cx="47.845361"
inkscape:cy="117"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="200"
height="234"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -0,0 +1,154 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="200"
height="234"
viewBox="0 0 200 234"
sodipodi:docname="secure_level_unsafe.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="3.7307692"
inkscape:cx="47.845361"
inkscape:cy="117"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="200"
height="234"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.3 KiB

View file

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="19"
height="21"
viewBox="0 0 19 21"
version="1.1"
id="svg18"
sodipodi:docname="secure_off.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs22" />
<sodipodi:namedview
id="namedview20"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="41.571429"
inkscape:cx="9.4896907"
inkscape:cy="10.5"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="svg18" />
<g
fill="none"
fill-rule="evenodd"
id="g16">
<g
id="g14">
<g
id="g12">
<g
id="g10">
<g
id="g8">
<path
fill="#444"
fill-opacity=".2"
d="M9.208 20.924c-.011.008-.023.017-.035.023-.06.034-.127.053-.194.053-.064 0-.126-.016-.183-.05-.096-.054-2.388-1.383-4.63-4.113-2.07-2.524-4.47-6.763-4.134-12.63.01-.17.134-.313.302-.348C5.004 2.924 8.606.254 8.757.14l.018-.012.092-.062c.135-.091.313-.086.442.014.036.028 3.63 2.777 8.324 3.717.169.033.293.178.303.348.636 11.127-7.982 16.35-8.728 16.78"
transform="translate(-103.000000, -189.000000) translate(73.000000, 89.000000) translate(30.000000, 67.000000) translate(0.000000, 33.000000)"
id="path2" />
<path
fill="#FFF"
fill-rule="nonzero"
d="M9.77 15.115c0 .397-.323.719-.72.719-.397 0-.719-.322-.719-.72V4.713c0-.398.322-.72.72-.72.396 0 .718.322.718.72v10.403z"
transform="translate(-103.000000, -189.000000) translate(73.000000, 89.000000) translate(30.000000, 67.000000) translate(0.000000, 33.000000) translate(9.050235, 9.913249) rotate(-45.000000) translate(-9.050235, -9.913249)"
id="path4" />
<path
fill="#FFF"
fill-rule="nonzero"
d="M3.871 10.632c-.397 0-.719-.322-.719-.719 0-.397.322-.719.72-.719h10.403c.397 0 .719.322.719.72 0 .396-.322.718-.72.718H3.872z"
transform="translate(-103.000000, -189.000000) translate(73.000000, 89.000000) translate(30.000000, 67.000000) translate(0.000000, 33.000000) translate(9.073053, 9.913249) rotate(-45.000000) translate(-9.073053, -9.913249)"
id="path6" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="19"
height="21"
viewBox="0 0 19 21"
version="1.1"
id="svg14"
sodipodi:docname="secure_on.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs18" />
<sodipodi:namedview
id="namedview16"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="41.571429"
inkscape:cx="9.4896907"
inkscape:cy="10.5"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="svg14" />
<g
fill="none"
fill-rule="evenodd"
id="g12">
<g
fill="#96C11F"
id="g10">
<g
id="g8">
<g
id="g6">
<g
id="g4">
<path
d="M9.208 20.924c-.011.008-.023.017-.035.023-.06.034-.127.053-.194.053-.064 0-.126-.016-.183-.05-.096-.054-2.388-1.383-4.63-4.113-2.07-2.524-4.47-6.763-4.134-12.63.01-.17.134-.313.302-.348C5.004 2.924 8.606.254 8.757.14l.018-.012.092-.062c.135-.091.313-.086.442.014.036.028 3.63 2.777 8.324 3.717.169.033.293.178.303.348.636 11.127-7.982 16.35-8.728 16.78"
transform="translate(-185.000000, -189.000000) translate(73.000000, 89.000000) translate(30.000000, 67.000000) translate(0.000000, 33.000000) translate(82.000000, 0.000000)"
id="path2" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="48"
height="48"
viewBox="0 0 48 48"
sodipodi:docname="send.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="18.1875"
inkscape:cx="24"
inkscape:cy="24"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="48"
height="48"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
gg==
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="14"
height="14"
viewBox="0 0 14 14"
sodipodi:docname="timeline_close.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="29.1"
inkscape:cx="8.3333333"
inkscape:cy="15"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="14"
height="14"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAAAERlWElmTU0A KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAAB AAAAHgAAAADKQTcFAAAFMUlEQVRIDbVXfUxbVRS/5z5axteCzjkdRJMlUnUZmXxFw2YWJzBti4CC aysVtC2MuUT9x8SvNC4x+oeZn4w95sKEQlgj+2hxMtBtaGIic1PnMLIsi4loYjIZAweWvnc9t+w9 7gNKCGH3j95zfufjd8959913K9mcngP3bCy4dPHnM3+TmzisTl+lZUPOq1nZuauGzp89C1aHhxEg /xICZd3tzX03g9vm9O5mjL2u5wZaRWMKIynAWLfN5XlKNy6D4Pf7qd3paTSQYl4gZP00MSqMEDNh 0Gl3+DzLwEl8Pp/pzNBwQGVkh5gPgIxRKnVwYuScHrgyqhK12er0vqJhS5ntPl/yn+PsKObbLsYj 6RUA2Hqsbe9vVKKSG4uPig6EsXdsDu+7BmyRSlnNi+nqGOtF0scMIQB/mCTz5lCgeYDj2G5C7C6v TWUsiLWv4Lo+AD5NLiuqC1ZVKTq2gFBZ03DHxH+RHmxhttENhhLBXNzV/snvGh4j5kqps+5hhagh rHalZuQztubzpKwMZ9Dvj4j4bNnq3LGOkKleXDzOMwMJzpkSErYdbm0yvK46MXctddc/oEaVL7FN t8+EogTQl5xuKg82No4b8BvKEy7fhihjPbjoOw12IP3pkGQPBD66ZsBR0Xc1Nxz7rOkcQpvwAegt iQUw9ujE1chX5e6dq2K68GNz1D2EpKdnk+JGCq02Z5bMR8rDDcQcCLfvu5gIZBOKv3JdG4yRgkg0 0m9z12doGO7+EgJqH5LeomF8xsfTmpeVWdHS4p8UcVE2tFo08OqmopHj2PZ8EefdACIV4ZzDmNqK pCbRjqQfhALySzjrr6lo1+S4xNyhsqEhFVt8BKvdqgXEZoBrGJiKizJ2DOib3e3yboNvHEWKg8fg wYGBSMmWws6Riej9CNwn+CairC8aq1MpgRfCHc3vCT4LinrwQl6Vhw5JE4d7ZUbYc3P9IEol5g61 7e+Ya4uPGFsV3w/LY3G6w4CpsOg8GkWcZJqZkJoa/4rRCz8Gcac8PYMaJE5absnOuzJ0/ofvDZYF lAWJXa5dK0ei/4QxfpuYAxcxSgHMiGmPCmf2uCU7h+BH/rToG0+O26LK2l2rR9nkSSTZIgbjRrps NtNcvD1sRzbDMYq73291eD/E3a4tSAw1yPM62N2+u1hUPYGJLKI3Ov9ilmhxV5v8F8ftLl+xytQu PJ9TRD+U2/ItmbV4ETB+9QSnOcR4EbhXBYaHPcsU/PA0It8xYrJ2t+8dEXG7y/OgqpJuxG4VcexM OGlNalVwz54JEddkA3FpdV2eqqj8tLpNc+AzJumBVKgIyfJ1Eddk+7Pe9SzCTuBjWathfAYC3ySl gT0oy6MizmX9GdurPY+oivL1XFLSuTYV7PFIeZLQweYLkMDPd7jEdW3ge7/5+jg7VV5db/zaoUOM 2ObylqtR+AKfaZoWxGestAkPe6csy1MiPp8cat1/WUpJLsQqfzLYGds4pSjfVjh33i3igJ+1WkKU ZmyT4dWiQN8Otcuvic6LkfnVZyoyHsYNVyj644KGJUqLjwb2DXKcMqIcmEXKkPTlpZDyhEda3r+a vCatCLt1nOvawLZnKEzptznrCzg2faG/YcWdpjBKn+8OyAe1gKXO/Ho7PMYwD3OIObDycSol5Omb C7fgJL4yTy4HKSfi+yLfkvEModAoEmPlqaqqOGIVI+EYoQml4bamU6LTcsn4b+ItvNi/oefDvzCS JTt3nQRSbSiwL3bf1Y3LKOD5fTIrO28QC4wAhY/xP1rr/65z4vA1bJBHAAAAAElFTkSuQmCC "
id="image10"
x="0"
y="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="14"
height="14"
viewBox="0 0 14 14"
sodipodi:docname="timeline_filter.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="30.103448"
inkscape:cx="7.5240551"
inkscape:cy="14.5"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="14"
height="14"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAdCAYAAAC5UQwxAAAAAXNSR0IArs4c6QAAAERlWElmTU0A KgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHKADAAQAAAAB AAAAHQAAAABZ3d0SAAABn0lEQVRIDe1WsU7DMBC1rXwFawcGdj6BhXZkoWwQIsEvIFEGdoRUgSok FkQZkcqfIIQYO1Qws7fH2cTOhWD7XFpYsJT4+d35Pdlq7ipFOdrb+z2A2bFeSqlOHm4HvTJUm36a p2pqv7D4Q0OAFXdAih2ZCKgGwQoA5GY3vwQBuZXU2HAYsxx3jullnW5xKACKhuAMis5O/oh8vxEL EDE9hafZtfvXVltCP3bgAfcs5s4xvUwKaEGpttXeMOjp5cLMOsY1snkxvQwTn/FZ1xuu7+7xbe01 Y2IGJLyCekoqcWbFxpNXMZ682aWgMUdGAN3znZ4a3VwNlVBHWF+mlZacak7HKo6HYnrmwx8NB6dY z86dJGLDOSINhPRcpcEP7t3KUmy51JlqUOwMUwXnzf83nPfmvPvSr5RUfqzBVYfxWtQDbMNYF6jL +ldsQ9MFsIM0pD67ykGD9xBsw1gX8Og3aF28WSPWBVgimMQ2xNxgF+Aasq801gUWbhjrAgs31IKh LrAUQy1KKz/FSzPkCvvy3I8G/8m4jk/x1400RjE37wOMheppiiwC6gAAAABJRU5ErkJggg== "
id="image10"
x="0"
y="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="16"
height="16"
viewBox="0 0 16 16"
version="1.1"
id="svg15"
sodipodi:docname="timeline_search.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview17"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="54.5625"
inkscape:cx="8"
inkscape:cy="8"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="svg15" />
<defs
id="defs5">
<filter
id="15qdh5dl2a"
color-interpolation-filters="auto"
x="0"
y="0"
width="1"
height="1">
<feColorMatrix
in="SourceGraphic"
values="0 0 0 0 0.294118 0 0 0 0 0.349020 0 0 0 0 0.392157 0 0 0 1.000000 0"
id="feColorMatrix2" />
</filter>
</defs>
<g
fill="none"
fill-rule="evenodd"
id="g13">
<g
id="g11">
<g
filter="url(#15qdh5dl2a)"
transform="translate(-259.000000, -203.000000) translate(49.000000, 196.000000)"
id="g9">
<path
fill="#CBCBCB"
d="M.605 4.13c.352-.828.828-1.542 1.428-2.142.6-.6 1.315-1.077 2.143-1.429C5.005.207 5.873.03 6.781.03c.908 0 1.776.177 2.605.529.828.352 1.543.829 2.143 1.429.6.6 1.076 1.314 1.428 2.142.353.83.529 1.697.529 2.605 0 1.397-.394 2.664-1.181 3.8l3.266 3.267c.235.235.353.52.353.857 0 .33-.12.616-.362.857-.241.241-.527.362-.857.362-.343 0-.629-.12-.857-.362L10.58 12.26c-1.137.787-2.403 1.181-3.8 1.181-.908 0-1.776-.176-2.605-.529-.828-.352-1.543-.828-2.143-1.428-.6-.6-1.076-1.314-1.428-2.143C.252 8.511.076 7.643.076 6.735c0-.908.176-1.776.529-2.605zm1.91 2.605c0 1.175.417 2.18 1.252 3.015.835.834 1.84 1.252 3.014 1.252 1.175 0 2.18-.418 3.014-1.252.835-.835 1.253-1.84 1.253-3.015 0-1.174-.418-2.18-1.253-3.014-.835-.835-1.84-1.252-3.014-1.252-1.175 0-2.18.417-3.014 1.252-.835.835-1.253 1.84-1.253 3.014z"
transform="translate(210.000000, 7.000000)"
id="path7" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View file

@ -0,0 +1,66 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="14"
height="14"
viewBox="0 0 14 14"
version="1.1"
id="svg15"
sodipodi:docname="timeline_search.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview17"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="54.5625"
inkscape:cx="8"
inkscape:cy="8"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="svg15" />
<defs
id="defs5">
<filter
id="15qdh5dl2a"
color-interpolation-filters="auto"
x="0"
y="0"
width="1"
height="1">
<feColorMatrix
in="SourceGraphic"
values="0 0 0 0 0.294118 0 0 0 0 0.349020 0 0 0 0 0.392157 0 0 0 1.000000 0"
id="feColorMatrix2" />
</filter>
</defs>
<g
fill="none"
fill-rule="evenodd"
id="g13"
transform="matrix(0.88339223,0,0,0.88339223,-0.06713781,-0.02650177)">
<g
id="g11">
<g
filter="url(#15qdh5dl2a)"
transform="translate(-210,-7)"
id="g9">
<path
fill="#cbcbcb"
d="M 0.605,4.13 C 0.957,3.302 1.433,2.588 2.033,1.988 2.633,1.388 3.348,0.911 4.176,0.559 5.005,0.207 5.873,0.03 6.781,0.03 c 0.908,0 1.776,0.177 2.605,0.529 0.828,0.352 1.543,0.829 2.143,1.429 0.6,0.6 1.076,1.314 1.428,2.142 0.353,0.83 0.529,1.697 0.529,2.605 0,1.397 -0.394,2.664 -1.181,3.8 l 3.266,3.267 c 0.235,0.235 0.353,0.52 0.353,0.857 0,0.33 -0.12,0.616 -0.362,0.857 -0.241,0.241 -0.527,0.362 -0.857,0.362 -0.343,0 -0.629,-0.12 -0.857,-0.362 L 10.58,12.26 c -1.137,0.787 -2.403,1.181 -3.8,1.181 -0.908,0 -1.776,-0.176 -2.605,-0.529 C 3.347,12.56 2.632,12.084 2.032,11.484 1.432,10.884 0.956,10.17 0.604,9.341 0.252,8.511 0.076,7.643 0.076,6.735 0.076,5.827 0.252,4.959 0.605,4.13 Z m 1.91,2.605 c 0,1.175 0.417,2.18 1.252,3.015 0.835,0.834 1.84,1.252 3.014,1.252 1.175,0 2.18,-0.418 3.014,-1.252 C 10.63,8.915 11.048,7.91 11.048,6.735 11.048,5.561 10.63,4.555 9.795,3.721 8.96,2.886 7.955,2.469 6.781,2.469 5.606,2.469 4.601,2.886 3.767,3.721 2.932,4.556 2.514,5.561 2.514,6.735 Z"
transform="translate(210,7)"
id="path7" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg2"
width="84"
height="100"
viewBox="0 0 84 100"
sodipodi:docname="timer.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs6" />
<sodipodi:namedview
id="namedview4"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="8.73"
inkscape:cx="41.981672"
inkscape:cy="50"
inkscape:window-width="1920"
inkscape:window-height="1092"
inkscape:window-x="1920"
inkscape:window-y="33"
inkscape:window-maximized="1"
inkscape:current-layer="g8" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g8">
<image
width="84"
height="100"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,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
"
id="image10" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 7 KiB

View file

@ -12,6 +12,9 @@
<file>assets/images/add_hovered.svg</file>
<file>assets/images/add_normal.svg</file>
<file>assets/images/add_pressed.svg</file>
<file>assets/images/add_participant_hovered.svg</file>
<file>assets/images/add_participant_normal.svg</file>
<file>assets/images/add_participant_pressed.svg</file>
<file>assets/images/attachment_disabled.svg</file>
<file>assets/images/attachment_hovered.svg</file>
<file>assets/images/attachment_normal.svg</file>
@ -68,7 +71,12 @@
<file>assets/images/chat_normal.svg</file>
<file>assets/images/chat_pressed.svg</file>
<file>assets/images/chat_read.svg</file>
<file>assets/images/chat_room.svg</file>
<file>assets/images/close.svg</file>
<file>assets/images/collapse.svg</file>
<file>assets/images/collapsed.svg</file>
<file>assets/images/conferences_normal.svg</file>
<file>assets/images/conferences_selected.svg</file>
<file>assets/images/contact_add_hovered.svg</file>
<file>assets/images/contact_add_normal.svg</file>
<file>assets/images/contact_add_pressed.svg</file>
@ -82,6 +90,7 @@
<file>assets/images/contact_edit_pressed.svg</file>
<file>assets/images/contact_normal.svg</file>
<file>assets/images/contact_selected.svg</file>
<file>assets/images/current_account_status_available.svg</file>
<file>assets/images/declined_incoming_call.svg</file>
<file>assets/images/declined_outgoing_call.svg</file>
<file>assets/images/delete_hovered.svg</file>
@ -93,6 +102,7 @@
<file>assets/images/edit_normal.svg</file>
<file>assets/images/edit_pressed.svg</file>
<file>assets/images/ended_call.svg</file>
<file>assets/images/expanded.svg</file>
<file>assets/images/file_hovered.svg</file>
<file>assets/images/file_normal.svg</file>
<file>assets/images/file_pressed.svg</file>
@ -118,13 +128,21 @@
<file>assets/images/home_account_assistant.svg</file>
<file>assets/images/home_invite_friends.svg</file>
<file>assets/images/home_normal.svg</file>
<file>assets/images/home_selected.svg</file>
<file>assets/images/home_pressed.svg</file>
<file>assets/images/home_hovered.svg</file>
<file>assets/images/home_disabled.svg</file>
<file>assets/images/home_use_linphone.svg</file>
<file>assets/images/incoming_call.svg</file>
<file>assets/images/led_green.svg</file>
<file>assets/images/led_orange.svg</file>
<file>assets/images/led_red.svg</file>
<file>assets/images/led_white.svg</file>
<file>assets/images/menu_vdots_normal.svg</file>
<file>assets/images/menu_vdots_hovered.svg</file>
<file>assets/images/menu_vdots_pressed.svg</file>
<file>assets/images/menu_infos.svg</file>
<file>assets/images/menu_devices.svg</file>
<file>assets/images/menu_ephemeral.svg</file>
<file>assets/images/message_sign.svg</file>
<file>assets/images/micro_off_hovered.svg</file>
<file>assets/images/micro_off_normal.svg</file>
@ -138,6 +156,12 @@
<file>assets/images/new_call_hovered.svg</file>
<file>assets/images/new_call_normal.svg</file>
<file>assets/images/new_call_pressed.svg</file>
<file>assets/images/new_chat_hovered.svg</file>
<file>assets/images/new_chat_normal.svg</file>
<file>assets/images/new_chat_pressed.svg</file>
<file>assets/images/new_chat_group_hovered.svg</file>
<file>assets/images/new_chat_group_normal.svg</file>
<file>assets/images/new_chat_group_pressed.svg</file>
<file>assets/images/new_conference_hovered.svg</file>
<file>assets/images/new_conference_normal.svg</file>
<file>assets/images/new_conference_pressed.svg</file>
@ -145,6 +169,12 @@
<file>assets/images/options_normal.svg</file>
<file>assets/images/options_pressed.svg</file>
<file>assets/images/outgoing_call.svg</file>
<file>assets/images/panel_hidden_normal.svg</file>
<file>assets/images/panel_hidden_hovered.svg</file>
<file>assets/images/panel_hidden_pressed.svg</file>
<file>assets/images/panel_shown_normal.svg</file>
<file>assets/images/panel_shown_hovered.svg</file>
<file>assets/images/panel_shown_pressed.svg</file>
<file>assets/images/pause_off_hovered.svg</file>
<file>assets/images/pause_off_normal.svg</file>
<file>assets/images/pause_off_pressed.svg</file>
@ -153,13 +183,26 @@
<file>assets/images/pause_on_normal.svg</file>
<file>assets/images/pause_on_pressed.svg</file>
<file>assets/images/pause_on_updating.svg</file>
<file>assets/images/plus_disabled.svg</file>
<file>assets/images/plus_hovered.svg</file>
<file>assets/images/plus_normal.svg</file>
<file>assets/images/plus_pressed.svg</file>
<file>assets/images/recording_sign.svg</file>
<file>assets/images/record_off.svg</file>
<file>assets/images/record_on.svg</file>
<file>assets/images/remove_participant_hovered.svg</file>
<file>assets/images/remove_participant_normal.svg</file>
<file>assets/images/remove_participant_pressed.svg</file>
<file>assets/images/screenshot_hovered.svg</file>
<file>assets/images/screenshot_normal.svg</file>
<file>assets/images/screenshot_pressed.svg</file>
<file>assets/images/search.svg</file>
<file>assets/images/secure_level_unsafe.svg</file>
<file>assets/images/secure_level_1.svg</file>
<file>assets/images/secure_level_2.svg</file>
<file>assets/images/secure_off.svg</file>
<file>assets/images/secure_on.svg</file>
<file>assets/images/send.svg</file>
<file>assets/images/settings_advanced_normal.svg</file>
<file>assets/images/settings_advanced_selected.svg</file>
<file>assets/images/settings_audio_normal.svg</file>
@ -180,10 +223,14 @@
<file>assets/images/speaker_on_normal.svg</file>
<file>assets/images/speaker_on_pressed.svg</file>
<file>assets/images/speaker.svg</file>
<file>assets/images/timer.svg</file>
<file>assets/images/tel_keypad_hovered.svg</file>
<file>assets/images/tel_keypad_normal.svg</file>
<file>assets/images/tel_keypad_pressed.svg</file>
<file>assets/images/timeline_history.svg</file>
<file>assets/images/timeline_filter.svg</file>
<file>assets/images/timeline_search.svg</file>
<file>assets/images/timeline_close.svg</file>
<file>assets/images/tooltip_arrow_bottom.svg</file>
<file>assets/images/tooltip_arrow_left.svg</file>
<file>assets/images/tooltip_arrow_right.svg</file>
@ -204,6 +251,7 @@
<file>ui/modules/Common/Dialog/ConfirmDialog.qml</file>
<file>ui/modules/Common/Dialog/DialogDescription.qml</file>
<file>ui/modules/Common/Dialog/DialogPlus.qml</file>
<file>ui/modules/Common/Dialog/DialogTitle.qml</file>
<file>ui/modules/Common/Form/ActionBar.qml</file>
<file>ui/modules/Common/Form/ActionButton.qml</file>
<file>ui/modules/Common/Form/ActionSwitch.qml</file>
@ -330,6 +378,7 @@
<file>ui/modules/Linphone/Chat/IncomingMessage.qml</file>
<file>ui/modules/Linphone/Chat/Message.js</file>
<file>ui/modules/Linphone/Chat/Message.qml</file>
<file>ui/modules/Linphone/Chat/Notice.qml</file>
<file>ui/modules/Linphone/Chat/OutgoingMessage.qml</file>
<file>ui/modules/Linphone/Codecs/CodecAttribute.qml</file>
<file>ui/modules/Linphone/Codecs/CodecLegend.qml</file>
@ -386,6 +435,7 @@
<file>ui/modules/Linphone/TelKeypad/TelKeypad.qml</file>
<file>ui/modules/Linphone/Timeline/Timeline.js</file>
<file>ui/modules/Linphone/Timeline/Timeline.qml</file>
<file>ui/modules/Linphone/View/ParticipantsView.qml</file>
<file>ui/modules/Linphone/View/SipAddressesView.qml</file>
<file>ui/scripts/LinphoneUtils/linphone-utils.js</file>
<file>ui/scripts/LinphoneUtils/qmldir</file>
@ -430,9 +480,13 @@
<file>ui/views/App/Main/Dialogs/About.qml</file>
<file>ui/views/App/Main/Dialogs/AuthenticationRequest.js</file>
<file>ui/views/App/Main/Dialogs/AuthenticationRequest.qml</file>
<file>ui/views/App/Main/Dialogs/EphemeralChatRoom.qml</file>
<file>ui/views/App/Main/Dialogs/InfoChatRoom.qml</file>
<file>ui/views/App/Main/Dialogs/ManageAccount.js</file>
<file>ui/views/App/Main/Dialogs/ManageAccounts.qml</file>
<file>ui/views/App/Main/Dialogs/ManageChatRoom.qml</file>
<file>ui/views/App/Main/Dialogs/NewChatRoom.qml</file>
<file>ui/views/App/Main/Dialogs/ParticipantsDevices.qml</file>
<file>ui/views/App/Main/Home.qml</file>
<file>ui/views/App/Main/HistoryView.qml</file>
<file>ui/views/App/Main/HistoryView.js</file>
@ -491,6 +545,7 @@
<file>assets/images/linphone_logo.svg</file>
<file>ui/dev-modules/Colors/Colors.qml</file>
<file>ui/dev-modules/Units/Units.qml</file>
<file>ui/dev-modules/Tools/Tools.qml</file>
<file>assets/icon.ico</file>
</qresource>
</RCC>

View file

@ -44,7 +44,6 @@
#include "providers/ExternalImageProvider.hpp"
#include "providers/ThumbnailProvider.hpp"
#include "translator/DefaultTranslator.hpp"
#include "utils/LinphoneUtils.hpp"
#include "utils/Utils.hpp"
#include "components/other/desktop-tools/DesktopTools.hpp"
@ -52,6 +51,10 @@
#include "components/timeline/TimelineListModel.hpp"
#include "components/timeline/TimelineProxyModel.hpp"
#include "components/participant/ParticipantModel.hpp"
#include "components/participant/ParticipantListModel.hpp"
#include "components/participant/ParticipantProxyModel.hpp"
// =============================================================================
using namespace std;
@ -216,7 +219,7 @@ App::App (int &argc, char *argv[]) : SingleApplication(argc, argv, true, Mode::U
connect(this, SIGNAL(applicationStateChanged(Qt::ApplicationState)), this, SLOT(stateChanged(Qt::ApplicationState)));
setWindowIcon(QIcon(LinphoneUtils::WindowIconPath));
setWindowIcon(QIcon(Utils::WindowIconPath));
createParser();
mParser->process(*this);
@ -585,7 +588,11 @@ void App::registerTypes () {
qRegisterMetaType<ChatRoomModel::EntryType>();
qRegisterMetaType<shared_ptr<linphone::SearchResult>>();
qRegisterMetaType<std::list<std::shared_ptr<linphone::SearchResult> > >();
qRegisterMetaType<std::shared_ptr<ChatMessageModel>>();
qRegisterMetaType<std::shared_ptr<ChatRoomModel>>();
qRegisterMetaType<std::shared_ptr<ParticipantListModel>>();
qRegisterMetaType<std::shared_ptr<ParticipantDeviceModel>>();
LinphoneEnums::registerMetaTypes();
registerType<AssistantModel>("AssistantModel");
registerType<AuthenticationNotifier>("AuthenticationNotifier");
@ -603,8 +610,11 @@ void App::registerTypes () {
registerType<LdapProxyModel>("LdapProxyModel");
registerType<SipAddressesProxyModel>("SipAddressesProxyModel");
registerType<SearchSipAddressesModel>("SearchSipAddressesModel");
registerType<SearchSipAddressesProxyModel>("SearchSipAddressesProxyModel");
registerType<TimelineProxyModel>("TimelineProxyModel");
registerType<ParticipantProxyModel>("ParticipantProxyModel");
registerType<SoundPlayer>("SoundPlayer");
registerType<TelephoneNumbersModel>("TelephoneNumbersModel");
@ -616,6 +626,7 @@ void App::registerTypes () {
registerSingletonType<VideoCodecsModel>("VideoCodecsModel");
registerUncreatableType<CallModel>("CallModel");
registerUncreatableType<ChatMessageModel>("ChatMessageModel");
registerUncreatableType<ChatRoomModel>("ChatRoomModel");
registerUncreatableType<ConferenceHelperModel::ConferenceAddModel>("ConferenceAddModel");
registerUncreatableType<ContactModel>("ContactModel");
@ -625,6 +636,13 @@ void App::registerTypes () {
registerUncreatableType<SipAddressObserver>("SipAddressObserver");
registerUncreatableType<VcardModel>("VcardModel");
registerUncreatableType<TimelineModel>("TimelineModel");
registerUncreatableType<ParticipantModel>("ParticipantModel");
registerUncreatableType<ParticipantListModel>("ParticipantListModel");
registerUncreatableType<ParticipantDeviceModel>("ParticipantDeviceModel");
registerUncreatableType<ParticipantDeviceListModel>("ParticipantDeviceListModel");
registerUncreatableType<ParticipantDeviceProxyModel>("ParticipantDeviceProxyModel");
qmlRegisterUncreatableMetaObject(LinphoneEnums::staticMetaObject, "LinphoneEnums", 1, 0, "LinphoneEnums", "Only enums");
}
void App::registerSharedTypes () {
@ -634,7 +652,7 @@ void App::registerSharedTypes () {
registerSharedSingletonType<CoreManager, &CoreManager::getInstance>("CoreManager");
registerSharedSingletonType<SettingsModel, &CoreManager::getSettingsModel>("SettingsModel");
registerSharedSingletonType<AccountSettingsModel, &CoreManager::getAccountSettingsModel>("AccountSettingsModel");
registerSharedSingletonType<SipAddressesModel, &CoreManager::getSipAddressesModel>("SipAddressesModel");
registerSharedSingletonType<SipAddressesModel, &CoreManager::getSipAddressesModel>("SipAddressesModel");
registerSharedSingletonType<CallsListModel, &CoreManager::getCallsListModel>("CallsListModel");
registerSharedSingletonType<ContactsListModel, &CoreManager::getContactsListModel>("ContactsListModel");
registerSharedSingletonType<ContactsImporterListModel, &CoreManager::getContactsImporterListModel>("ContactsImporterListModel");
@ -650,6 +668,7 @@ void App::registerToolTypes () {
registerToolType<TextToSpeech>("TextToSpeech");
registerToolType<Units>("Units");
registerToolType<ContactsImporterPluginsManager>("ContactsImporterPluginsManager");
registerToolType<Utils>("Utils");
}
void App::registerSharedToolTypes () {
@ -711,7 +730,7 @@ void App::setTrayIcon () {
systemTrayIcon->setContextMenu(menu);
systemTrayIcon->setIcon(QIcon(LinphoneUtils::WindowIconPath));
systemTrayIcon->setIcon(QIcon(Utils::WindowIconPath));
systemTrayIcon->setToolTip(APPLICATION_NAME);
systemTrayIcon->show();
mSystemTrayIcon = systemTrayIcon;

View file

@ -28,6 +28,7 @@
#include "calls/CallsListProxyModel.hpp"
#include "camera/Camera.hpp"
#include "camera/CameraPreview.hpp"
#include "components/chat-message/ChatMessageModel.hpp"
#include "chat-room/ChatRoomProxyModel.hpp"
#include "codecs/AudioCodecsModel.hpp"
#include "codecs/VideoCodecsModel.hpp"
@ -50,12 +51,19 @@
#include "ldap/LdapListModel.hpp"
#include "ldap/LdapProxyModel.hpp"
#include "notifier/Notifier.hpp"
#include "participant/ParticipantListModel.hpp"
#include "participant/ParticipantModel.hpp"
#include "participant/ParticipantProxyModel.hpp"
#include "participant/ParticipantDeviceListModel.hpp"
#include "participant/ParticipantDeviceModel.hpp"
#include "participant/ParticipantDeviceProxyModel.hpp"
#include "presence/OwnPresenceModel.hpp"
#include "settings/AccountSettingsModel.hpp"
#include "settings/SettingsModel.hpp"
#include "sip-addresses/SipAddressesModel.hpp"
#include "sip-addresses/SipAddressesProxyModel.hpp"
#include "sip-addresses/SearchSipAddressesModel.hpp"
#include "sip-addresses/SearchSipAddressesProxyModel.hpp"
#include "sound-player/SoundPlayer.hpp"
#include "telephone-numbers/TelephoneNumbersModel.hpp"
#include "timeline/TimelineModel.hpp"

View file

@ -23,7 +23,6 @@
#include "components/settings/AccountSettingsModel.hpp"
#include "components/settings/SettingsModel.hpp"
#include "components/sip-addresses/SipAddressesModel.hpp"
#include "utils/LinphoneUtils.hpp"
#include "utils/Utils.hpp"
#include "AssistantModel.hpp"
@ -222,7 +221,7 @@ bool AssistantModel::addOtherSipAccount (const QVariantMap &map) {
const QString &transport(map["transport"].toString());
if (!transport.isEmpty())
address->setTransport(LinphoneUtils::stringToTransportType(transport));
address->setTransport(Utils::stringToTransportType(transport));
if (proxyConfig->setServerAddr(address->asString())) {
qWarning() << QStringLiteral("Unable to add server address: `%1`.")

View file

@ -33,7 +33,6 @@
#include "components/notifier/Notifier.hpp"
#include "components/settings/AccountSettingsModel.hpp"
#include "components/settings/SettingsModel.hpp"
#include "utils/LinphoneUtils.hpp"
#include "utils/MediastreamerUtils.hpp"
#include "utils/Utils.hpp"

View file

@ -28,7 +28,10 @@
#include "components/conference/ConferenceHelperModel.hpp"
#include "components/core/CoreHandlers.hpp"
#include "components/core/CoreManager.hpp"
#include "components/participant/ParticipantModel.hpp"
#include "components/settings/SettingsModel.hpp"
#include "components/timeline/TimelineListModel.hpp"
#include "components/timeline/TimelineModel.hpp"
#include "utils/Utils.hpp"
#include "CallsListModel.hpp"
@ -132,6 +135,43 @@ void CallsListModel::launchAudioCall (const QString &sipAddress, const QHash<QSt
core->inviteAddressWithParams(address, params);
}
void CallsListModel::launchSecureAudioCall (const QString &sipAddress, LinphoneEnums::MediaEncryption encryption, const QHash<QString, QString> &headers) const {
shared_ptr<linphone::Core> core = CoreManager::getInstance()->getCore();
shared_ptr<linphone::Address> address = core->interpretUrl(Utils::appStringToCoreString(sipAddress));
if (!address)
return;
shared_ptr<linphone::CallParams> params = core->createCallParams(nullptr);
params->enableVideo(false);
QHashIterator<QString, QString> iterator(headers);
while (iterator.hasNext()) {
iterator.next();
params->addCustomHeader(Utils::appStringToCoreString(iterator.key()), Utils::appStringToCoreString(iterator.value()));
}
params->setProxyConfig(core->getDefaultProxyConfig());
CallModel::setRecordFile(params, QString::fromStdString(address->getUsername()));
shared_ptr<linphone::ProxyConfig> currentProxyConfig = core->getDefaultProxyConfig();
params->setMediaEncryption(LinphoneEnums::toLinphone(encryption));
if(currentProxyConfig){
if(currentProxyConfig->getState() == linphone::RegistrationState::Ok)
core->inviteAddressWithParams(address, params);
else{
QObject * context = new QObject();
QObject::connect(CoreManager::getInstance()->getHandlers().get(), &CoreHandlers::registrationStateChanged,context,
[address,core,params,currentProxyConfig, context](const std::shared_ptr<linphone::ProxyConfig> &proxyConfig, linphone::RegistrationState state) mutable {
if(context && proxyConfig==currentProxyConfig && state==linphone::RegistrationState::Ok){
delete context;
context = nullptr;
core->inviteAddressWithParams(address, params);
}
});
}
}else
core->inviteAddressWithParams(address, params);
}
void CallsListModel::launchVideoCall (const QString &sipAddress) const {
shared_ptr<linphone::Core> core = CoreManager::getInstance()->getCore();
if (!core->videoSupported()) {
@ -151,11 +191,11 @@ void CallsListModel::launchVideoCall (const QString &sipAddress) const {
core->inviteAddressWithParams(address, params);
}
bool CallsListModel::launchSecureChat (const QString &sipAddress) const {
ChatRoomModel* CallsListModel::launchSecureChat (const QString &sipAddress) const {
shared_ptr<linphone::Core> core = CoreManager::getInstance()->getCore();
shared_ptr<linphone::Address> address = core->interpretUrl(Utils::appStringToCoreString(sipAddress));
if (!address)
return false;
return nullptr;
std::shared_ptr<linphone::ChatRoomParams> params = core->createDefaultChatRoomParams();
std::list <shared_ptr<linphone::Address> > participants;
@ -164,7 +204,7 @@ bool CallsListModel::launchSecureChat (const QString &sipAddress) const {
auto proxy = core->getDefaultProxyConfig();
params->enableEncryption(true);
params->setSubject("This is Desktop test");
params->setSubject("Dummy Subject");
params->setBackend(linphone::ChatRoomBackend::FlexisipChat);
params->setEncryptionBackend(linphone::ChatRoomEncryptionBackend::Lime);
@ -181,7 +221,52 @@ bool CallsListModel::launchSecureChat (const QString &sipAddress) const {
return chatRoom!=nullptr;
*/
return false;
if( chatRoom != nullptr){
auto timelineList = CoreManager::getInstance()->getTimelineListModel();
timelineList->update();
auto timeline = timelineList->getTimeline(chatRoom, false);
if(!timeline){
timeline = timelineList->getTimeline(chatRoom, true);
timelineList->add(timeline);
}
return timeline->getChatRoomModel();
}
return nullptr;
}
ChatRoomModel* CallsListModel::createChat (const QString &participantAddress) const{
shared_ptr<linphone::Core> core = CoreManager::getInstance()->getCore();
shared_ptr<linphone::Address> address = core->interpretUrl(Utils::appStringToCoreString(participantAddress));
if (!address)
return nullptr;
std::shared_ptr<linphone::ChatRoomParams> params = core->createDefaultChatRoomParams();
std::list <shared_ptr<linphone::Address> > participants;
std::shared_ptr<const linphone::Address> localAddress;
participants.push_back(address);
auto proxy = core->getDefaultProxyConfig();
params->setBackend(linphone::ChatRoomBackend::Basic);
std::shared_ptr<linphone::ChatRoom> chatRoom = core->createChatRoom(params, localAddress, participants);
/*
if( chatRoom!=nullptr){
auto search = core->searchChatRoom(params, localAddress
, address
, participants);
if(search != chatRoom)
qWarning("toto");
}
return chatRoom!=nullptr;
*/
if( chatRoom != nullptr){
auto timelineList = CoreManager::getInstance()->getTimelineListModel();
auto timeline = timelineList->getTimeline(chatRoom, true);
return timeline->getChatRoomModel();
}
return nullptr;
}
bool CallsListModel::createSecureChat (const QString& subject, const QString &participantAddress) const{
@ -206,6 +291,55 @@ bool CallsListModel::createSecureChat (const QString& subject, const QString &pa
return chatRoom != nullptr;
}
bool CallsListModel::createChatRoom(const QString& subject, const int& securityLevel, const QVariantList& participants) const{
shared_ptr<linphone::Core> core = CoreManager::getInstance()->getCore();
std::shared_ptr<linphone::ChatRoom> chatRoom;
qWarning() << "Creation of " << subject << " " << securityLevel << " " << participants;
for(auto p : participants){
ParticipantModel* pp = p.value<ParticipantModel*>();
qWarning() << pp->getSipAddress() << "=>" << pp->getAdminStatus();
}
std::shared_ptr<linphone::ChatRoomParams> params = core->createDefaultChatRoomParams();
std::list <shared_ptr<linphone::Address> > chatRoomParticipants;
std::shared_ptr<const linphone::Address> localAddress;
for(auto p : participants){
ParticipantModel* participant = p.value<ParticipantModel*>();
auto address = Utils::interpretUrl(participant->getSipAddress());
if( address)
chatRoomParticipants.push_back( address );
}
auto proxy = core->getDefaultProxyConfig();
params->enableEncryption(securityLevel>0);
if( securityLevel>0){
params->setBackend(linphone::ChatRoomBackend::FlexisipChat);
params->setEncryptionBackend(linphone::ChatRoomEncryptionBackend::Lime);
}else
params->setBackend(linphone::ChatRoomBackend::Basic);
params->enableGroup(subject != "");
if(chatRoomParticipants.size() > 0) {
if(!params->groupEnabled()) {// Chat room is one-one : check if it is already exist with empty or dummy subject
chatRoom = core->searchChatRoom(params, localAddress
, localAddress
, chatRoomParticipants);
params->setSubject(subject != ""?subject.toStdString():"Dummy Subject");
if(!chatRoom)
chatRoom = core->searchChatRoom(params, localAddress
, localAddress
, chatRoomParticipants);
}else
params->setSubject(subject != ""?subject.toStdString():"Dummy Subject");
if( !chatRoom)
chatRoom = core->createChatRoom(params, localAddress, chatRoomParticipants);
}
return chatRoom != nullptr;
}
// -----------------------------------------------------------------------------
int CallsListModel::getRunningCallsNumber () const {

View file

@ -24,13 +24,16 @@
#include <linphone++/linphone.hh>
#include <QAbstractListModel>
#include "components/call/CallModel.hpp"
#include "utils/LinphoneEnums.hpp"
// =============================================================================
class CallModel;
class ChatRoomModel;
class CoreHandlers;
class CallsListModel : public QAbstractListModel {
Q_OBJECT;
Q_OBJECT
public:
CallsListModel (QObject *parent = Q_NULLPTR);
@ -43,9 +46,13 @@ public:
void askForTransfer (CallModel *callModel);
Q_INVOKABLE void launchAudioCall (const QString &sipAddress, const QHash<QString, QString> &headers = {}) const;
Q_INVOKABLE void launchSecureAudioCall (const QString &sipAddress, LinphoneEnums::MediaEncryption encryption, const QHash<QString, QString> &headers = {}) const;
Q_INVOKABLE void launchVideoCall (const QString &sipAddress) const;
Q_INVOKABLE bool launchSecureChat (const QString &sipAddress) const;
Q_INVOKABLE ChatRoomModel* launchSecureChat (const QString &sipAddress) const;
Q_INVOKABLE ChatRoomModel* createChat (const QString &participantAddress) const;
Q_INVOKABLE bool createSecureChat (const QString& subject, const QString &participantAddress) const;
Q_INVOKABLE bool createChatRoom(const QString& subject, const int& securityLevel, const QVariantList& participants) const;
Q_INVOKABLE int getRunningCallsNumber () const;

View file

@ -0,0 +1,43 @@
/*
* Copyright (c) 2021 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QQmlApplicationEngine>
#include "app/App.hpp"
#include "ChatMessageModel.hpp"
// =============================================================================
ChatMessageModel::ChatMessageModel ( std::shared_ptr<linphone::ChatMessage> chatMessage, QObject * parent) : QObject(parent) {
mChatMessage = chatMessage;
}
std::shared_ptr<linphone::ChatMessage> ChatMessageModel::getChatMessage(){
return mChatMessage;
}
bool ChatMessageModel::isEphemeral() const{
return mChatMessage->isEphemeral();
}
qint64 ChatMessageModel::getEphemeralExpireTime() const{
return mChatMessage->getEphemeralExpireTime();
}

View file

@ -0,0 +1,54 @@
/*
* Copyright (c) 2021 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CHAT_MESSAGE_MODEL_H
#define CHAT_MESSAGE_MODEL_H
#include "utils/LinphoneEnums.hpp"
// =============================================================================
class ChatMessageModel : public QObject {
Q_OBJECT
public:
ChatMessageModel (std::shared_ptr<linphone::ChatMessage> chatMessage, QObject * parent = nullptr);
Q_PROPERTY(bool isEphemeral READ isEphemeral NOTIFY isEphemeralChanged)
Q_PROPERTY(qint64 ephemeralExpireTime READ getEphemeralExpireTime NOTIFY ephemeralExpireTimeChanged)
std::shared_ptr<linphone::ChatMessage> getChatMessage();
bool isEphemeral() const;
qint64 getEphemeralExpireTime() const;
signals:
void isEphemeralChanged();
void ephemeralExpireTimeChanged();
private:
std::shared_ptr<linphone::ChatMessage> mChatMessage;
};
Q_DECLARE_METATYPE(std::shared_ptr<ChatMessageModel>)
#endif

View file

@ -38,8 +38,8 @@
using namespace std;
namespace {
// Delay before removing call in ms.
constexpr int DelayBeforeRemoveCall = 3000;
// Delay before removing call in ms.
constexpr int DelayBeforeRemoveCall = 3000;
}
@ -49,48 +49,48 @@ ChatRoomListModel::ChatRoomListModel (QObject *parent) : QAbstractListModel(pare
}
int ChatRoomListModel::rowCount (const QModelIndex &) const {
return mList.count();
return mList.count();
}
QHash<int, QByteArray> ChatRoomListModel::roleNames () const {
QHash<int, QByteArray> roles;
roles[Qt::DisplayRole] = "$chatRoom";
return roles;
QHash<int, QByteArray> roles;
roles[Qt::DisplayRole] = "$chatRoom";
return roles;
}
QVariant ChatRoomListModel::data (const QModelIndex &index, int role) const {
int row = index.row();
if (!index.isValid() || row < 0 || row >= mList.count())
return QVariant();
if (role == Qt::DisplayRole)
return QVariant::fromValue(mList[row]);
return QVariant();
int row = index.row();
if (!index.isValid() || row < 0 || row >= mList.count())
return QVariant();
if (role == Qt::DisplayRole)
return QVariant::fromValue(mList[row]);
return QVariant();
}
// -----------------------------------------------------------------------------
bool ChatRoomListModel::removeRow (int row, const QModelIndex &parent) {
return removeRows(row, 1, parent);
return removeRows(row, 1, parent);
}
bool ChatRoomListModel::removeRows (int row, int count, const QModelIndex &parent) {
int limit = row + count - 1;
if (row < 0 || count < 0 || limit >= mList.count())
return false;
beginRemoveRows(parent, row, limit);
for (int i = 0; i < count; ++i)
mList.takeAt(row)->deleteLater();
endRemoveRows();
return true;
int limit = row + count - 1;
if (row < 0 || count < 0 || limit >= mList.count())
return false;
beginRemoveRows(parent, row, limit);
for (int i = 0; i < count; ++i)
mList.takeAt(row)->deleteLater();
endRemoveRows();
return true;
}
// -----------------------------------------------------------------------------

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
/*
/*
* Copyright (c) 2010-2020 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
@ -31,210 +31,271 @@
class CoreHandlers;
class ParticipantModel;
class ParticipantListModel;
class ChatRoomModel : public QAbstractListModel, public linphone::ChatRoomListener {
class MessageHandlers;
Q_OBJECT;
class MessageHandlers;
Q_OBJECT
public:
enum Roles {
ChatEntry = Qt::DisplayRole,
SectionDate
};
enum EntryType {
GenericEntry,
MessageEntry,
CallEntry
};
Q_ENUM(EntryType);
enum CallStatus {
CallStatusDeclined = int(linphone::Call::Status::Declined),
CallStatusMissed = int(linphone::Call::Status::Missed),
CallStatusSuccess = int(linphone::Call::Status::Success),
CallStatusAborted = int(linphone::Call::Status::Aborted),
CallStatusEarlyAborted = int(linphone::Call::Status::EarlyAborted),
CallStatusAcceptedElsewhere = int(linphone::Call::Status::AcceptedElsewhere),
CallStatusDeclinedElsewhere = int(linphone::Call::Status::DeclinedElsewhere)
};
Q_ENUM(CallStatus);
enum MessageStatus {
MessageStatusDelivered = int(linphone::ChatMessage::State::Delivered),
MessageStatusDeliveredToUser = int(linphone::ChatMessage::State::DeliveredToUser),
MessageStatusDisplayed = int(linphone::ChatMessage::State::Displayed),
MessageStatusFileTransferDone = int(linphone::ChatMessage::State::FileTransferDone),
MessageStatusFileTransferError = int(linphone::ChatMessage::State::FileTransferError),
MessageStatusFileTransferInProgress = int(linphone::ChatMessage::State::FileTransferInProgress),
MessageStatusIdle = int(linphone::ChatMessage::State::Idle),
MessageStatusInProgress = int(linphone::ChatMessage::State::InProgress),
MessageStatusNotDelivered = int(linphone::ChatMessage::State::NotDelivered)
};
Q_ENUM(MessageStatus);
Q_PROPERTY(QString participants READ getParticipants NOTIFY participantsChanged);
Q_PROPERTY(QString subject READ getSubject NOTIFY subjectChanged)
Q_PROPERTY(QDateTime lastUpdateTime MEMBER mLastUpdateTime WRITE setLastUpdateTime NOTIFY lastUpdateTimeChanged)
Q_PROPERTY(int unreadMessagesCount MEMBER mUnreadMessagesCount WRITE setUnreadMessagesCount NOTIFY unreadMessagesCountChanged)
Q_PROPERTY(int missedCallsCount MEMBER mMissedCallsCount WRITE setMissedCallsCount NOTIFY missedCallsCountChanged)
Q_PROPERTY(bool isComposing MEMBER mIsRemoteComposing NOTIFY isRemoteComposingChanged)
Q_PROPERTY(QString sipAddress READ getFullPeerAddress NOTIFY fullPeerAddressChanged)
Q_PROPERTY(QString username READ getUsername NOTIFY usernameChanged)
Q_PROPERTY(QString avatar READ getAvatar NOTIFY avatarChanged)
Q_PROPERTY(int presenceStatus READ getPresenceStatus NOTIFY presenceStatusChanged)
//ChatRoomModel (const QString &peerAddress, const QString &localAddress, const bool& isSecure);
ChatRoomModel (std::shared_ptr<linphone::ChatRoom> chatRoom);
~ChatRoomModel ();
int rowCount (const QModelIndex &index = QModelIndex()) const override;
QHash<int, QByteArray> roleNames () const override;
QVariant data (const QModelIndex &index, int role) const override;
bool removeRow (int row, const QModelIndex &parent = QModelIndex());
bool removeRows (int row, int count, const QModelIndex &parent = QModelIndex()) override;
Q_INVOKABLE QString getPeerAddress () const;
Q_INVOKABLE QString getLocalAddress () const;
Q_INVOKABLE QString getFullPeerAddress () const;
Q_INVOKABLE QString getFullLocalAddress () const;
QString getSubject () const;
QString getUsername () const;
QString getAvatar () const;
int getPresenceStatus() const;
void setLastUpdateTime(const QDateTime& lastUpdateDate);
void setUnreadMessagesCount(const int& count);
void setMissedCallsCount(const int& count);
Q_INVOKABLE void leaveChatRoom ();
bool getIsSecure() const;
bool getIsRemoteComposing () const;
//Q_INVOKABLE QList<ParticipantModel*> getParticipants()const
Q_INVOKABLE QString getParticipants()const;
void removeEntry (int id);
void removeAllEntries ();
void sendMessage (const QString &message);
void resendMessage (int id);
void sendFileMessage (const QString &path);
void downloadFile (int id);
void openFile (int id, bool showDirectory = false);
void openFileDirectory (int id) {
openFile(id, true);
}
bool fileWasDownloaded (int id);
void compose ();
void resetMessageCount ();
std::shared_ptr<linphone::ChatRoom> getChatRoom();
QDateTime mLastUpdateTime;
int mUnreadMessagesCount;
int mMissedCallsCount;
//-------------------- CHAT ROOM HANDLER
virtual void onIsComposingReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & remoteAddress, bool isComposing) override;
virtual void onMessageReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<linphone::ChatMessage> & message) override;
virtual void onNewEvent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onChatMessageReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onChatMessageSending(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onChatMessageSent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onParticipantAdded(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onParticipantRemoved(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onParticipantAdminStatusChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onStateChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, linphone::ChatRoom::State newState) override;
virtual void onSecurityEvent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onSubjectChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onUndecryptableMessageReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<linphone::ChatMessage> & message) override;
virtual void onParticipantDeviceAdded(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onParticipantDeviceRemoved(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onConferenceJoined(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onConferenceLeft(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onEphemeralEvent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onEphemeralMessageTimerStarted(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onEphemeralMessageDeleted(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onConferenceAddressGeneration(const std::shared_ptr<linphone::ChatRoom> & chatRoom) override;
virtual void onParticipantRegistrationSubscriptionRequested(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & participantAddress) override;
virtual void onParticipantRegistrationUnsubscriptionRequested(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & participantAddress) override;
virtual void onChatMessageShouldBeStored(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<linphone::ChatMessage> & message) override;
virtual void onChatMessageParticipantImdnStateChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<linphone::ChatMessage> & message, const std::shared_ptr<const linphone::ParticipantImdnState> & state) override;
enum Roles {
ChatEntry = Qt::DisplayRole,
SectionDate
};
enum EntryType {
GenericEntry,
MessageEntry,
CallEntry,
NoticeEntry
};
Q_ENUM(EntryType);
enum NoticeType {
NoticeMessage,
NoticeError
};
Q_ENUM(NoticeType);
enum CallStatus {
CallStatusDeclined = int(linphone::Call::Status::Declined),
CallStatusMissed = int(linphone::Call::Status::Missed),
CallStatusSuccess = int(linphone::Call::Status::Success),
CallStatusAborted = int(linphone::Call::Status::Aborted),
CallStatusEarlyAborted = int(linphone::Call::Status::EarlyAborted),
CallStatusAcceptedElsewhere = int(linphone::Call::Status::AcceptedElsewhere),
CallStatusDeclinedElsewhere = int(linphone::Call::Status::DeclinedElsewhere)
};
Q_ENUM(CallStatus);
enum MessageStatus {
MessageStatusDelivered = int(linphone::ChatMessage::State::Delivered),
MessageStatusDeliveredToUser = int(linphone::ChatMessage::State::DeliveredToUser),
MessageStatusDisplayed = int(linphone::ChatMessage::State::Displayed),
MessageStatusFileTransferDone = int(linphone::ChatMessage::State::FileTransferDone),
MessageStatusFileTransferError = int(linphone::ChatMessage::State::FileTransferError),
MessageStatusFileTransferInProgress = int(linphone::ChatMessage::State::FileTransferInProgress),
MessageStatusIdle = int(linphone::ChatMessage::State::Idle),
MessageStatusInProgress = int(linphone::ChatMessage::State::InProgress),
MessageStatusNotDelivered = int(linphone::ChatMessage::State::NotDelivered)
};
Q_ENUM(MessageStatus);
//Q_PROPERTY(QString participants READ getParticipants NOTIFY participantsChanged);
//Q_PROPERTY(ParticipantProxyModel participants READ getParticipants NOTIFY participantsChanged);
Q_PROPERTY(QString subject READ getSubject NOTIFY subjectChanged)
Q_PROPERTY(QDateTime lastUpdateTime MEMBER mLastUpdateTime WRITE setLastUpdateTime NOTIFY lastUpdateTimeChanged)
Q_PROPERTY(int unreadMessagesCount MEMBER mUnreadMessagesCount WRITE setUnreadMessagesCount NOTIFY unreadMessagesCountChanged)
Q_PROPERTY(int missedCallsCount MEMBER mMissedCallsCount WRITE setMissedCallsCount NOTIFY missedCallsCountChanged)
Q_PROPERTY(int securityLevel READ getSecurityLevel NOTIFY securityLevelChanged)
Q_PROPERTY(bool groupEnabled READ isGroupEnabled NOTIFY groupEnabledChanged)
Q_PROPERTY(bool haveEncryption READ haveEncryption CONSTANT)
Q_PROPERTY(bool isComposing MEMBER mIsRemoteComposing NOTIFY isRemoteComposingChanged)
Q_PROPERTY(bool hasBeenLeft READ hasBeenLeft NOTIFY hasBeenLeftChanged)
Q_PROPERTY(QString sipAddress READ getFullPeerAddress NOTIFY fullPeerAddressChanged)
Q_PROPERTY(QString sipAddressUriOnly READ getPeerAddress NOTIFY fullPeerAddressChanged)
Q_PROPERTY(QString username READ getUsername NOTIFY usernameChanged)
Q_PROPERTY(QString avatar READ getAvatar NOTIFY avatarChanged)
Q_PROPERTY(int presenceStatus READ getPresenceStatus NOTIFY presenceStatusChanged)
Q_PROPERTY(int state READ getState NOTIFY stateChanged)
Q_PROPERTY(long ephemeralLifetime READ getEphemeralLifetime WRITE setEphemeralLifetime NOTIFY ephemeralLifetimeChanged)
Q_PROPERTY(bool ephemeralEnabled READ getEphemeralEnabled WRITE setEphemeralEnabled NOTIFY ephemeralEnabledChanged)
//ChatRoomModel (const QString &peerAddress, const QString &localAddress, const bool& isSecure);
ChatRoomModel (std::shared_ptr<linphone::ChatRoom> chatRoom);
~ChatRoomModel ();
int rowCount (const QModelIndex &index = QModelIndex()) const override;
QHash<int, QByteArray> roleNames () const override;
QVariant data (const QModelIndex &index, int role) const override;
bool removeRow (int row, const QModelIndex &parent = QModelIndex());
bool removeRows (int row, int count, const QModelIndex &parent = QModelIndex()) override;
Q_INVOKABLE QString getPeerAddress () const;
Q_INVOKABLE QString getLocalAddress () const;
Q_INVOKABLE QString getFullPeerAddress () const;
Q_INVOKABLE QString getFullLocalAddress () const;
Q_INVOKABLE QString getConferenceAddress () const;
QString getSubject () const;
QString getUsername () const;
QString getAvatar () const;
int getPresenceStatus() const;
int getState() const;
bool hasBeenLeft() const;
bool getEphemeralEnabled() const;
long getEphemeralLifetime() const;
void setLastUpdateTime(const QDateTime& lastUpdateDate);
void setUnreadMessagesCount(const int& count);
void setMissedCallsCount(const int& count);
void setEphemeralEnabled(bool enabled);
void setEphemeralLifetime(long lifetime);
Q_INVOKABLE void leaveChatRoom ();
Q_INVOKABLE bool haveEncryption() const;
Q_INVOKABLE bool isSecure() const;
int getSecurityLevel() const;
bool isGroupEnabled() const;
bool getIsRemoteComposing () const;
//Q_INVOKABLE QList<ParticipantModel*> getParticipants()const
//Q_INVOKABLE QString getParticipants()const;
//QList<std::shared_ptr<ParticipantModel> > getParticipants();
//Q_INVOKABLE std::shared_ptr<ParticipantListModel> getParticipants();
Q_PROPERTY(ParticipantListModel* participants READ getParticipants CONSTANT)
ParticipantListModel* getParticipants() const;
void removeEntry (int id);
void removeAllEntries ();
void sendMessage (const QString &message);
void resendMessage (int id);
void sendFileMessage (const QString &path);
void downloadFile (int id);
void openFile (int id, bool showDirectory = false);
void openFileDirectory (int id) {
openFile(id, true);
}
bool fileWasDownloaded (int id);
void compose ();
void resetMessageCount ();
std::shared_ptr<linphone::ChatRoom> getChatRoom();
QDateTime mLastUpdateTime;
int mUnreadMessagesCount = 0;
int mMissedCallsCount = 0;
//-------------------- CHAT ROOM HANDLER
virtual void onIsComposingReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & remoteAddress, bool isComposing) override;
virtual void onMessageReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<linphone::ChatMessage> & message) override;
virtual void onNewEvent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onChatMessageReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onChatMessageSending(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onChatMessageSent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onParticipantAdded(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onParticipantRemoved(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onParticipantAdminStatusChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onStateChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, linphone::ChatRoom::State newState) override;
virtual void onSecurityEvent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onSubjectChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onUndecryptableMessageReceived(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<linphone::ChatMessage> & message) override;
virtual void onParticipantDeviceAdded(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onParticipantDeviceRemoved(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onConferenceJoined(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onConferenceLeft(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onEphemeralEvent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onEphemeralMessageTimerStarted(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onEphemeralMessageDeleted(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) override;
virtual void onConferenceAddressGeneration(const std::shared_ptr<linphone::ChatRoom> & chatRoom) override;
virtual void onParticipantRegistrationSubscriptionRequested(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & participantAddress) override;
virtual void onParticipantRegistrationUnsubscriptionRequested(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & participantAddress) override;
virtual void onChatMessageShouldBeStored(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<linphone::ChatMessage> & message) override;
virtual void onChatMessageParticipantImdnStateChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<linphone::ChatMessage> & message, const std::shared_ptr<const linphone::ParticipantImdnState> & state) override;
signals:
bool isRemoteComposingChanged (bool status);
void allEntriesRemoved ();
void lastEntryRemoved ();
void messageSent (const std::shared_ptr<linphone::ChatMessage> &message);
void messageReceived (const std::shared_ptr<linphone::ChatMessage> &message);
void messageCountReset ();
void focused ();
void fullPeerAddressChanged();
void participantsChanged();
void subjectChanged(QString subject);
void usernameChanged(QString username);
void avatarChanged(QString avatar);
void presenceStatusChanged(int presenceStatus);
void lastUpdateTimeChanged();
void unreadMessagesCountChanged();
void missedCallsCountChanged();
bool isRemoteComposingChanged (bool status);
void allEntriesRemoved ();
void lastEntryRemoved ();
void messageSent (const std::shared_ptr<linphone::ChatMessage> &message);
void messageReceived (const std::shared_ptr<linphone::ChatMessage> &message);
void messageCountReset ();
void focused ();
void fullPeerAddressChanged();
void participantsChanged();
void subjectChanged(QString subject);
void usernameChanged(QString username);
void avatarChanged(QString avatar);
void presenceStatusChanged();
void lastUpdateTimeChanged();
void unreadMessagesCountChanged();
void missedCallsCountChanged();
void securityLevelChanged(int securityLevel);
void groupEnabledChanged(bool groupEnabled);
void stateChanged(int state);
void hasBeenLeftChanged();
void ephemeralEnabledChanged();
void ephemeralLifetimeChanged();
// Chat Room listener callbacks
void securityEvent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
void participantAdded(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
void participantRemoved(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
void participantDeviceAdded(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
void participantDeviceRemoved(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
void participantAdminStatusChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
void participantRegistrationSubscriptionRequested(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & participantAddress);
void participantRegistrationUnsubscriptionRequested(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & participantAddress);
void conferenceLeft(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
private:
typedef QPair<QVariantMap, std::shared_ptr<void>> ChatEntryData;
//void setSipAddresses (const QString &peerAddress, const QString &localAddress, const bool& isSecure);
const ChatEntryData getFileMessageEntry (int id);
void removeEntry (ChatEntryData &entry);
void insertCall (const std::shared_ptr<linphone::CallLog> &callLog);
void insertMessageAtEnd (const std::shared_ptr<linphone::ChatMessage> &message);
void handleCallStateChanged (const std::shared_ptr<linphone::Call> &call, linphone::Call::State state);
void handleCallCreated(const std::shared_ptr<linphone::Call> &call);// Count an event call
//void handleIsComposingChanged (const std::shared_ptr<linphone::ChatRoom> &chatRoom);
//void handleMessageReceived (const std::shared_ptr<linphone::ChatMessage> &message);
bool mIsRemoteComposing = false;
mutable QList<ChatEntryData> mEntries;
QList<ParticipantModel*> mParticipants;
std::shared_ptr<CoreHandlers> mCoreHandlers;
std::shared_ptr<MessageHandlers> mMessageHandlers;
std::shared_ptr<linphone::ChatRoom> mChatRoom;
typedef QPair<QVariantMap, std::shared_ptr<void>> ChatEntryData;
//void setSipAddresses (const QString &peerAddress, const QString &localAddress, const bool& isSecure);
const ChatEntryData getFileMessageEntry (int id);
void removeEntry (ChatEntryData &entry);
void insertCall (const std::shared_ptr<linphone::CallLog> &callLog);
void insertMessageAtEnd (const std::shared_ptr<linphone::ChatMessage> &message);
void insertNotice (const std::shared_ptr<linphone::EventLog> &enventLog);
void handleCallStateChanged (const std::shared_ptr<linphone::Call> &call, linphone::Call::State state);
void handleCallCreated(const std::shared_ptr<linphone::Call> &call);// Count an event call
void handlePresenceStatusReceived(std::shared_ptr<linphone::Friend> contact);
//void handleIsComposingChanged (const std::shared_ptr<linphone::ChatRoom> &chatRoom);
//void handleMessageReceived (const std::shared_ptr<linphone::ChatMessage> &message);
bool mIsRemoteComposing = false;
mutable QList<ChatEntryData> mEntries;
//QList<ParticipantModel*> mParticipants;
std::shared_ptr<ParticipantListModel> mParticipantListModel;
std::shared_ptr<CoreHandlers> mCoreHandlers;
std::shared_ptr<MessageHandlers> mMessageHandlers;
std::shared_ptr<linphone::ChatRoom> mChatRoom;
};
Q_DECLARE_METATYPE(std::shared_ptr<ChatRoomModel>);

View file

@ -64,7 +64,7 @@ private:
ChatRoomProxyModel::ChatRoomProxyModel (QObject *parent) : QSortFilterProxyModel(parent) {
setSourceModel(new ChatRoomModelFilter(this));
mIsSecure = false;
//mIsSecure = false;
App *app = App::getInstance();
QObject::connect(app->getMainWindow(), &QWindow::activeChanged, this, [this]() {
@ -76,6 +76,7 @@ ChatRoomProxyModel::ChatRoomProxyModel (QObject *parent) : QSortFilterProxyModel
QObject::connect(callsWindow, &QWindow::activeChanged, this, [this, callsWindow]() {
handleIsActiveChanged(callsWindow);
});
sort(0);
}
// -----------------------------------------------------------------------------
@ -160,53 +161,63 @@ void ChatRoomProxyModel::setEntryTypeFilter (ChatRoomModel::EntryType type) {
bool ChatRoomProxyModel::filterAcceptsRow (int sourceRow, const QModelIndex &) const {
return sourceModel()->rowCount() - sourceRow <= mMaxDisplayedEntries;
}
bool ChatRoomProxyModel::lessThan (const QModelIndex &left, const QModelIndex &right) const {
const QVariantMap l = sourceModel()->data(left).value<QVariantMap>();
const QVariantMap r = sourceModel()->data(right).value<QVariantMap>();
return l["timestamp"].toDateTime() < r["timestamp"].toDateTime();
}
// -----------------------------------------------------------------------------
QString ChatRoomProxyModel::getPeerAddress () const {
return mChatRoomModel ? mChatRoomModel->getPeerAddress() : QString("");
return mChatRoomModel ? mChatRoomModel->getPeerAddress() : mPeerAddress;//QString("");
}
void ChatRoomProxyModel::setPeerAddress (const QString &peerAddress) {
mPeerAddress = peerAddress;
emit peerAddressChanged(mPeerAddress);
//reload();
}
QString ChatRoomProxyModel::getLocalAddress () const {
return mChatRoomModel ? mChatRoomModel->getLocalAddress() : QString("");
return mChatRoomModel ? mChatRoomModel->getLocalAddress() : mLocalAddress;//QString("");
}
void ChatRoomProxyModel::setLocalAddress (const QString &localAddress) {
mLocalAddress = localAddress;
emit localAddressChanged(mLocalAddress);
//reload();
}
QString ChatRoomProxyModel::getFullPeerAddress () const {
return mChatRoomModel ? mChatRoomModel->getFullPeerAddress() : QString("");
return mChatRoomModel ? mChatRoomModel->getFullPeerAddress() : mFullPeerAddress;//QString("");
}
void ChatRoomProxyModel::setFullPeerAddress (const QString &peerAddress) {
mFullPeerAddress = peerAddress;
emit fullPeerAddressChanged(mFullPeerAddress);
//reload();
}
QString ChatRoomProxyModel::getFullLocalAddress () const {
return mChatRoomModel ? mChatRoomModel->getFullLocalAddress() : QString("");
return mChatRoomModel ? mChatRoomModel->getFullLocalAddress() : mFullLocalAddress;//QString("");
}
void ChatRoomProxyModel::setFullLocalAddress (const QString &localAddress) {
mFullLocalAddress = localAddress;
emit fullLocalAddressChanged(mFullLocalAddress);
//reload();
}
int ChatRoomProxyModel::getIsSecure () const {
return mChatRoomModel ? mChatRoomModel->getIsSecure() : -1;
/*
bool ChatRoomProxyModel::isSecure () const {
return mChatRoomModel ? mChatRoomModel->isSecure() : false;
}
void ChatRoomProxyModel::setIsSecure (const int &secure) {
mIsSecure = secure;
emit isSecureChanged(mIsSecure);
}
*/
bool ChatRoomProxyModel::getIsRemoteComposing () const {
return mChatRoomModel ? mChatRoomModel->getIsRemoteComposing() : false;
}
@ -252,8 +263,11 @@ ChatRoomModel *ChatRoomProxyModel::getChatRoomModel () const{
return mChatRoomModel.get();
}
void ChatRoomProxyModel::setChatRoomModel (ChatRoomModel *ChatRoomModel){
mChatRoom = ChatRoomModel->getChatRoom();
void ChatRoomProxyModel::setChatRoomModel (ChatRoomModel *chatRoomModel){
if(chatRoomModel)
mChatRoom = chatRoomModel->getChatRoom();
else
mChatRoom = nullptr;
reload();
emit chatRoomModelChanged();
}

View file

@ -32,18 +32,18 @@ class QWindow;
class ChatRoomProxyModel : public QSortFilterProxyModel {
class ChatRoomModelFilter;
Q_OBJECT;
Q_OBJECT
Q_PROPERTY(QString peerAddress READ getPeerAddress WRITE setPeerAddress NOTIFY peerAddressChanged);
Q_PROPERTY(QString localAddress READ getLocalAddress WRITE setLocalAddress NOTIFY localAddressChanged);
Q_PROPERTY(QString fullPeerAddress READ getFullPeerAddress WRITE setFullPeerAddress NOTIFY fullPeerAddressChanged);
Q_PROPERTY(QString fullLocalAddress READ getFullLocalAddress WRITE setFullLocalAddress NOTIFY fullLocalAddressChanged);
Q_PROPERTY(int isSecure READ getIsSecure WRITE setIsSecure NOTIFY isSecureChanged);
Q_PROPERTY(ChatRoomModel *chatRoomModel READ getChatRoomModel WRITE setChatRoomModel NOTIFY chatRoomModelChanged);
//Q_PROPERTY(bool isSecure MEMBER mIsSecure NOTIFY isSecureChanged);
Q_PROPERTY(bool isRemoteComposing READ getIsRemoteComposing NOTIFY isRemoteComposingChanged);
//Q_PROPERTY(bool isSecure READ getIsSecure NOTIFY isSecureChanged);
Q_PROPERTY(QString cachedText READ getCachedText);
Q_PROPERTY(QString peerAddress READ getPeerAddress WRITE setPeerAddress NOTIFY peerAddressChanged)
Q_PROPERTY(QString localAddress READ getLocalAddress WRITE setLocalAddress NOTIFY localAddressChanged)
Q_PROPERTY(QString fullPeerAddress READ getFullPeerAddress WRITE setFullPeerAddress NOTIFY fullPeerAddressChanged)
Q_PROPERTY(QString fullLocalAddress READ getFullLocalAddress WRITE setFullLocalAddress NOTIFY fullLocalAddressChanged)
//Q_PROPERTY(int isSecure READ isSecure WRITE setIsSecure NOTIFY isSecureChanged)
Q_PROPERTY(ChatRoomModel *chatRoomModel READ getChatRoomModel WRITE setChatRoomModel NOTIFY chatRoomModelChanged)
//Q_PROPERTY(bool isSecure MEMBER mIsSecure NOTIFY isSecureChanged)
Q_PROPERTY(bool isRemoteComposing READ getIsRemoteComposing NOTIFY isRemoteComposingChanged)
//Q_PROPERTY(bool isSecure READ getIsSecure NOTIFY isSecureChanged)
Q_PROPERTY(QString cachedText READ getCachedText)
public:
ChatRoomProxyModel (QObject *parent = Q_NULLPTR);
@ -73,7 +73,7 @@ signals:
void fullPeerAddressChanged (const QString &fullPeerAddress);
void fullLocalAddressChanged (const QString &fullLocalAddress);
bool isRemoteComposingChanged (bool status);
bool isSecureChanged(bool secure);
//bool isSecureChanged(bool secure);
void chatRoomModelChanged();
@ -83,6 +83,7 @@ signals:
protected:
bool filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const override;
bool lessThan (const QModelIndex &left, const QModelIndex &right) const override;
private:
QString getPeerAddress () const;
@ -97,8 +98,8 @@ private:
QString getFullLocalAddress () const;
void setFullLocalAddress (const QString &localAddress);
int getIsSecure () const;
void setIsSecure (const int &secure);
//bool isSecure () const;
//void setIsSecure (const int &secure);
ChatRoomModel *getChatRoomModel() const;
void setChatRoomModel (ChatRoomModel *chatRoomModel);
@ -121,7 +122,7 @@ private:
QString mLocalAddress;
QString mFullPeerAddress;
QString mFullLocalAddress;
int mIsSecure;
//int mIsSecure;
static QString gCachedText;
std::shared_ptr<linphone::ChatRoom> mChatRoom;

View file

@ -26,7 +26,6 @@
#include "components/core/CoreHandlers.hpp"
#include "components/core/CoreManager.hpp"
#include "components/settings/SettingsModel.hpp"
#include "utils/LinphoneUtils.hpp"
#include "utils/MediastreamerUtils.hpp"
#include "utils/Utils.hpp"

View file

@ -67,6 +67,7 @@ VcardModel *ContactModel::getVcardModel () const {
return mVcardModel;
}
// -----------------------------------------------------------------------------
void ContactModel::setVcardModel (VcardModel *vcardModel) {
VcardModel *oldVcardModel = mVcardModel;
@ -206,3 +207,7 @@ Presence::PresenceStatus ContactModel::getPresenceStatus () const {
Presence::PresenceLevel ContactModel::getPresenceLevel () const {
return Presence::getPresenceLevel(getPresenceStatus());
}
bool ContactModel::hasCapability(const LinphoneEnums::FriendCapability& capability){
return mLinphoneFriend->hasCapability(LinphoneEnums::toLinphone(capability));
}

View file

@ -1,4 +1,4 @@
/*
/*
* Copyright (c) 2010-2020 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
@ -22,6 +22,7 @@
#define CONTACT_MODEL_H_
#include "components/presence/Presence.hpp"
#include "utils/LinphoneEnums.hpp"
// =============================================================================
@ -32,6 +33,7 @@ class ContactModel : public QObject {
friend class ContactsListModel;
friend class ContactsListProxyModel;
friend class SipAddressesProxyModel;
friend class SipAddressesSorter;
Q_OBJECT;
@ -52,6 +54,7 @@ public:
Q_INVOKABLE VcardModel *cloneVcardModel () const;
Presence::PresenceLevel getPresenceLevel () const;
Q_INVOKABLE bool hasCapability(const LinphoneEnums::FriendCapability& capability);
signals:
void contactUpdated ();

View file

@ -39,6 +39,7 @@ class VcardModel : public QObject {
Q_PROPERTY(QString username READ getUsername WRITE setUsername NOTIFY vcardUpdated);
Q_PROPERTY(QString avatar READ getAvatar WRITE setAvatar NOTIFY vcardUpdated);
Q_PROPERTY(QVariantMap address READ getAddress NOTIFY vcardUpdated);
//Q_PROPERTY(QString sipAddress
Q_PROPERTY(QVariantList sipAddresses READ getSipAddresses NOTIFY vcardUpdated);
Q_PROPERTY(QVariantList companies READ getCompanies NOTIFY vcardUpdated);
Q_PROPERTY(QVariantList emails READ getEmails NOTIFY vcardUpdated);

View file

@ -100,6 +100,15 @@ void CoreHandlers::onCallCreated(const shared_ptr<linphone::Core> &,
emit callCreated(call);
}
void CoreHandlers::onChatRoomStateChanged(
const std::shared_ptr<linphone::Core> & core,
const std::shared_ptr<linphone::ChatRoom> & chatRoom,
linphone::ChatRoom::State state
) {
qWarning() << "ChatRoomState : " << (int)state;
emit chatRoomStateChanged(chatRoom, state);
}
void CoreHandlers::onConfiguringStatus(
const std::shared_ptr<linphone::Core> & core,
linphone::ConfiguringState status,
@ -194,12 +203,15 @@ void CoreHandlers::onMessageReceived (
if (
!app->hasFocus() ||
!CoreManager::getInstance()->getChatRoomModel(chatRoom, false)
/*
!CoreManager::getInstance()->chatRoomModelExists(
Utils::coreStringToAppString(chatRoom->getPeerAddress()->asStringUriOnly()),
Utils::coreStringToAppString(chatRoom->getLocalAddress()->asStringUriOnly()),
chatRoom->getSecurityLevel() == linphone::ChatRoomSecurityLevel::Encrypted
|| chatRoom->getSecurityLevel() == linphone::ChatRoomSecurityLevel::Safe
)
)*/
)
core->playLocal(Utils::appStringToCoreString(settingsModel->getChatNotificationSoundPath()));
}
@ -221,6 +233,7 @@ void CoreHandlers::onNotifyPresenceReceived (
// Ignore friend without vcard because the `contact-model` data doesn't exist.
if (linphoneFriend->getVcard() && linphoneFriend->dataExists("contact-model"))
linphoneFriend->getData<ContactModel>("contact-model").refreshPresence();
emit presenceStatusReceived(linphoneFriend);
}
void CoreHandlers::onRegistrationStateChanged (

View file

@ -45,6 +45,7 @@ signals:
void callTransferFailed (const std::shared_ptr<linphone::Call> &call);
void callTransferSucceeded (const std::shared_ptr<linphone::Call> &call);
void callCreated(const std::shared_ptr<linphone::Call> & call);
void chatRoomStateChanged(const std::shared_ptr<linphone::ChatRoom> &chatRoom,linphone::ChatRoom::State state);
void coreStarting();
void coreStarted ();
void coreStopped ();
@ -52,6 +53,7 @@ signals:
void logsUploadStateChanged (linphone::Core::LogCollectionUploadState state, const std::string &info);
void messageReceived (const std::shared_ptr<linphone::ChatMessage> &message);
void presenceReceived (const QString &sipAddress, const std::shared_ptr<const linphone::PresenceModel> &presenceModel);
void presenceStatusReceived(std::shared_ptr<linphone::Friend> contact);
void registrationStateChanged (const std::shared_ptr<linphone::ProxyConfig> &proxyConfig, linphone::RegistrationState state);
void ecCalibrationResult(linphone::EcCalibratorStatus status, int delayMs);
void setLastRemoteProvisioningState(const linphone::ConfiguringState &state);
@ -93,6 +95,12 @@ private:
const std::shared_ptr<linphone::Call> & call
) override;
void onChatRoomStateChanged(
const std::shared_ptr<linphone::Core> & core,
const std::shared_ptr<linphone::ChatRoom> & chatRoom,
linphone::ChatRoom::State state
) override;
void onConfiguringStatus(
const std::shared_ptr<linphone::Core> & core,
linphone::ConfiguringState status,

View file

@ -163,7 +163,7 @@ shared_ptr<ChatRoomModel> CoreManager::getChatRoomModel (const QString &peerAddr
shared_ptr<ChatRoomModel> CoreManager::getChatRoomModel (ChatRoomModel * data) {
if(data){
for(auto it = mChatRoomModels.begin() ; it != mChatRoomModels.end() ; ++it){
auto a = it->lock();
auto a = it->second.lock();
if(a.get() == data)
return a;
}
@ -171,17 +171,16 @@ shared_ptr<ChatRoomModel> CoreManager::getChatRoomModel (ChatRoomModel * data) {
return nullptr;
}
shared_ptr<ChatRoomModel> CoreManager::getChatRoomModel (std::shared_ptr<linphone::ChatRoom> chatRoom) {
shared_ptr<ChatRoomModel> CoreManager::getChatRoomModel (std::shared_ptr<linphone::ChatRoom> chatRoom, const bool& create) {
if (!chatRoom)
return nullptr;
auto pc = chatRoom->getCurrentParams();
for(auto it = mChatRoomModels.begin() ; it != mChatRoomModels.end() ; ++it) {
auto a = it->lock();
auto a = it->second.lock();
auto pa = a->getChatRoom()->getCurrentParams();
if( a->getChatRoom()->getConferenceAddress() == chatRoom->getConferenceAddress()
&& a->getChatRoom()->getLocalAddress() == chatRoom->getLocalAddress()
&& a->getChatRoom()->getPeerAddress() == chatRoom->getPeerAddress()
&& a->getChatRoom()->getPeerAddress() == chatRoom->getPeerAddress()
&& pa->encryptionEnabled() == pc->encryptionEnabled()
){
// Returns an existing chat model.
@ -190,30 +189,52 @@ shared_ptr<ChatRoomModel> CoreManager::getChatRoomModel (std::shared_ptr<linphon
return chatRoomModel;
}
}
QPair<bool, QPair<QString, QString>> chatRoomModelId{pc->encryptionEnabled(),
{ QString::fromStdString(chatRoom->getPeerAddress()->asString())
, QString::fromStdString(chatRoom->getLocalAddress()->asString()) }};
auto deleter = [this, chatRoomModelId](ChatRoomModel *chatRoomModel) {
bool removed = mChatRoomModels.remove(chatRoomModelId);
Q_ASSERT(removed);
chatRoomModel->deleteLater();
};
shared_ptr<ChatRoomModel> chatRoomModel(new ChatRoomModel(chatRoom), deleter);
chatRoom->addListener(chatRoomModel);
mChatRoomModels[chatRoomModelId] = chatRoomModel;
emit chatRoomModelCreated(chatRoomModel);
return chatRoomModel;
}
bool CoreManager::chatRoomModelExists (const QString &peerAddress, const QString &localAddress, const bool &isSecure) {
return mChatRoomModels.contains({isSecure, { peerAddress, localAddress}});
if(!create){
return nullptr;
}else{
/*
bool isEncrypted = pc->encryptionEnabled();
auto peerAddress = chatRoom->getPeerAddress();
auto localAddress = chatRoom->getLocalAddress();
auto conferenceAddress = chatRoom->getConferenceAddress();
if(!peerAddress)
peerAddress = conferenceAddress;
QPair<bool, QPair<QString, QString>> chatRoomModelId{isEncrypted,
{ QString::fromStdString(peerAddress->asString())
, QString::fromStdString(localAddress->asString()) }};
*/
//auto deleter = [this, chatRoomModelId](ChatRoomModel *chatRoomModel) {
auto deleter = [this, chatRoom](ChatRoomModel *chatRoomModel) {
//bool removed = mChatRoomModels.remove(chatRoomModelId);
auto iterator = mChatRoomModels.begin();
while(iterator != mChatRoomModels.end()) {
if(iterator->first != chatRoom)
++iterator;
else{
mChatRoomModels.erase(iterator);
iterator = mChatRoomModels.end();
}
}
chatRoomModel->deleteLater();
};
shared_ptr<ChatRoomModel> chatRoomModel(new ChatRoomModel(chatRoom), deleter);
chatRoom->addListener(chatRoomModel);
mChatRoomModels.append({chatRoom, chatRoomModel});
emit chatRoomModelCreated(chatRoomModel);
return chatRoomModel;
}
}
/*
//bool CoreManager::chatRoomModelExists (const QString &peerAddress, const QString &localAddress, const bool &isSecure) {
bool CoreManager::chatRoomModelExists (std::shared_ptr<linphone::ChatRoom> chatRoom) {
//return mChatRoomModels.contains({isSecure, { peerAddress, localAddress}});
return mChatRoomModels.contains(chatRoom);
}*/
HistoryModel* CoreManager::getHistoryModel(){
if(!mHistoryModel){

View file

@ -70,8 +70,9 @@ public:
//std::shared_ptr<ChatRoomModel> getChatRoomModel (const QString &peerAddress, const QString &localAddress, const bool &isSecure);
std::shared_ptr<ChatRoomModel> getChatRoomModel (ChatRoomModel * data);// Get the shared pointer. This can be done becuase of unicity of ChatRoomModel
std::shared_ptr<ChatRoomModel> getChatRoomModel (std::shared_ptr<linphone::ChatRoom> chatRoom);
bool chatRoomModelExists (const QString &sipAddress, const QString &localAddress, const bool &isSecure);
std::shared_ptr<ChatRoomModel> getChatRoomModel (std::shared_ptr<linphone::ChatRoom> chatRoom, const bool& create = true);
//bool chatRoomModelExists (const QString &sipAddress, const QString &localAddress, const bool &isSecure);
//bool chatRoomModelExists (std::shared_ptr<linphone::ChatRoom> chatRoom);
HistoryModel* getHistoryModel();
@ -216,7 +217,9 @@ private:
EventCountNotifier *mEventCountNotifier = nullptr;
QHash<QPair<bool, QPair<QString, QString> >, std::weak_ptr<ChatRoomModel>> mChatRoomModels;
//QHash<QPair<bool, QPair<QString, QString> >, std::weak_ptr<ChatRoomModel>> mChatRoomModels;
//QHash<std::shared_ptr<linphone::ChatRoom>, std::weak_ptr<ChatRoomModel>> mChatRoomModels;
QList<QPair<std::shared_ptr<linphone::ChatRoom>, std::weak_ptr<ChatRoomModel>>> mChatRoomModels;
HistoryModel * mHistoryModel = nullptr;
LdapListModel *mLdapListModel = nullptr;

View file

@ -26,7 +26,6 @@
#include <QWindow>
#include "app/App.hpp"
#include "utils/LinphoneUtils.hpp"
#include "utils/Utils.hpp"
#include "EventCountNotifierSystemTrayIcon.hpp"
@ -45,7 +44,7 @@ namespace {
}
EventCountNotifier::EventCountNotifier (QObject *parent) : AbstractEventCountNotifier(parent) {
QSvgRenderer renderer((QString(LinphoneUtils::WindowIconPath)));
QSvgRenderer renderer((QString(Utils::WindowIconPath)));
if (!renderer.isValid())
qFatal("Invalid SVG Image.");

View file

@ -25,7 +25,6 @@
#include "components/core/CoreHandlers.hpp"
#include "components/core/CoreManager.hpp"
#include "utils/LinphoneUtils.hpp"
#include "utils/Utils.hpp"
#include "LdapListModel.hpp"

View file

@ -25,7 +25,6 @@
#include "components/core/CoreHandlers.hpp"
#include "components/core/CoreManager.hpp"
#include "utils/LinphoneUtils.hpp"
#include "utils/Utils.hpp"
#include "LdapModel.hpp"

View file

@ -65,13 +65,13 @@ class Colors : public QObject {
ADD_COLOR(d, "#5A585B")
ADD_COLOR(e, "#F3F3F3")
ADD_COLOR(f, "#E8E8E8")
ADD_COLOR(g, "#6B7A86")
ADD_COLOR(g, "#6B7A86")// SipAddress
ADD_COLOR(h, "#687680")
// Primary color.
ADD_COLOR(i, "#FE5E00")
ADD_COLOR(j, "#4B5964")
ADD_COLOR(j, "#4B5964")// Username
// Popups, home, call, assistant and settings background.
ADD_COLOR(k, "#FFFFFF")
@ -89,6 +89,8 @@ class Colors : public QObject {
// Fields, backgrounds and text color on some items.
ADD_COLOR(q, "#FFFFFF")
ADD_COLOR(r, "#909fab")//Background button
// Field error.
ADD_COLOR(error, "#FF0000")
@ -124,6 +126,7 @@ signals:
void colorToChanged (const QColor &color);
void colorTpChanged (const QColor &color);
void colorTqChanged (const QColor &color);
void colorTrChanged (const QColor &color);
void colorTerrorChanged (const QColor &color);

View file

@ -0,0 +1,85 @@
/*
* Copyright (c) 2021 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QQmlApplicationEngine>
#include "app/App.hpp"
#include "ParticipantDeviceListModel.hpp"
#include "utils/Utils.hpp"
#include "components/Components.hpp"
// =============================================================================
ParticipantDeviceListModel::ParticipantDeviceListModel (std::shared_ptr<linphone::Participant> participant, QObject *parent) : QAbstractListModel(parent) {
std::list<std::shared_ptr<linphone::ParticipantDevice>> devices = participant->getDevices() ;
for(auto device : devices){
auto deviceModel = std::make_shared<ParticipantDeviceModel>(device);
connect(this, &ParticipantDeviceListModel::securityLevelChanged, deviceModel.get(), &ParticipantDeviceModel::onSecurityLevelChanged);
mList << deviceModel;
}
}
int ParticipantDeviceListModel::rowCount (const QModelIndex &index) const{
return mList.count();
}
QHash<int, QByteArray> ParticipantDeviceListModel::roleNames () const {
QHash<int, QByteArray> roles;
roles[Qt::DisplayRole] = "$participantDevice";
return roles;
}
QVariant ParticipantDeviceListModel::data (const QModelIndex &index, int role) const {
int row = index.row();
if (!index.isValid() || row < 0 || row >= mList.count())
return QVariant();
if (role == Qt::DisplayRole)
return QVariant::fromValue(mList[row].get());
return QVariant();
}
bool ParticipantDeviceListModel::removeRow (int row, const QModelIndex &parent){
return removeRows(row, 1, parent);
}
bool ParticipantDeviceListModel::removeRows (int row, int count, const QModelIndex &parent) {
int limit = row + count - 1;
if (row < 0 || count < 0 || limit >= mList.count())
return false;
beginRemoveRows(parent, row, limit);
for (int i = 0; i < count; ++i)
mList.takeAt(row)->deleteLater();
endRemoveRows();
return true;
}
void ParticipantDeviceListModel::onSecurityLevelChanged(std::shared_ptr<const linphone::Address> device){
emit securityLevelChanged(device);
}

View file

@ -0,0 +1,61 @@
/*
* Copyright (c) 2021 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PARTICIPANT_DEVICE_LIST_MODEL_H_
#define PARTICIPANT_DEVICE_LIST_MODEL_H_
#include <linphone++/linphone.hh>
// =============================================================================
#include <QObject>
#include <QDateTime>
#include <QString>
#include <QAbstractListModel>
class ParticipantDeviceModel;
class ParticipantDeviceListModel : public QAbstractListModel {
Q_OBJECT
public:
ParticipantDeviceListModel (std::shared_ptr<linphone::Participant> participant, QObject *parent = nullptr);
int rowCount (const QModelIndex &index = QModelIndex()) const override;
virtual QHash<int, QByteArray> roleNames () const override;
virtual QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const override;
public slots:
void onSecurityLevelChanged(std::shared_ptr<const linphone::Address> device);
signals:
void securityLevelChanged(std::shared_ptr<const linphone::Address> device);
private:
bool removeRow (int row, const QModelIndex &parent = QModelIndex());
virtual bool removeRows (int row, int count, const QModelIndex &parent = QModelIndex()) override;
QList<std::shared_ptr<ParticipantDeviceModel>> mList;
};
Q_DECLARE_METATYPE(std::shared_ptr<ParticipantDeviceListModel>)
#endif // PARTICIPANT_MODEL_H_

View file

@ -0,0 +1,64 @@
/*
* Copyright (c) 2021 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QQmlApplicationEngine>
#include "app/App.hpp"
#include "ParticipantDeviceModel.hpp"
#include "utils/Utils.hpp"
#include "components/Components.hpp"
// =============================================================================
using namespace std;
ParticipantDeviceModel::ParticipantDeviceModel (shared_ptr<linphone::ParticipantDevice> device, QObject *parent) : QObject(parent) {
mParticipantDevice = device;
}
// -----------------------------------------------------------------------------
QString ParticipantDeviceModel::getName() const{
return Utils::coreStringToAppString(mParticipantDevice->getName());
}
int ParticipantDeviceModel::getSecurityLevel() const{
int security = (int)mParticipantDevice->getSecurityLevel();
return security;
}
time_t ParticipantDeviceModel::getTimeOfJoining() const{
return mParticipantDevice->getTimeOfJoining();
}
QString ParticipantDeviceModel::getAddress() const{
return Utils::coreStringToAppString(mParticipantDevice->getAddress()->asStringUriOnly());
}
std::shared_ptr<linphone::ParticipantDevice> ParticipantDeviceModel::getDevice(){
return mParticipantDevice;
}
void ParticipantDeviceModel::onSecurityLevelChanged(std::shared_ptr<const linphone::Address> device){
if(!device || mParticipantDevice->getAddress()->weakEqual(device))
emit securityLevelChanged();
}

View file

@ -0,0 +1,67 @@
/*
* Copyright (c) 2021 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PARTICIPANT_DEVICE_MODEL_H_
#define PARTICIPANT_DEVICE_MODEL_H_
#include <linphone++/linphone.hh>
// =============================================================================
#include <QObject>
#include <QDateTime>
#include <QString>
class ParticipantDeviceModel : public QObject {
Q_OBJECT
public:
ParticipantDeviceModel (std::shared_ptr<linphone::ParticipantDevice> device, QObject *parent = nullptr);
Q_PROPERTY(QString name READ getName CONSTANT)
Q_PROPERTY(QString address READ getAddress CONSTANT)
Q_PROPERTY(int securityLevel READ getSecurityLevel NOTIFY securityLevelChanged)
Q_PROPERTY(time_t timeOfJoining READ getTimeOfJoining CONSTANT)
QString getName() const;
QString getAddress() const;
int getSecurityLevel() const;
time_t getTimeOfJoining() const;
std::shared_ptr<linphone::ParticipantDevice> getDevice();
//void deviceSecurityLevelChanged(std::shared_ptr<const linphone::Address> device);
public slots:
void onSecurityLevelChanged(std::shared_ptr<const linphone::Address> device);
signals:
void securityLevelChanged();
private:
std::shared_ptr<linphone::ParticipantDevice> mParticipantDevice;
};
//Q_DECLARE_METATYPE(ParticipantModel *);
Q_DECLARE_METATYPE(std::shared_ptr<ParticipantDeviceModel>)
#endif // PARTICIPANT_MODEL_H_

View file

@ -0,0 +1,57 @@
/*
* Copyright (c) 2021 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QQmlApplicationEngine>
#include "app/App.hpp"
#include "ParticipantDeviceProxyModel.hpp"
#include "utils/Utils.hpp"
#include "components/Components.hpp"
#include "ParticipantDeviceListModel.hpp"
// =============================================================================
ParticipantDeviceProxyModel::ParticipantDeviceProxyModel (QObject *parent) : QSortFilterProxyModel(parent){
}
bool ParticipantDeviceProxyModel::filterAcceptsRow (
int sourceRow,
const QModelIndex &sourceParent
) const {
Q_UNUSED(sourceRow)
Q_UNUSED(sourceParent)
//const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
//const ParticipantDeviceModel *device = index.data().value<ParticipantDeviceModel *>();
return true;
}
bool ParticipantDeviceProxyModel::lessThan (const QModelIndex &left, const QModelIndex &right) const {
const ParticipantDeviceModel *deviceA = sourceModel()->data(left).value<ParticipantDeviceModel *>();
const ParticipantDeviceModel *deviceB = sourceModel()->data(right).value<ParticipantDeviceModel *>();
return deviceA->getTimeOfJoining() > deviceB->getTimeOfJoining();
}
//---------------------------------------------------------------------------------
void ParticipantDeviceProxyModel::setParticipant(ParticipantModel * participant){
setSourceModel(participant->getParticipantDevices().get());
}

View file

@ -0,0 +1,51 @@
/*
* Copyright (c) 2021 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PARTICIPANT_DEVICE_PROXY_MODEL_H_
#define PARTICIPANT_DEVICE_PROXY_MODEL_H_
#include <linphone++/linphone.hh>
// =============================================================================
#include <QObject>
#include <QDateTime>
#include <QString>
#include <QSortFilterProxyModel>
class ParticipantDeviceListModel;
class ParticipantModel;
class ParticipantDeviceProxyModel : public QSortFilterProxyModel {
Q_OBJECT
public:
ParticipantDeviceProxyModel (QObject *parent = nullptr);
void setParticipant(ParticipantModel * participant);
protected:
virtual bool filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const override;
virtual bool lessThan (const QModelIndex &left, const QModelIndex &right) const override;
std::shared_ptr<ParticipantDeviceListModel> mDevices;
};
#endif

View file

@ -0,0 +1,276 @@
/*
* Copyright (c) 2010-2020 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "components/core/CoreManager.hpp"
#include "components/settings/AccountSettingsModel.hpp"
#include "components/sip-addresses/SipAddressesModel.hpp"
#include "utils/Utils.hpp"
#include "ParticipantListModel.hpp"
#include "ParticipantModel.hpp"
#include <QDebug>
// =============================================================================
ParticipantListModel::ParticipantListModel (ChatRoomModel * chatRoomModel, QObject *parent) : QAbstractListModel(parent) {
if( chatRoomModel) {
mChatRoomModel = chatRoomModel;//CoreManager::getInstance()->getChatRoomModel(chatRoomModel);
connect(mChatRoomModel, &ChatRoomModel::securityEvent, this, &ParticipantListModel::onSecurityEvent);
connect(mChatRoomModel, &ChatRoomModel::participantAdded, this, &ParticipantListModel::onParticipantAdded);
connect(mChatRoomModel, &ChatRoomModel::participantRemoved, this, &ParticipantListModel::onParticipantRemoved);
connect(mChatRoomModel, &ChatRoomModel::participantDeviceAdded, this, &ParticipantListModel::onParticipantDeviceAdded);
connect(mChatRoomModel, &ChatRoomModel::participantDeviceRemoved, this, &ParticipantListModel::onParticipantDeviceRemoved);
connect(mChatRoomModel, &ChatRoomModel::participantAdminStatusChanged, this, &ParticipantListModel::onParticipantAdminStatusChanged);
connect(mChatRoomModel, &ChatRoomModel::participantRegistrationSubscriptionRequested, this, &ParticipantListModel::onParticipantRegistrationSubscriptionRequested);
connect(mChatRoomModel, &ChatRoomModel::participantRegistrationUnsubscriptionRequested, this, &ParticipantListModel::onParticipantRegistrationUnsubscriptionRequested);
updateParticipants();
}
}
ParticipantListModel::~ParticipantListModel(){
mParticipants.clear();
mChatRoomModel = nullptr;
}
// -----------------------------------------------------------------------------
ParticipantModel * ParticipantListModel::getAt(const int& index){
return mParticipants[index].get();
}
ChatRoomModel *ParticipantListModel::getChatRoomModel() const{
return mChatRoomModel;
}
QString ParticipantListModel::addressesToString()const{
QStringList txt;
for(auto participant : mParticipants){
txt << Utils::coreStringToAppString(participant->getParticipant()->getAddress()->asStringUriOnly());
}
txt.removeFirst();// Remove me
return txt.join(", ");
}
QString ParticipantListModel::usernamesToString()const{
QStringList txt;
for(auto participant : mParticipants){
std::string username = participant->getParticipant()->getAddress()->getDisplayName();
if(username == "")
username = participant->getParticipant()->getAddress()->getUsername();
txt << Utils::coreStringToAppString(username);
}
txt.removeFirst();// Remove me
return txt.join(", ");
}
bool ParticipantListModel::contains(const QString& address) const{
auto testAddress = Utils::interpretUrl(address);
bool exists = false;
for(auto itParticipant = mParticipants.begin() ; !exists && itParticipant != mParticipants.end() ; ++itParticipant)
exists = testAddress->weakEqual(Utils::interpretUrl((*itParticipant)->getSipAddress() ));
return exists;
}
//----------------------------------------------------------------------------
int ParticipantListModel::rowCount (const QModelIndex &) const {
return mParticipants.count();
}
QHash<int, QByteArray> ParticipantListModel::roleNames () const {
QHash<int, QByteArray> roles;
roles[Qt::DisplayRole] = "$participant";
return roles;
}
QVariant ParticipantListModel::data (const QModelIndex &index, int role) const {
int row = index.row();
if (!index.isValid() || row < 0 || row >= mParticipants.count())
return QVariant();
if (role == Qt::DisplayRole)
return QVariant::fromValue(mParticipants[row].get());
return QVariant();
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
bool ParticipantListModel::removeRow (int row, const QModelIndex &parent) {
return removeRows(row, 1, parent);
}
bool ParticipantListModel::removeRows (int row, int count, const QModelIndex &parent) {
int limit = row + count - 1;
if (row < 0 || count < 0 || limit >= mParticipants.count())
return false;
beginRemoveRows(parent, row, limit);
for (int i = 0; i < count; ++i){
mParticipants.takeAt(row);
}
endRemoveRows();
return true;
}
// -----------------------------------------------------------------------------
void ParticipantListModel::updateParticipants () {
if( mChatRoomModel) {
CoreManager *coreManager = CoreManager::getInstance();
auto dbParticipants = mChatRoomModel->getChatRoom()->getParticipants();
auto me = mChatRoomModel->getChatRoom()->getMe();
dbParticipants.push_front(me);
//Remove left participants
//for(auto participant : mParticipants){
auto itParticipant = mParticipants.begin();
while(itParticipant != mParticipants.end()) {
auto itDbParticipant = dbParticipants.begin();
while(itDbParticipant != dbParticipants.end()
&& !(*itDbParticipant)->getAddress()->weakEqual((*itParticipant)->getParticipant()->getAddress())){
++itDbParticipant;
}
if( itDbParticipant == dbParticipants.end()){
itParticipant = mParticipants.erase(itParticipant);
}else
++itParticipant;
}
// Add new
for(auto dbParticipant : dbParticipants){
auto itParticipant = mParticipants.begin();
while(itParticipant != mParticipants.end() && !dbParticipant->getAddress()->weakEqual((*itParticipant)->getParticipant()->getAddress())){
++itParticipant;
}
if( itParticipant == mParticipants.end()){
auto participant = std::make_shared<ParticipantModel>(dbParticipant);
connect(this, &ParticipantListModel::deviceSecurityLevelChanged, participant.get(), &ParticipantModel::onDeviceSecurityLevelChanged);
connect(this, &ParticipantListModel::securityLevelChanged, participant.get(), &ParticipantModel::onSecurityLevelChanged);
mParticipants << participant;
}
}
}
}
void ParticipantListModel::add (std::shared_ptr<ParticipantModel> participant){
int row = mParticipants.count();
beginInsertRows(QModelIndex(), row, row);
mParticipants << participant;
endInsertRows();
resetInternalData();
}
void ParticipantListModel::remove (ParticipantModel *model) {
QString address = model->getSipAddress();
int index = 0;
bool found = false;
auto itParticipant = mParticipants.begin() ;
while(!found && itParticipant != mParticipants.end()){
if( (*itParticipant)->getSipAddress() == address)
found = true;
else{
++itParticipant;
++index;
}
}
if(found) {
beginRemoveRows(QModelIndex(), index, index);
mParticipants.erase(itParticipant);
endRemoveRows();
}
}
const std::shared_ptr<ParticipantModel> ParticipantListModel::getParticipant(const std::shared_ptr<const linphone::Address>& address) const{
if(address){
auto itParticipant = std::find_if(mParticipants.begin(), mParticipants.end(), [address] (const std::shared_ptr<ParticipantModel>& participant){
return participant->getParticipant()->getAddress()->weakEqual(address);
});
if( itParticipant == mParticipants.end())
return nullptr;
else
return *itParticipant;
}else
return nullptr;
}
//-------------------------------------------------------------
void ParticipantListModel::onSecurityEvent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog) {
auto address = eventLog->getParticipantAddress();
if(address) {
auto participant = getParticipant(address);
if( participant){
emit participant->securityLevelChanged();
}
}else{
address = eventLog->getDeviceAddress();
// Looping on all participant ensure to get all devices. Can be optimized if Device address is unique : Gain 2n operations.
if(address)
emit deviceSecurityLevelChanged(address);
}
}
void ParticipantListModel::onParticipantAdded(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
updateParticipants();
}
void ParticipantListModel::onParticipantRemoved(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
updateParticipants();
}
void ParticipantListModel::onParticipantAdminStatusChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
auto participant = getParticipant(eventLog->getParticipantAddress());
if( participant){
emit participant->adminStatusChanged();// Request to participant to update its status from its data
}
}
void ParticipantListModel::onParticipantDeviceAdded(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
auto participant = getParticipant(eventLog->getParticipantAddress());
if( participant){
emit participant->deviceCountChanged();
}
}
void ParticipantListModel::onParticipantDeviceRemoved(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog){
auto participant = getParticipant(eventLog->getParticipantAddress());
if( participant){
emit participant->deviceCountChanged();
}
}
void ParticipantListModel::onParticipantRegistrationSubscriptionRequested(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & participantAddress){
qWarning() << "Toto";
}
void ParticipantListModel::onParticipantRegistrationUnsubscriptionRequested(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & participantAddress){
qWarning() << "Toto";
}

View file

@ -0,0 +1,84 @@
/*
* Copyright (c) 2010-2020 Belledonne Communications SARL.
*
* This file is part of linphone-desktop
* (see https://www.linphone.org).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PARTICIPANT_LIST_MODEL_H_
#define PARTICIPANT_LIST_MODEL_H_
#include <QSortFilterProxyModel>
#include "components/participant/ParticipantModel.hpp"
#include "components/chat-room/ChatRoomModel.hpp"
// =============================================================================
class ParticipantListModel : public QAbstractListModel {
Q_OBJECT
public:
ParticipantListModel (ChatRoomModel * chatRoomModel, QObject *parent = Q_NULLPTR);
virtual ~ParticipantListModel();
Q_PROPERTY(ChatRoomModel* chatRoomModel READ getChatRoomModel CONSTANT)
void reset();
void update();
void selectAll(const bool& selected);
ParticipantModel * getAt(const int& index);
const std::shared_ptr<ParticipantModel> getParticipant(const std::shared_ptr<const linphone::Address>& address) const;
int rowCount (const QModelIndex &index = QModelIndex()) const override;
QHash<int, QByteArray> roleNames () const override;
QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const override;
void add (std::shared_ptr<ParticipantModel> participant);
void updateParticipants(); // Update list from Chat Room
// Remove a chatroom
Q_INVOKABLE void remove (ParticipantModel *importer);
Q_INVOKABLE ChatRoomModel* getChatRoomModel() const;
Q_INVOKABLE QString addressesToString()const;
Q_INVOKABLE QString usernamesToString()const;
bool contains(const QString& address) const;
public slots:
void onSecurityEvent(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
void onParticipantAdded(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
void onParticipantRemoved(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
void onParticipantAdminStatusChanged(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
void onParticipantDeviceAdded(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
void onParticipantDeviceRemoved(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::EventLog> & eventLog);
void onParticipantRegistrationSubscriptionRequested(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & participantAddress);
void onParticipantRegistrationUnsubscriptionRequested(const std::shared_ptr<linphone::ChatRoom> & chatRoom, const std::shared_ptr<const linphone::Address> & participantAddress);
signals:
void securityLevelChanged();
void deviceSecurityLevelChanged(std::shared_ptr<const linphone::Address> device);
private:
bool removeRow (int row, const QModelIndex &parent = QModelIndex());
bool removeRows (int row, int count, const QModelIndex &parent = QModelIndex()) override;
QList<std::shared_ptr<ParticipantModel>> mParticipants;
ChatRoomModel* mChatRoomModel;
};
Q_DECLARE_METATYPE(std::shared_ptr<ParticipantListModel>);
#endif // PARTICIPANT_LIST_MODEL_H_

View file

@ -25,30 +25,89 @@
#include "ParticipantModel.hpp"
#include "utils/Utils.hpp"
#include "components/Components.hpp"
// =============================================================================
using namespace std;
ParticipantModel::ParticipantModel (shared_ptr<linphone::Participant> linphoneParticipant, QObject *parent) : QObject(parent) {
mLinphoneParticipant = linphoneParticipant;
mAdminStatus = false;
mParticipant = linphoneParticipant;
if(mParticipant){
mParticipantDevices = std::make_shared<ParticipantDeviceListModel>(mParticipant);
connect(this, &ParticipantModel::deviceSecurityLevelChanged, mParticipantDevices.get(), &ParticipantDeviceListModel::securityLevelChanged);
}
}
// -----------------------------------------------------------------------------
QString ParticipantModel::getAddress() const{
return Utils::coreStringToAppString(mLinphoneParticipant->getAddress()->asStringUriOnly());
ContactModel *ParticipantModel::getContactModel() const{
return CoreManager::getInstance()->getContactsListModel()->findContactModelFromSipAddress(getSipAddress());
}
int ParticipantModel::getSecurityLevel() const{
return (mParticipant ? (int)mParticipant->getSecurityLevel() : 0);
}
int ParticipantModel::getDeviceCount() const{
return (mParticipant ? mParticipant->getDevices().size() : 0);
}
QString ParticipantModel::getSipAddress() const{
return (mParticipant ? Utils::coreStringToAppString(mParticipant->getAddress()->asString()) : mSipAddress);
}
QDateTime ParticipantModel::getCreationTime() const{
return QDateTime::fromSecsSinceEpoch(mLinphoneParticipant->getCreationTime());
return (mParticipant ? QDateTime::fromSecsSinceEpoch(mParticipant->getCreationTime()) : QDateTime::currentDateTime());
}
//std::list<std::shared_ptr<linphone::ParticipantDevice>> ParticipantModel::getDevices() const;
bool ParticipantModel::isAdmin() const{
return mLinphoneParticipant->isAdmin();
bool ParticipantModel::getAdminStatus() const{
return (mParticipant ? mParticipant->isAdmin() : mAdminStatus);
}
bool ParticipantModel::isFocus() const{
return mLinphoneParticipant->isFocus();
return (mParticipant ? mParticipant->isFocus() : false);
}
//linphone::ChatRoomSecurityLevel ParticipantModel::getSecurityLevel() const;
//std::shared_ptr<linphone::ParticipantDevice> ParticipantModel::findDevice(const std::shared_ptr<const linphone::Address> & address) const;
//------------------------------------------------------------------------
void ParticipantModel::setSipAddress(const QString& address){
if(mSipAddress != address){
mSipAddress = address;
emit sipAddressChanged();
}
}
void ParticipantModel::setAdminStatus(const bool& status){
if(status != mAdminStatus){
mAdminStatus = status;
emit adminStatusChanged();
}
}
//------------------------------------------------------------------------
void ParticipantModel::onSecurityLevelChanged(){
emit securityLevelChanged();
}
void ParticipantModel::onDeviceSecurityLevelChanged(std::shared_ptr<const linphone::Address> device){
emit deviceSecurityLevelChanged(device);
}
std::shared_ptr<linphone::Participant> ParticipantModel::getParticipant(){
return mParticipant;
}
ParticipantDeviceProxyModel * ParticipantModel::getProxyDevices(){
ParticipantDeviceProxyModel * devices = new ParticipantDeviceProxyModel();
devices->setParticipant(this);
return devices;
}
std::shared_ptr<ParticipantDeviceListModel> ParticipantModel::getParticipantDevices(){
return mParticipantDevices;
}

View file

@ -28,35 +28,69 @@
#include <QDateTime>
#include <QString>
class ContactModel;
class ParticipantDeviceProxyModel;
class ParticipantDeviceListModel;
class ParticipantModel : public QObject {
Q_OBJECT;
Q_PROPERTY(QString address READ getAddress CONSTANT);
Q_PROPERTY(QDateTime creationTime READ getCreationTime CONSTANT);
Q_PROPERTY(bool admin READ isAdmin CONSTANT);
Q_PROPERTY(bool focus READ isFocus CONSTANT);
Q_OBJECT
public:
ParticipantModel (std::shared_ptr<linphone::Participant> linphoneParticipant, QObject *parent = nullptr);
Q_PROPERTY(ContactModel *contactModel READ getContactModel CONSTANT)
Q_PROPERTY(QString sipAddress MEMBER mSipAddress READ getSipAddress WRITE setSipAddress NOTIFY sipAddressChanged)
Q_PROPERTY(bool adminStatus MEMBER mAdminStatus READ getAdminStatus WRITE setAdminStatus NOTIFY adminStatusChanged)
Q_PROPERTY(QDateTime creationTime READ getCreationTime CONSTANT)
Q_PROPERTY(bool focus READ isFocus CONSTANT)
Q_PROPERTY(int securityLevel READ getSecurityLevel NOTIFY securityLevelChanged)
Q_PROPERTY(int deviceCount READ getDeviceCount NOTIFY deviceCountChanged)
QString getAddress() const;
ContactModel *getContactModel() const;
QString getSipAddress() const;
QDateTime getCreationTime() const;
//std::list<std::shared_ptr<linphone::ParticipantDevice>> getDevices() const;
bool isAdmin() const;
bool getAdminStatus() const;
bool isFocus() const;
int getSecurityLevel() const;
int getDeviceCount() const;
void setSipAddress(const QString& address);
void setAdminStatus(const bool& status);
std::shared_ptr<linphone::Participant> getParticipant();
Q_INVOKABLE ParticipantDeviceProxyModel * getProxyDevices(); // Reminder : Q_INVOKABLE change the ownership of the proxy to QML
std::shared_ptr<ParticipantDeviceListModel> getParticipantDevices();
//linphone::ChatRoomSecurityLevel getSecurityLevel() const;
//std::shared_ptr<linphone::ParticipantDevice> findDevice(const std::shared_ptr<const linphone::Address> & address) const;
//signals:
public slots:
void onSecurityLevelChanged();
void onDeviceSecurityLevelChanged(std::shared_ptr<const linphone::Address> device);
signals:
void securityLevelChanged();
void deviceSecurityLevelChanged(std::shared_ptr<const linphone::Address> device);
void sipAddressChanged();
void adminStatusChanged();
void deviceCountChanged();
// void contactUpdated ();
private:
std::shared_ptr<linphone::Participant> mLinphoneParticipant;
std::shared_ptr<linphone::Participant> mParticipant;
std::shared_ptr<ParticipantDeviceListModel> mParticipantDevices;
// Variables when Linphone Participant has not been created
QString mSipAddress;
bool mAdminStatus;
};
Q_DECLARE_METATYPE(ParticipantModel *);
//Q_DECLARE_METATYPE(ParticipantModel *);
Q_DECLARE_METATYPE(std::shared_ptr<ParticipantModel>);
#endif // PARTICIPANT_MODEL_H_

View file

@ -18,276 +18,92 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <QQuickWindow>
#include "ParticipantProxyModel.hpp"
#include "app/App.hpp"
#include "components/core/CoreManager.hpp"
#include "components/settings/AccountSettingsModel.hpp"
#include "components/sip-addresses/SipAddressesModel.hpp"
#include "utils/Utils.hpp"
#include "ParticipantListModel.hpp"
#include "ParticipantModel.hpp"
#include <QDebug>
#include "ChatRoomProxyModel.hpp"
// =============================================================================
using namespace std;
// -----------------------------------------------------------------------------
QString ChatRoomProxyModel::gCachedText;
// Fetch the L last filtered chat entries.
class ChatRoomProxyModel::ChatRoomModelFilter : public QSortFilterProxyModel {
public:
ChatRoomModelFilter (QObject *parent) : QSortFilterProxyModel(parent) {}
ChatRoomModel::EntryType getEntryTypeFilter () {
return mEntryTypeFilter;
}
void setEntryTypeFilter (ChatRoomModel::EntryType type) {
mEntryTypeFilter = type;
invalidate();
}
protected:
bool filterAcceptsRow (int sourceRow, const QModelIndex &) const override {
if (mEntryTypeFilter == ChatRoomModel::EntryType::GenericEntry)
return true;
QModelIndex index = sourceModel()->index(sourceRow, 0, QModelIndex());
const QVariantMap data = index.data().toMap();
return data["type"].toInt() == mEntryTypeFilter;
}
private:
ChatRoomModel::EntryType mEntryTypeFilter = ChatRoomModel::EntryType::GenericEntry;
};
// =============================================================================
ChatRoomProxyModel::ChatRoomProxyModel (QObject *parent) : QSortFilterProxyModel(parent) {
setSourceModel(new ChatRoomModelFilter(this));
mIsSecure = false;
App *app = App::getInstance();
QObject::connect(app->getMainWindow(), &QWindow::activeChanged, this, [this]() {
handleIsActiveChanged(App::getInstance()->getMainWindow());
});
QQuickWindow *callsWindow = app->getCallsWindow();
if (callsWindow)
QObject::connect(callsWindow, &QWindow::activeChanged, this, [this, callsWindow]() {
handleIsActiveChanged(callsWindow);
});
ParticipantProxyModel::ParticipantProxyModel (QObject *parent) : QSortFilterProxyModel(parent) {
mChatRoomModel = nullptr;
}
// -----------------------------------------------------------------------------
#define GET_CHAT_MODEL() \
if (!mChatRoomModel) \
return; \
mChatRoomModel
ChatRoomModel *ParticipantProxyModel::getChatRoomModel() const{
return mChatRoomModel;
}
#define CREATE_PARENT_MODEL_FUNCTION(METHOD) \
void ChatRoomProxyModel::METHOD () { \
GET_CHAT_MODEL()->METHOD(); \
}
QStringList ParticipantProxyModel::getSipAddresses() const{
QStringList participants;
ParticipantListModel * list = dynamic_cast<ParticipantListModel*>(sourceModel());
for(int i = 0 ; i < list->rowCount() ; ++i)
participants << list->getAt(i)->getSipAddress();
return participants;
}
#define CREATE_PARENT_MODEL_FUNCTION_WITH_PARAM(METHOD, ARG_TYPE) \
void ChatRoomProxyModel::METHOD (ARG_TYPE value) { \
GET_CHAT_MODEL()->METHOD(value); \
}
QVariantList ParticipantProxyModel::getParticipants() const{
QVariantList participants;
ParticipantListModel * list = dynamic_cast<ParticipantListModel*>(sourceModel());
for(int i = 0 ; i < list->rowCount() ; ++i)
participants << QVariant::fromValue(list->getAt(i));
return participants;
}
#define CREATE_PARENT_MODEL_FUNCTION_WITH_ID(METHOD) \
void ChatRoomProxyModel::METHOD (int id) { \
QModelIndex sourceIndex = mapToSource(index(id, 0)); \
GET_CHAT_MODEL()->METHOD( \
static_cast<ChatRoomModelFilter *>(sourceModel())->mapToSource(sourceIndex).row() \
); \
}
CREATE_PARENT_MODEL_FUNCTION(removeAllEntries);
CREATE_PARENT_MODEL_FUNCTION_WITH_PARAM(sendFileMessage, const QString &);
CREATE_PARENT_MODEL_FUNCTION_WITH_PARAM(sendMessage, const QString &);
CREATE_PARENT_MODEL_FUNCTION_WITH_ID(downloadFile);
CREATE_PARENT_MODEL_FUNCTION_WITH_ID(openFile);
CREATE_PARENT_MODEL_FUNCTION_WITH_ID(openFileDirectory);
CREATE_PARENT_MODEL_FUNCTION_WITH_ID(removeEntry);
CREATE_PARENT_MODEL_FUNCTION_WITH_ID(resendMessage);
#undef GET_CHAT_MODEL
#undef CREATE_PARENT_MODEL_FUNCTION
#undef CREATE_PARENT_MODEL_FUNCTION_WITH_PARAM
#undef CREATE_PARENT_MODEL_FUNCTION_WITH_ID
void ChatRoomProxyModel::compose (const QString& text) {
if (mChatRoomModel)
mChatRoomModel->compose();
gCachedText = text;
int ParticipantProxyModel::count(){
return dynamic_cast<ParticipantListModel*>(sourceModel())->rowCount();
}
// -----------------------------------------------------------------------------
void ChatRoomProxyModel::loadMoreEntries () {
int count = rowCount();
int parentCount = sourceModel()->rowCount();
if (count < parentCount) {
// Do not increase `mMaxDisplayedEntries` if it's not necessary...
// Limit qml calls.
if (count == mMaxDisplayedEntries)
mMaxDisplayedEntries += EntriesChunkSize;
invalidateFilter();
count = rowCount() - count;
if (count > 0)
emit moreEntriesLoaded(count);
}
}
void ChatRoomProxyModel::setEntryTypeFilter (ChatRoomModel::EntryType type) {
ChatRoomModelFilter *chatRoomModelFilter = static_cast<ChatRoomModelFilter *>(sourceModel());
if (chatRoomModelFilter->getEntryTypeFilter() != type) {
chatRoomModelFilter->setEntryTypeFilter(type);
emit entryTypeFilterChanged(type);
}
}
// -----------------------------------------------------------------------------
bool ChatRoomProxyModel::filterAcceptsRow (int sourceRow, const QModelIndex &) const {
return sourceModel()->rowCount() - sourceRow <= mMaxDisplayedEntries;
}
// -----------------------------------------------------------------------------
QString ChatRoomProxyModel::getPeerAddress () const {
return mChatRoomModel ? mChatRoomModel->getPeerAddress() : QString("");
}
void ChatRoomProxyModel::setPeerAddress (const QString &peerAddress) {
mPeerAddress = peerAddress;
//reload();
}
QString ChatRoomProxyModel::getLocalAddress () const {
return mChatRoomModel ? mChatRoomModel->getLocalAddress() : QString("");
}
void ChatRoomProxyModel::setLocalAddress (const QString &localAddress) {
mLocalAddress = localAddress;
//reload();
}
QString ChatRoomProxyModel::getFullPeerAddress () const {
return mChatRoomModel ? mChatRoomModel->getFullPeerAddress() : QString("");
}
void ChatRoomProxyModel::setFullPeerAddress (const QString &peerAddress) {
mFullPeerAddress = peerAddress;
//reload();
}
QString ChatRoomProxyModel::getFullLocalAddress () const {
return mChatRoomModel ? mChatRoomModel->getFullLocalAddress() : QString("");
}
void ChatRoomProxyModel::setFullLocalAddress (const QString &localAddress) {
mFullLocalAddress = localAddress;
//reload();
}
int ChatRoomProxyModel::getIsSecure () const {
return mChatRoomModel ? mChatRoomModel->getIsSecure() : -1;
}
void ChatRoomProxyModel::setIsSecure (const int &secure) {
mIsSecure = secure;
}
bool ChatRoomProxyModel::getIsRemoteComposing () const {
return mChatRoomModel ? mChatRoomModel->getIsRemoteComposing() : false;
}
QString ChatRoomProxyModel::getCachedText() const{
return gCachedText;
}
// -----------------------------------------------------------------------------
void ChatRoomProxyModel::reload () {
mMaxDisplayedEntries = EntriesChunkSize;
if (mChatRoomModel) {
ChatRoomModel *chatRoomModel = mChatRoomModel.get();
QObject::disconnect(chatRoomModel, &ChatRoomModel::isRemoteComposingChanged, this, &ChatRoomProxyModel::handleIsRemoteComposingChanged);
QObject::disconnect(chatRoomModel, &ChatRoomModel::messageReceived, this, &ChatRoomProxyModel::handleMessageReceived);
QObject::disconnect(chatRoomModel, &ChatRoomModel::messageSent, this, &ChatRoomProxyModel::handleMessageSent);
}
//mChatRoomModel = CoreManager::getInstance()->getChatRoomModel(mPeerAddress, mLocalAddress, mIsSecure);
//if(mChatRoom)
mChatRoomModel = CoreManager::getInstance()->getChatRoomModel(mChatRoom);
if (mChatRoomModel) {
ChatRoomModel *chatRoomModel = mChatRoomModel.get();
QObject::connect(chatRoomModel, &ChatRoomModel::isRemoteComposingChanged, this, &ChatRoomProxyModel::handleIsRemoteComposingChanged);
QObject::connect(chatRoomModel, &ChatRoomModel::messageReceived, this, &ChatRoomProxyModel::handleMessageReceived);
QObject::connect(chatRoomModel, &ChatRoomModel::messageSent, this, &ChatRoomProxyModel::handleMessageSent);
}
static_cast<ChatRoomModelFilter *>(sourceModel())->setSourceModel(mChatRoomModel.get());
}
void ChatRoomProxyModel::resetMessageCount(){
if( mChatRoomModel){
mChatRoomModel->resetMessageCount();
void ParticipantProxyModel::setChatRoomModel(ChatRoomModel * chatRoomModel){
if(!mChatRoomModel || mChatRoomModel != chatRoomModel){
mChatRoomModel = chatRoomModel;
if(mChatRoomModel)
setSourceModel(mChatRoomModel->getParticipants());
else {
setSourceModel(new ParticipantListModel(nullptr, this));
}
sort(0);
emit chatRoomModelChanged();
}
}
std::shared_ptr<ChatRoomModel> ChatRoomProxyModel::getChatRoomModel () const{
return mChatRoomModel;
void ParticipantProxyModel::add(const QString& address){
ParticipantListModel * participantsModel = dynamic_cast<ParticipantListModel*>(sourceModel());
if(!participantsModel->contains(address)){
std::shared_ptr<ParticipantModel> participant = std::make_shared<ParticipantModel>(nullptr, this);
participant->setSipAddress(address);
participantsModel->add(participant);
}
}
void ChatRoomProxyModel::setChatRoomModel (std::shared_ptr<ChatRoomModel> chatRoomModel){
mChatRoom = chatRoomModel->getChatRoom();
reload();
emit chatRoomModelChanged();
void ParticipantProxyModel::remove(ParticipantModel * participant){
if(participant)
dynamic_cast<ParticipantListModel*>(sourceModel())->remove(participant);
}
// -----------------------------------------------------------------------------
static inline QWindow *getParentWindow (QObject *object) {
App *app = App::getInstance();
const QWindow *mainWindow = app->getMainWindow();
const QWindow *callsWindow = app->getCallsWindow();
for (QObject *parent = object->parent(); parent; parent = parent->parent())
if (parent == mainWindow || parent == callsWindow)
return static_cast<QWindow *>(parent);
return nullptr;
bool ParticipantProxyModel::filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const {
//const QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
return true;
}
void ChatRoomProxyModel::handleIsActiveChanged (QWindow *window) {
if (mChatRoomModel && window->isActive() && getParentWindow(this) == window) {
mChatRoomModel->resetMessageCount();
mChatRoomModel->focused();
}
}
void ChatRoomProxyModel::handleIsRemoteComposingChanged (bool status) {
emit isRemoteComposingChanged(status);
}
void ChatRoomProxyModel::handleMessageReceived (const shared_ptr<linphone::ChatMessage> &) {
mMaxDisplayedEntries++;
QWindow *window = getParentWindow(this);
if (window && window->isActive())
mChatRoomModel->resetMessageCount();
}
void ChatRoomProxyModel::handleMessageSent (const shared_ptr<linphone::ChatMessage> &) {
mMaxDisplayedEntries++;
bool ParticipantProxyModel::lessThan (const QModelIndex &left, const QModelIndex &right) const {
const ParticipantModel* a = sourceModel()->data(left).value<ParticipantModel*>();
const ParticipantModel* b = sourceModel()->data(right).value<ParticipantModel*>();
return a->getCreationTime() >= b->getCreationTime();
}

View file

@ -22,9 +22,11 @@
#define PARTICIPANT_PROXY_MODEL_H_
#include <QSortFilterProxyModel>
#include <memory>
#include "ParticipantModel.hpp"
class ParticipantModel;
class ChatRoomModel;
class ParticipantListModel;
// =============================================================================
class QWindow;
@ -35,30 +37,35 @@ class ParticipantProxyModel : public QSortFilterProxyModel {
public:
ParticipantProxyModel (QObject *parent = Q_NULLPTR);
ParticipantProxyModel ( QObject *parent = Q_NULLPTR);
void reset();
void update();
std::shared_ptr<TimelineModel> getTimeline(std::shared_ptr<linphone::ChatRoom> chatRoom, const bool &create);
int rowCount (const QModelIndex &index = QModelIndex()) const override;
QHash<int, QByteArray> roleNames () const override;
QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const override;
// Remove a chatroom
Q_INVOKABLE void remove (TimelineModel *importer);
Q_PROPERTY(ChatRoomModel* chatRoomModel READ getChatRoomModel WRITE setChatRoomModel NOTIFY chatRoomModelChanged)
bool filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const override;
bool lessThan (const QModelIndex &left, const QModelIndex &right) const override;
ChatRoomModel *getChatRoomModel() const;
Q_INVOKABLE QStringList getSipAddresses() const;
Q_INVOKABLE QVariantList getParticipants() const;
Q_INVOKABLE int count();
void setChatRoomModel(ChatRoomModel * chatRoomModel);
Q_INVOKABLE void add(const QString& address);
Q_INVOKABLE void remove(ParticipantModel * participant);
signals:
void chatRoomModelChanged();
private:
/*
bool removeRow (int row, const QModelIndex &parent = QModelIndex());
bool removeRows (int row, int count, const QModelIndex &parent = QModelIndex()) override;
void initTimeline ();
void updateTimelines();
bool removeRows (int row, int count, const QModelIndex &parent = QModelIndex()) override;*/
QList<std::shared_ptr<ParticipantModel>> mParticipantlines;
//std::shared_ptr<ParticipantListModel> mParticipantListModel;
ChatRoomModel *mChatRoomModel;
};
#endif // PARTICIPANT_PROXY_MODEL_H_

View file

@ -23,12 +23,15 @@
// =============================================================================
Presence::PresenceLevel Presence::getPresenceLevel (const PresenceStatus &status) {
return getPresenceLevel(static_cast<linphone::ConsolidatedPresence>(status));
}
Presence::PresenceLevel Presence::getPresenceLevel (const linphone::ConsolidatedPresence &status) {
switch (status) {
case Online:
case linphone::ConsolidatedPresence::Online:
return Green;
case Busy:
case linphone::ConsolidatedPresence::Busy:
return Orange;
case DoNotDisturb:
case linphone::ConsolidatedPresence::DoNotDisturb:
return Red;
default:
break;
@ -38,12 +41,15 @@ Presence::PresenceLevel Presence::getPresenceLevel (const PresenceStatus &status
}
QString Presence::getPresenceStatusAsString (const PresenceStatus &status) {
return getPresenceStatusAsString(static_cast<linphone::ConsolidatedPresence>(status));
}
QString Presence::getPresenceStatusAsString (const linphone::ConsolidatedPresence &status) {
switch (status) {
case Online:
case linphone::ConsolidatedPresence::Online:
return tr("presenceOnline");
case Busy:
case linphone::ConsolidatedPresence::Busy:
return tr("presenceBusy");
case DoNotDisturb:
case linphone::ConsolidatedPresence::DoNotDisturb:
return tr("presenceDoNotDisturb");
default:
break;
@ -52,6 +58,21 @@ QString Presence::getPresenceStatusAsString (const PresenceStatus &status) {
return tr("presenceOffline");
}
QString Presence::getBetterPresenceLevelIconName (const PresenceLevel &level) {
switch (level) {
case Green:
return QStringLiteral("current_account_status_available");
case Orange:
return QStringLiteral("led_orange");
case Red:
return QStringLiteral("led_red");
case White:
return QStringLiteral("led_white");
}
return QString("");
}
QString Presence::getPresenceLevelIconName (const PresenceLevel &level) {
switch (level) {
case Green:

Some files were not shown because too many files have changed in this diff Show more