- Add Tunnel support if available.

- Add tunnel special options for developer.
- Use of CPP for linphone enums to string.
- Replace let colors with better quality.
- Fix developer settings view.
This commit is contained in:
Julien Wadel 2021-10-21 23:05:03 +02:00
parent 176b46ce9f
commit 88a1263d2a
42 changed files with 3289 additions and 248 deletions

View file

@ -189,6 +189,10 @@ set(SOURCES
src/components/timeline/TimelineModel.cpp
src/components/timeline/TimelineListModel.cpp
src/components/timeline/TimelineProxyModel.cpp
src/components/tunnel/TunnelModel.cpp
src/components/tunnel/TunnelConfigModel.cpp
src/components/tunnel/TunnelConfigListModel.cpp
src/components/tunnel/TunnelConfigProxyModel.cpp
src/components/url-handlers/UrlHandlers.cpp
src/utils/Constants.cpp
src/utils/LinphoneEnums.cpp
@ -291,6 +295,10 @@ set(HEADERS
src/components/timeline/TimelineModel.hpp
src/components/timeline/TimelineListModel.hpp
src/components/timeline/TimelineProxyModel.hpp
src/components/tunnel/TunnelModel.hpp
src/components/tunnel/TunnelConfigModel.hpp
src/components/tunnel/TunnelConfigListModel.hpp
src/components/tunnel/TunnelConfigProxyModel.hpp
src/components/url-handlers/UrlHandlers.hpp
src/utils/Constants.hpp
src/utils/LinphoneEnums.hpp

View file

@ -2,9 +2,8 @@
<svg
width="8"
height="8"
viewBox="0 0 8 8"
version="1.1"
id="svg16"
id="svg8"
sodipodi:docname="led_green.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
@ -12,9 +11,9 @@
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs20" />
id="defs12" />
<sodipodi:namedview
id="namedview18"
id="namedview10"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
@ -26,36 +25,23 @@
inkscape:cx="3.9948454"
inkscape:cy="4"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg16" />
inkscape:current-layer="g6" />
<g
fill="none"
fill-rule="evenodd"
id="g14">
<g
id="g12">
<g
id="g10">
<g
id="g8">
<g
id="g6">
<path
fill="#9ECD1D"
d="M4 8C1.79 8 0 6.21 0 4c0-2.209 1.79-4 4-4 2.209 0 4 1.791 4 4 0 2.21-1.791 4-4 4z"
transform="translate(-32.000000, -327.000000) translate(0.000000, 200.000000) translate(0.000000, 90.000000) translate(32.000000, 37.000000)"
id="path2" />
<path
stroke="#FFF"
d="M4 .5c.966 0 1.841.392 2.475 1.025C7.108 2.16 7.5 3.034 7.5 4c0 .967-.392 1.842-1.025 2.475C5.84 7.108 4.966 7.5 4 7.5c-.967 0-1.842-.392-2.475-1.025C.892 5.842.5 4.967.5 4c0-.966.392-1.842 1.025-2.475C2.158.892 3.033.5 4 .5z"
transform="translate(-32.000000, -327.000000) translate(0.000000, 200.000000) translate(0.000000, 90.000000) translate(32.000000, 37.000000)"
id="path4" />
</g>
</g>
</g>
</g>
id="g6">
<path
d="m 3.9893579,7.0334297 a 3.018311,3.0309466 0 1 1 0,-6.06189295 3.018311,3.0309466 0 0 1 0,6.06189295 z"
fill="#9ecd1d"
id="path2"
style="stroke-width:0.756155" />
<path
d="M4 .5a3.49 3.49 0 0 1 2.475 1.025A3.489 3.489 0 0 1 7.5 4c0 .967-.392 1.842-1.025 2.475A3.49 3.49 0 0 1 4 7.5a3.489 3.489 0 0 1-2.475-1.025A3.49 3.49 0 0 1 .5 4a3.49 3.49 0 0 1 1.025-2.475A3.489 3.489 0 0 1 4 .5z"
stroke="#FFF"
id="path4" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -2,9 +2,8 @@
<svg
width="8"
height="8"
viewBox="0 0 8 8"
version="1.1"
id="svg16"
id="svg8"
sodipodi:docname="led_orange.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
@ -12,9 +11,9 @@
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs20" />
id="defs12" />
<sodipodi:namedview
id="namedview18"
id="namedview10"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
@ -26,36 +25,23 @@
inkscape:cx="3.9948454"
inkscape:cy="4"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg16" />
inkscape:current-layer="g6" />
<g
fill="none"
fill-rule="evenodd"
id="g14">
<g
id="g12">
<g
id="g10">
<g
id="g8">
<g
id="g6">
<path
fill="#EFAE00"
d="M4 8C1.79 8 0 6.21 0 4c0-2.209 1.79-4 4-4 2.209 0 4 1.791 4 4 0 2.21-1.791 4-4 4z"
transform="translate(-32.000000, -389.000000) translate(0.000000, 200.000000) translate(0.000000, 150.000000) translate(32.000000, 39.000000)"
id="path2" />
<path
stroke="#FFF"
d="M4 .5c.966 0 1.841.392 2.475 1.025C7.108 2.16 7.5 3.034 7.5 4c0 .967-.392 1.842-1.025 2.475C5.84 7.108 4.966 7.5 4 7.5c-.967 0-1.842-.392-2.475-1.025C.892 5.842.5 4.967.5 4c0-.966.392-1.842 1.025-2.475C2.158.892 3.033.5 4 .5z"
transform="translate(-32.000000, -389.000000) translate(0.000000, 200.000000) translate(0.000000, 150.000000) translate(32.000000, 39.000000)"
id="path4" />
</g>
</g>
</g>
</g>
id="g6">
<path
d="m 4.0027226,7.0147204 a 3.0312671,3.0095913 0 1 1 0,-6.01918243 3.0312671,3.0095913 0 0 1 0,6.01918243 z"
fill="#efae00"
id="path2"
style="stroke-width:0.755102" />
<path
d="M4 .5a3.49 3.49 0 0 1 2.475 1.025A3.489 3.489 0 0 1 7.5 4c0 .967-.392 1.842-1.025 2.475A3.49 3.49 0 0 1 4 7.5a3.489 3.489 0 0 1-2.475-1.025A3.49 3.49 0 0 1 .5 4a3.49 3.49 0 0 1 1.025-2.475A3.489 3.489 0 0 1 4 .5z"
stroke="#FFF"
id="path4" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -25,19 +25,20 @@
inkscape:cx="3.9948454"
inkscape:cy="4"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg8" />
inkscape:current-layer="g6" />
<g
fill="none"
fill-rule="evenodd"
id="g6">
<path
d="M4 8a4 4 0 1 1 0-8 4 4 0 0 1 0 8z"
fill="#DC4100"
id="path2" />
d="m 4.0111984,7.0605044 a 3.0433256,3.053726 0 1 1 0,-6.10745189 3.0433256,3.053726 0 0 1 0,6.10745189 z"
fill="#dc4100"
id="path2"
style="stroke-width:0.76213" />
<path
d="M4 .5a3.49 3.49 0 0 1 2.475 1.025A3.489 3.489 0 0 1 7.5 4c0 .967-.392 1.842-1.025 2.475A3.49 3.49 0 0 1 4 7.5a3.489 3.489 0 0 1-2.475-1.025A3.49 3.49 0 0 1 .5 4a3.49 3.49 0 0 1 1.025-2.475A3.489 3.489 0 0 1 4 .5z"
stroke="#FFF"

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -2,9 +2,8 @@
<svg
width="8"
height="8"
viewBox="0 0 8 8"
version="1.1"
id="svg16"
id="svg8"
sodipodi:docname="led_white.svg"
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
@ -12,9 +11,9 @@
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs20" />
id="defs12" />
<sodipodi:namedview
id="namedview18"
id="namedview10"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
@ -26,36 +25,23 @@
inkscape:cx="3.9948454"
inkscape:cy="4"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-height="1131"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg16" />
inkscape:current-layer="g6" />
<g
fill="none"
fill-rule="evenodd"
id="g14">
<g
id="g12">
<g
id="g10">
<g
id="g8">
<g
id="g6">
<path
fill="#B1B1B1"
d="M4 8C1.79 8 0 6.21 0 4c0-2.209 1.79-4 4-4 2.209 0 4 1.791 4 4 0 2.21-1.791 4-4 4z"
transform="translate(-32.000000, -446.000000) translate(0.000000, 200.000000) translate(0.000000, 210.000000) translate(32.000000, 36.000000)"
id="path2" />
<path
stroke="#FFF"
d="M4 .5c.966 0 1.841.392 2.475 1.025C7.108 2.16 7.5 3.034 7.5 4c0 .967-.392 1.842-1.025 2.475C5.84 7.108 4.966 7.5 4 7.5c-.967 0-1.842-.392-2.475-1.025C.892 5.842.5 4.967.5 4c0-.966.392-1.842 1.025-2.475C2.158.892 3.033.5 4 .5z"
transform="translate(-32.000000, -446.000000) translate(0.000000, 200.000000) translate(0.000000, 210.000000) translate(32.000000, 36.000000)"
id="path4" />
</g>
</g>
</g>
</g>
id="g6">
<path
d="m 3.9971091,7.0474901 a 3.0473303,3.0364062 0 1 1 0,-6.07281224 3.0473303,3.0364062 0 0 1 0,6.07281224 z"
fill="#b1b1b1"
id="path2"
style="stroke-width:0.760465" />
<path
d="M4 .5a3.49 3.49 0 0 1 2.475 1.025A3.489 3.489 0 0 1 7.5 4c0 .967-.392 1.842-1.025 2.475A3.49 3.49 0 0 1 4 7.5a3.489 3.489 0 0 1-2.475-1.025A3.49 3.49 0 0 1 .5 4a3.49 3.49 0 0 1 1.025-2.475A3.489 3.489 0 0 1 4 .5z"
stroke="#FFF"
id="path4" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -1610,6 +1610,24 @@ Klik her: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>Offline</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2312,6 +2330,119 @@ Klik her: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished">ANNULLER</translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2482,6 +2613,11 @@ Klik her: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<source>uiAdvanced</source>
<translation>Avanceret</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1610,6 +1610,24 @@ Klicken Sie hier: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>Offline</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2312,6 +2330,119 @@ Klicken Sie hier: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished">ABBRECHEN</translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2482,6 +2613,11 @@ Klicken Sie hier: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<source>uiAdvanced</source>
<translation>Erweitert</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -756,7 +756,7 @@ Server URL not configured.</translation>
<message>
<source>missingConferenceURI</source>
<extracomment>&apos;You need to set the conference URI in your account settings to create a conference based chat room.&apos; : Tooltip to warn the user that a setting is missing in its configuration.</extracomment>
<translation type="unfinished">You need to set the conference URI in your account settings to create a conference based chat room.</translation>
<translation>You need to set the conference URI in your account settings to create a conference based chat room.</translation>
</message>
</context>
<context>
@ -1610,6 +1610,24 @@ Click here: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>Offline</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation>Enable</translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation>Disable</translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation>Auto</translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2335,6 +2353,119 @@ Click here: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>Invalid conference URI</translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation>Tunnel Status</translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation>Domain</translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation>Username</translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation>SIP</translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation>Cancel</translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation>Set HTTP proxy</translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation>Host</translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation>Port</translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation>Username</translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation>Password</translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation>Apply</translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation>Mode</translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation>Dual mode</translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation>Server</translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation>Hostname</translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation>Port</translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation>Dual hostname URL</translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation>Dual port</translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation>Remote UDP mirror port</translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation>Delay</translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation>Add server</translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation>Apply</translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2505,6 +2636,11 @@ Click here: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<source>uiAdvanced</source>
<translation>Advanced</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation>Tunnel</translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1610,6 +1610,24 @@ Haga clic aquí: &lt;a href=&quot;%1&quot;&gt;%1 &lt;/a&gt;
<translation>Desconectado</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2312,6 +2330,119 @@ Haga clic aquí: &lt;a href=&quot;%1&quot;&gt;%1 &lt;/a&gt;
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished">CANCELAR</translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2482,6 +2613,11 @@ Haga clic aquí: &lt;a href=&quot;%1&quot;&gt;%1 &lt;/a&gt;
<source>uiAdvanced</source>
<translation>Avanzado</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1610,6 +1610,24 @@ Cliquez ici : &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>Hors-ligne</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2312,6 +2330,119 @@ Cliquez ici : &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>URI de conférence invalide</translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2482,6 +2613,11 @@ Cliquez ici : &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<source>uiAdvanced</source>
<translation>Avancés</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1600,6 +1600,24 @@ Kattintson ide: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>Kapcsolat nélküli</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2302,6 +2320,119 @@ Kattintson ide: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>Érvénytelen konferencia URI-cím</translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished">Mégse</translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2472,6 +2603,11 @@ Kattintson ide: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<source>uiAdvanced</source>
<translation>Haladó</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1610,6 +1610,24 @@ Clicca: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>Offline</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2312,6 +2330,119 @@ Clicca: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished">ANNULLA</translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2482,6 +2613,11 @@ Clicca: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<source>uiAdvanced</source>
<translation>Avanzate</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1600,6 +1600,24 @@
<translation></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2302,6 +2320,119 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2472,6 +2603,11 @@
<source>uiAdvanced</source>
<translation></translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1620,6 +1620,24 @@ Spustelėkite čia: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>Atsijungęs</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2322,6 +2340,119 @@ Spustelėkite čia: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished">ATSISAKYTI</translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2492,6 +2623,11 @@ Spustelėkite čia: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<source>uiAdvanced</source>
<translation>Išplėstiniai</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1610,6 +1610,24 @@ Clique aqui: &lt;a href=&quot;%1&quot;&gt;%1 &lt;/a&gt;
<translation>Offline</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2312,6 +2330,119 @@ Clique aqui: &lt;a href=&quot;%1&quot;&gt;%1 &lt;/a&gt;
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished">CANCELAR</translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2482,6 +2613,11 @@ Clique aqui: &lt;a href=&quot;%1&quot;&gt;%1 &lt;/a&gt;
<source>uiAdvanced</source>
<translation>Avançado</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1620,6 +1620,24 @@
<translation>Офлайн</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2322,6 +2340,119 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished">ОТМЕНА</translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2492,6 +2623,11 @@
<source>uiAdvanced</source>
<translation>Дополнительные</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1610,6 +1610,24 @@ Klicka här: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>Frånkopplad</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2312,6 +2330,119 @@ Klicka här: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished">AVBRYT</translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2482,6 +2613,11 @@ Klicka här: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<source>uiAdvanced</source>
<translation>Avancerat</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1600,6 +1600,24 @@ Buraya tıklayın: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation>Çevrim dışı</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2302,6 +2320,119 @@ Buraya tıklayın: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished">İPTAL</translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2472,6 +2603,11 @@ Buraya tıklayın: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;
<source>uiAdvanced</source>
<translation>Gelişmiş</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1620,6 +1620,24 @@
<translation>Не в мережі</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2322,6 +2340,119 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished">СКАСУВАТИ</translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2492,6 +2623,11 @@
<source>uiAdvanced</source>
<translation>Додаткове</translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -1600,6 +1600,24 @@
<translation>线</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>LinphoneEnums_TunnelModeEnable</source>
<extracomment>&apos;Enable&apos; : One word for button action to enable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeDisable</source>
<extracomment>&apos;Disable&apos; : One word for button action to disable tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>LinphoneEnums_TunnelModeAuto</source>
<extracomment>&apos;Auto&apos; : One word for button action to set the auto tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsAdvanced</name>
<message>
@ -2302,6 +2320,119 @@
<translation>URI</translation>
</message>
</context>
<context>
<name>SettingsTunnel</name>
<message>
<source>tunnelStatus</source>
<extracomment>&apos;Tunnel Status&apos; : Field title to introduce the status of the tunnel (activated or not)</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelDomain</source>
<extracomment>&apos;Domain&apos; : Field title of a textfield to set domain.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelUsername</source>
<extracomment>&apos;Username&apos; : Field title of a textfield to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelSIP</source>
<extracomment>&apos;SIP&apos; : Field title of a switch to set SIP mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>cancel</source>
<extracomment>&apos;Cancel&apos; : Button to cancel the action.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>setHTTPProxy</source>
<extracomment>&apos;Set HTTP proxy&apos; : Button to set the new proxy.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpHost</source>
<extracomment>&apos;Host&apos; : Placeholder to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPort</source>
<extracomment>&apos;Port&apos; : Placehoilder to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpUsername</source>
<extracomment>&apos;Username&apos; : Placeholder to set username.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpPassword</source>
<extracomment>&apos;Password&apos; : Placeholder to set password.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>proxyHttpApply</source>
<extracomment>&apos;Apply&apos; : Button to set proxy from changes.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverMode</source>
<extracomment>&apos;Mode&apos; : Field title on form to set tunnel mode.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualMode</source>
<extracomment>&apos;Dual mode&apos; : Field title on form to set dual mode of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverTitle</source>
<extracomment>&apos;Server&apos; : Title form to set a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverHostname</source>
<extracomment>&apos;Hostname&apos; : Field title on form to set hostname.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverPort</source>
<extracomment>&apos;Port&apos; : Field title on form to set port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualHostname</source>
<extracomment>&apos;Dual hostname URL&apos; : Field title on form to set the second hostname for dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDualPort</source>
<extracomment>&apos;Dual port&apos; : Field title on form to set the second port for the dual configuration.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverRemoteUDPMirrorPort</source>
<extracomment>&apos;Remote UDP mirror port&apos; : Field title on form to set the remote UDP mirror port.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>serverDelay</source>
<extracomment>&apos;Delay&apos; : Field title on form to set the delay of the tunnel.</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelAddServer</source>
<extracomment>&apos;Add server&apos; : Button for adding a server</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<source>tunnelApply</source>
<extracomment>&apos;Apply&apos; : Button to apply changes.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SettingsUi</name>
<message>
@ -2472,6 +2603,11 @@
<source>uiAdvanced</source>
<translation></translation>
</message>
<message>
<source>tunnelTab</source>
<extracomment>&apos;Tunnel&apos; : Tab title for tunnel section in settings.</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>SmartSearchBar</name>

View file

@ -534,6 +534,7 @@
<file>ui/views/App/Settings/SettingsNetwork.qml</file>
<file>ui/views/App/Settings/SettingsSipAccounts.js</file>
<file>ui/views/App/Settings/SettingsSipAccounts.qml</file>
<file>ui/views/App/Settings/SettingsTunnel.qml</file>
<file>ui/views/App/Settings/SettingsUi.js</file>
<file>ui/views/App/Settings/SettingsUi.qml</file>
<file>ui/views/App/Settings/SettingsVideo.js</file>

View file

@ -636,9 +636,12 @@ void App::registerTypes () {
registerUncreatableType<HistoryModel>("HistoryModel");
registerUncreatableType<LdapModel>("LdapModel");
registerUncreatableType<SearchResultModel>("SearchResultModel");
registerUncreatableType<SipAddressObserver>("SipAddressObserver");
registerUncreatableType<SipAddressObserver>("SipAddressObserver");
registerUncreatableType<VcardModel>("VcardModel");
registerUncreatableType<TimelineModel>("TimelineModel");
registerUncreatableType<TunnelModel>("TunnelModel");
registerUncreatableType<TunnelConfigModel>("TunnelConfigModel");
registerUncreatableType<TunnelConfigProxyModel>("TunnelConfigProxyModel");
registerUncreatableType<ParticipantModel>("ParticipantModel");
registerUncreatableType<ParticipantListModel>("ParticipantListModel");
registerUncreatableType<ParticipantDeviceModel>("ParticipantDeviceModel");

View file

@ -75,6 +75,10 @@
#include "timeline/TimelineModel.hpp"
#include "timeline/TimelineProxyModel.hpp"
#include "timeline/TimelineListModel.hpp"
#include "tunnel/TunnelModel.hpp"
#include "tunnel/TunnelConfigModel.hpp"
#include "tunnel/TunnelConfigListModel.hpp"
#include "tunnel/TunnelConfigProxyModel.hpp"
#include "url-handlers/UrlHandlers.hpp"
#include "other/colors/ColorModel.hpp"

View file

@ -115,7 +115,7 @@ public:
CallEntry,
NoticeEntry
};
Q_ENUM(EntryType);
Q_ENUM(EntryType)
//Q_PROPERTY(QString participants READ getParticipants NOTIFY participantsChanged);

View file

@ -30,12 +30,14 @@
#include "app/logger/Logger.hpp"
#include "app/paths/Paths.hpp"
#include "components/core/CoreManager.hpp"
#include "components/tunnel/TunnelModel.hpp"
#include "include/LinphoneApp/PluginNetworkHelper.hpp"
#include "utils/Utils.hpp"
#include "utils/Constants.hpp"
#include "utils/MediastreamerUtils.hpp"
#include "SettingsModel.hpp"
// =============================================================================
using namespace std;
@ -1144,6 +1146,16 @@ void SettingsModel::configureRlsUri (const shared_ptr<const linphone::ProxyConfi
mConfig->setString("sip", "rls_uri", "");
}
//------------------------------------------------------------------------------
bool SettingsModel::tunnelAvailable() const{
return CoreManager::getInstance()->getCore()->tunnelAvailable();
}
TunnelModel* SettingsModel::getTunnel() const{
return new TunnelModel(CoreManager::getInstance()->getCore()->getTunnel());
}
// =============================================================================
// UI.
// =============================================================================
@ -1343,6 +1355,13 @@ bool SettingsModel::getLogsEnabled (const shared_ptr<linphone::Config> &config)
}
// ---------------------------------------------------------------------------
bool SettingsModel::isDeveloperSettingsAvailable() const {
#ifdef DEBUG
return true;
#else
return false;
#endif
}
bool SettingsModel::getDeveloperSettingsEnabled () const {
#ifdef DEBUG
return !!mConfig->getInt(UiSection, "developer_settings", 0);

View file

@ -31,6 +31,7 @@
#include "components/contacts/ContactsImporterModel.hpp"
// =============================================================================
class TunnelModel;
class SettingsModel : public QObject {
Q_OBJECT
@ -430,6 +431,9 @@ public:
void configureRlsUri ();
void configureRlsUri (const std::shared_ptr<const linphone::ProxyConfig> &proxyConfig);
Q_INVOKABLE bool tunnelAvailable() const;
Q_INVOKABLE TunnelModel * getTunnel() const;
// UI. -----------------------------------------------------------------------
QFont getTextMessageFont() const;
@ -480,7 +484,7 @@ public:
static bool getLogsEnabled (const std::shared_ptr<linphone::Config> &config);
// ---------------------------------------------------------------------------
Q_INVOKABLE bool isDeveloperSettingsAvailable() const;
bool getDeveloperSettingsEnabled () const;
void setDeveloperSettingsEnabled (bool status);
@ -490,7 +494,6 @@ public:
bool getIsInCall() const;
bool isReadOnly(const std::string& section, const std::string& name) const;
std::string getEntryFullName(const std::string& section, const std::string& name) const; // Return the full name of the entry : 'name/readonly' or 'name'
@ -611,7 +614,7 @@ signals:
void dscpVideoChanged (int dscp);
void rlsUriEnabledChanged (bool status);
// UI. -----------------------------------------------------------------------
void textMessageFontChanged(const QFont& font);

View file

@ -0,0 +1,124 @@
/*
* 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 "TunnelConfigListModel.hpp"
#include "utils/Utils.hpp"
#include "components/Components.hpp"
// =============================================================================
TunnelConfigListModel::TunnelConfigListModel (std::shared_ptr<linphone::Tunnel> tunnel, QObject *parent) : QAbstractListModel(parent) {
std::list<std::shared_ptr<linphone::TunnelConfig>> tunnelConfigs = tunnel->getServers() ;
for(auto config : tunnelConfigs){
auto configModel = std::make_shared<TunnelConfigModel>(config);
mList << configModel;
}
if( mList.size() == 0) {
mList << std::make_shared<TunnelConfigModel>(linphone::Factory::get()->createTunnelConfig());
}
}
int TunnelConfigListModel::rowCount (const QModelIndex &index) const{
return mList.count();
}
int TunnelConfigListModel::count(){
return mList.count();
}
void TunnelConfigListModel::updateTunnelConfigs(std::shared_ptr<linphone::Tunnel> tunnel){
std::list<std::shared_ptr<linphone::TunnelConfig>> tunnelConfigs = tunnel->getServers() ;
beginResetModel();
mList.clear();
for(auto config : tunnelConfigs){
mList << std::make_shared<TunnelConfigModel>(config);
}
endResetModel();
emit layoutChanged();
}
bool TunnelConfigListModel::apply(std::shared_ptr<linphone::Tunnel> tunnel){
tunnel->cleanServers();
for(auto config : mList){
tunnel->addServer(config->getTunnelConfig());
}
updateTunnelConfigs(tunnel);
return true;
}
void TunnelConfigListModel::addTunnelConfig(){
int row = rowCount();
beginInsertRows(QModelIndex(),row,row);
mList << std::make_shared<TunnelConfigModel>(linphone::Factory::get()->createTunnelConfig());
endInsertRows();
}
void TunnelConfigListModel::removeTunnelConfig(std::shared_ptr<linphone::Tunnel> tunnel, TunnelConfigModel * model){
int row = 0;
while(row < mList.size() && mList[row].get() != model)
++row;
if( row < mList.size()) {
removeRow(row);
tunnel->removeServer(model->getTunnelConfig());
}
}
QHash<int, QByteArray> TunnelConfigListModel::roleNames () const {
QHash<int, QByteArray> roles;
roles[Qt::DisplayRole] = "$tunnelConfig";
return roles;
}
QVariant TunnelConfigListModel::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 TunnelConfigListModel::removeRow (int row, const QModelIndex &parent){
return removeRows(row, 1, parent);
}
bool TunnelConfigListModel::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);
endRemoveRows();
return true;
}

View file

@ -0,0 +1,62 @@
/*
* 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 TUNNEL_CONFIG_LIST_MODEL_H_
#define TUNNEL_CONFIG_LIST_MODEL_H_
#include <linphone++/linphone.hh>
// =============================================================================
#include <QObject>
#include <QDateTime>
#include <QString>
#include <QAbstractListModel>
class TunnelConfigModel;
class TunnelConfigListModel : public QAbstractListModel {
Q_OBJECT
public:
TunnelConfigListModel (std::shared_ptr<linphone::Tunnel> tunnel, QObject *parent = nullptr);
int rowCount (const QModelIndex &index = QModelIndex()) const override;
int count();
void updateTunnelConfigs(std::shared_ptr<linphone::Tunnel> tunnel);
bool apply(std::shared_ptr<linphone::Tunnel> tunnel);
void addTunnelConfig();
void removeTunnelConfig(std::shared_ptr<linphone::Tunnel> tunnel, TunnelConfigModel * model);
virtual QHash<int, QByteArray> roleNames () const override;
virtual QVariant data (const QModelIndex &index, int role = Qt::DisplayRole) const override;
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<TunnelConfigModel>> mList;
};
Q_DECLARE_METATYPE(std::shared_ptr<TunnelConfigListModel>)
#endif // TUNNEL_CONFIG_LIST_MODEL_H_

View file

@ -0,0 +1,96 @@
/*
* 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 "TunnelConfigModel.hpp"
#include "utils/Utils.hpp"
#include "components/Components.hpp"
// =============================================================================
using namespace std;
TunnelConfigModel::TunnelConfigModel (shared_ptr<linphone::TunnelConfig> tunnelConfig, QObject *parent) : QObject(parent) {
mTunnelConfig = tunnelConfig;
}
// -----------------------------------------------------------------------------
QString TunnelConfigModel::getHost() const{
return Utils::coreStringToAppString(mTunnelConfig->getHost());
}
QString TunnelConfigModel::getHost2() const{
return Utils::coreStringToAppString(mTunnelConfig->getHost2());
}
int TunnelConfigModel::getPort() const{
return mTunnelConfig->getPort();
}
int TunnelConfigModel::getPort2() const{
return mTunnelConfig->getPort2();
}
int TunnelConfigModel::getRemoteUdpMirrorPort() const{
return mTunnelConfig->getRemoteUdpMirrorPort();
}
int TunnelConfigModel::getDelay() const{
return mTunnelConfig->getDelay();
}
void TunnelConfigModel::setHost(const QString& host){
mTunnelConfig->setHost(Utils::appStringToCoreString(host));
emit hostChanged();
}
void TunnelConfigModel::setHost2(const QString& host){
mTunnelConfig->setHost2(Utils::appStringToCoreString(host));
emit host2Changed();
}
void TunnelConfigModel::setPort(const int& port){
mTunnelConfig->setPort(port);
emit portChanged();
}
void TunnelConfigModel::setPort2(const int& port){
mTunnelConfig->setPort2(port);
emit port2Changed();
}
void TunnelConfigModel::setRemoteUdpMirrorPort(const int& port){
mTunnelConfig->setRemoteUdpMirrorPort(port);
emit remoteUdpMirrorPortChanged();
}
void TunnelConfigModel::setDelay(const int& delay){
mTunnelConfig->setDelay(delay);
emit delayChanged();
}
std::shared_ptr<linphone::TunnelConfig> TunnelConfigModel::getTunnelConfig(){
return mTunnelConfig;
}

View file

@ -0,0 +1,75 @@
/*
* 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 TUNNEL_CONFIG_MODEL_H_
#define TUNNEL_CONFIG_MODEL_H_
#include <linphone++/linphone.hh>
// =============================================================================
#include <QObject>
#include <QString>
class TunnelConfigModel : public QObject {
Q_OBJECT
public:
TunnelConfigModel (std::shared_ptr<linphone::TunnelConfig> config, QObject *parent = nullptr);
Q_PROPERTY(QString host READ getHost WRITE setHost NOTIFY hostChanged)
Q_PROPERTY(QString host2 READ getHost2 WRITE setHost2 NOTIFY host2Changed)
Q_PROPERTY(int port READ getPort WRITE setPort NOTIFY portChanged)
Q_PROPERTY(int port2 READ getPort2 WRITE setPort2 NOTIFY port2Changed)
Q_PROPERTY(int remoteUdpMirrorPort READ getRemoteUdpMirrorPort WRITE setRemoteUdpMirrorPort NOTIFY remoteUdpMirrorPortChanged)
Q_PROPERTY(int delay READ getDelay WRITE setDelay NOTIFY delayChanged)
QString getHost() const;
QString getHost2() const;
int getPort() const;
int getPort2() const;
int getRemoteUdpMirrorPort() const;
int getDelay() const;
void setHost(const QString& host);
void setHost2(const QString& host);
void setPort(const int& port);
void setPort2(const int& port);
void setRemoteUdpMirrorPort(const int& port);
void setDelay(const int& delay);
std::shared_ptr<linphone::TunnelConfig> getTunnelConfig();
signals:
void hostChanged();
void host2Changed();
void portChanged();
void port2Changed();
void remoteUdpMirrorPortChanged();
void delayChanged();
private:
std::shared_ptr<linphone::TunnelConfig> mTunnelConfig;
};
Q_DECLARE_METATYPE(std::shared_ptr<TunnelConfigModel>)
#endif // TUNNEL_CONFIG_MODEL

View file

@ -0,0 +1,55 @@
/*
* 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 "TunnelConfigProxyModel.hpp"
#include "utils/Utils.hpp"
#include "components/Components.hpp"
#include "TunnelConfigListModel.hpp"
// =============================================================================
TunnelConfigProxyModel::TunnelConfigProxyModel (QObject *parent) : QSortFilterProxyModel(parent){
}
bool TunnelConfigProxyModel::filterAcceptsRow (
int sourceRow,
const QModelIndex &sourceParent
) const {
Q_UNUSED(sourceRow)
Q_UNUSED(sourceParent)
return true;
}
bool TunnelConfigProxyModel::lessThan (const QModelIndex &left, const QModelIndex &right) const {
const TunnelConfigModel *deviceA = sourceModel()->data(left).value<TunnelConfigModel *>();
const TunnelConfigModel *deviceB = sourceModel()->data(right).value<TunnelConfigModel *>();
return deviceA->getHost() > deviceB->getHost();
}
//---------------------------------------------------------------------------------
void TunnelConfigProxyModel::setTunnel(TunnelModel * tunnel){
setSourceModel(tunnel->getTunnelConfigs().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 TUNNEL_CONFIG_PROXY_MODEL_H_
#define TUNNEL_CONFIG_PROXY_MODEL_H_
#include <linphone++/linphone.hh>
// =============================================================================
#include <QObject>
#include <QDateTime>
#include <QString>
#include <QSortFilterProxyModel>
class TunnelConfigListModel;
class TunnelModel;
class TunnelConfigProxyModel : public QSortFilterProxyModel {
Q_OBJECT
public:
TunnelConfigProxyModel (QObject *parent = nullptr);
void setTunnel(TunnelModel * tunnel);
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<TunnelConfigListModel> mTunnelConfigs;
};
#endif

View file

@ -0,0 +1,128 @@
/*
* 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 "TunnelModel.hpp"
#include "utils/Utils.hpp"
#include "components/Components.hpp"
// =============================================================================
using namespace std;
TunnelModel::TunnelModel (shared_ptr<linphone::Tunnel> tunnel, QObject *parent) : QObject(parent) {
App::getInstance()->getEngine()->setObjectOwnership(this, QQmlEngine::CppOwnership);// Avoid QML to destroy it when passing by Q_INVOKABLE
mTunnel = tunnel;
if(mTunnel){
mTunnelConfigs = std::make_shared<TunnelConfigListModel>(mTunnel);
}
}
// -----------------------------------------------------------------------------
QString TunnelModel::getDomain() const{
return Utils::coreStringToAppString(mTunnel->getDomain());
}
QString TunnelModel::getUsername() const{
return Utils::coreStringToAppString(mTunnel->getUsername());
}
bool TunnelModel::getDualModeEnabled() const{
return mTunnel->dualModeEnabled();
}
LinphoneEnums::TunnelMode TunnelModel::getMode() const{
return LinphoneEnums::fromLinphone(mTunnel->getMode());
}
bool TunnelModel::getSipEnabled() const{
return mTunnel->sipEnabled();
}
// -----------------------------------------------------------------------------
void TunnelModel::setDomain(const QString& data){
mTunnel->setDomain(Utils::appStringToCoreString(data));
emit domainChanged();
}
void TunnelModel::setUsername(const QString& data){
mTunnel->setUsername(Utils::appStringToCoreString(data));
emit usernameChanged();
}
void TunnelModel::setDualModeEnabled(const bool& data){
mTunnel->enableDualMode(data);
emit dualModeEnabledChanged();
}
void TunnelModel::setMode(const LinphoneEnums::TunnelMode& data){
mTunnel->setMode(LinphoneEnums::toLinphone(data));
emit modeChanged();
}
void TunnelModel::setSipEnabled(const bool& data){
mTunnel->enableSip(data);
emit sipEnabledChanged();
}
// -----------------------------------------------------------------------------
std::shared_ptr<linphone::Tunnel> TunnelModel::getTunnel(){
return mTunnel;
}
TunnelConfigProxyModel * TunnelModel::getTunnelProxyConfigs(){
TunnelConfigProxyModel * configs = new TunnelConfigProxyModel();
configs->setTunnel(this);
return configs;
}
std::shared_ptr<TunnelConfigListModel> TunnelModel::getTunnelConfigs(){
return mTunnelConfigs;
}
bool TunnelModel::apply(){
return mTunnelConfigs->apply(mTunnel);
}
void TunnelModel::addTunnelConfig(){
mTunnelConfigs->addTunnelConfig();
}
void TunnelModel::removeTunnelConfig(TunnelConfigModel * model){
mTunnelConfigs->removeTunnelConfig(mTunnel, model);
}
bool TunnelModel::getActivated()const{
if(mTunnel)
return mTunnel->getActivated();
else
return false;
}
void TunnelModel::setHttpProxy(const QString& host, int port, const QString& username, const QString& passwd){
mTunnel->setHttpProxy(Utils::appStringToCoreString(host), port, Utils::appStringToCoreString(username), Utils::appStringToCoreString(passwd));
}

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/>.
*/
#ifndef TUNNEL_MODEL_H_
#define TUNNEL_MODEL_H_
#include "utils/LinphoneEnums.hpp"
#include <linphone++/linphone.hh>
// =============================================================================
#include <QObject>
#include <QDateTime>
#include <QString>
class TunnelConfigListModel;
class TunnelConfigProxyModel;
class TunnelConfigModel;
class TunnelModel : public QObject {
Q_OBJECT
public:
TunnelModel (std::shared_ptr<linphone::Tunnel> linphoneTunnel, QObject *parent = nullptr);
Q_PROPERTY(QString domain READ getDomain WRITE setDomain NOTIFY domainChanged)
Q_PROPERTY(QString username READ getUsername WRITE setUsername NOTIFY usernameChanged)
Q_PROPERTY(bool dualModeEnabled READ getDualModeEnabled WRITE setDualModeEnabled NOTIFY dualModeEnabledChanged)
Q_PROPERTY(LinphoneEnums::TunnelMode mode READ getMode WRITE setMode NOTIFY modeChanged)
Q_PROPERTY(bool sipEnabled READ getSipEnabled WRITE setSipEnabled NOTIFY sipEnabledChanged)
QString getDomain() const;
QString getUsername() const;
bool getDualModeEnabled() const;
LinphoneEnums::TunnelMode getMode() const;
bool getSipEnabled() const;
void setDomain(const QString& data);
void setUsername(const QString& data);
void setDualModeEnabled(const bool& data);
void setMode(const LinphoneEnums::TunnelMode& data);
void setSipEnabled(const bool& data);
std::shared_ptr<linphone::Tunnel> getTunnel();
Q_INVOKABLE TunnelConfigProxyModel * getTunnelProxyConfigs();
std::shared_ptr<TunnelConfigListModel> getTunnelConfigs();
Q_INVOKABLE bool apply();
Q_INVOKABLE void addTunnelConfig();
Q_INVOKABLE void removeTunnelConfig(TunnelConfigModel * model);
Q_INVOKABLE bool getActivated()const;
Q_INVOKABLE void setHttpProxy(const QString& host, int port, const QString& username, const QString& passwd);
signals:
void domainChanged();
void usernameChanged();
void sipAddressChanged();
void dualModeEnabledChanged();
void modeChanged();
void sipEnabledChanged();
private:
std::shared_ptr<linphone::Tunnel> mTunnel;
std::shared_ptr<TunnelConfigListModel> mTunnelConfigs;
};
Q_DECLARE_METATYPE(std::shared_ptr<TunnelModel>);
#endif // TUNNEL_MODEL_H_

View file

@ -65,4 +65,11 @@ linphone::Call::Status LinphoneEnums::toLinphone(const LinphoneEnums::CallStatus
}
LinphoneEnums::CallStatus LinphoneEnums::fromLinphone(const linphone::Call::Status& data){
return static_cast<LinphoneEnums::CallStatus>(data);
}
}
linphone::Tunnel::Mode LinphoneEnums::toLinphone(const LinphoneEnums::TunnelMode& data){
return static_cast<linphone::Tunnel::Mode>(data);
}
LinphoneEnums::TunnelMode LinphoneEnums::fromLinphone(const linphone::Tunnel::Mode& data){
return static_cast<LinphoneEnums::TunnelMode>(data);
}

View file

@ -106,13 +106,21 @@ enum CallStatus {
CallStatusEarlyAborted = int(linphone::Call::Status::EarlyAborted),
CallStatusAcceptedElsewhere = int(linphone::Call::Status::AcceptedElsewhere),
CallStatusDeclinedElsewhere = int(linphone::Call::Status::DeclinedElsewhere)
};
};
Q_ENUM_NS(CallStatus)
linphone::Call::Status toLinphone(const LinphoneEnums::CallStatus& capability);
LinphoneEnums::CallStatus fromLinphone(const linphone::Call::Status& capability);
enum TunnelMode {
TunnelModeDisable = int(linphone::Tunnel::Mode::Disable),
TunnelModeEnable= int(linphone::Tunnel::Mode::Enable),
TunnelModeAuto = int(linphone::Tunnel::Mode::Auto)
};
Q_ENUM_NS(TunnelMode)
linphone::Tunnel::Mode toLinphone(const LinphoneEnums::TunnelMode& mode);
LinphoneEnums::TunnelMode fromLinphone(const linphone::Tunnel::Mode& mode);
}
Q_DECLARE_METATYPE(LinphoneEnums::MediaEncryption)
@ -120,5 +128,6 @@ Q_DECLARE_METATYPE(LinphoneEnums::FriendCapability)
Q_DECLARE_METATYPE(LinphoneEnums::EventLogType)
Q_DECLARE_METATYPE(LinphoneEnums::ChatMessageState)
Q_DECLARE_METATYPE(LinphoneEnums::CallStatus)
Q_DECLARE_METATYPE(LinphoneEnums::TunnelMode)
#endif

View file

@ -97,6 +97,22 @@ QString Utils::getDisplayName(const QString& address){
return getDisplayName(interpretUrl(address));
}
QString Utils::toString(const LinphoneEnums::TunnelMode& mode){
switch(mode){
case LinphoneEnums::TunnelMode::TunnelModeEnable :
//: 'Enable' : One word for button action to enable tunnel mode.
return QObject::tr("LinphoneEnums_TunnelModeEnable");
case LinphoneEnums::TunnelMode::TunnelModeDisable :
//: 'Disable' : One word for button action to disable tunnel mode.
return QObject::tr("LinphoneEnums_TunnelModeDisable");
case LinphoneEnums::TunnelMode::TunnelModeAuto :
//: 'Auto' : One word for button action to set the auto tunnel mode.
return QObject::tr("LinphoneEnums_TunnelModeAuto");
default:
return "";
}
}
QImage Utils::getImage(const QString &pUri) {
QImage image(pUri);
if(image.isNull()){// Try to determine format from headers instead of using suffix

View file

@ -57,6 +57,7 @@ public:
Q_INVOKABLE static QString toTimeString(QDateTime date);
Q_INVOKABLE static QString toDateString(QDateTime date);
Q_INVOKABLE static QString getDisplayName(const QString& address);
Q_INVOKABLE static QString toString(const LinphoneEnums::TunnelMode& mode);
//----------------------------------------------------------------------------------
static inline QString coreStringToAppString (const std::string &str) {

View file

@ -11,6 +11,8 @@ Column {
property int orientation: Qt.Horizontal
property bool addButton : false
signal addButtonClicked;
property bool removeButton : false
signal removeButtonClicked;
// ---------------------------------------------------------------------------
@ -43,6 +45,14 @@ Column {
scale:0.8
onClicked:addButtonClicked()
}
ActionButton {
visible:removeButton
anchors.verticalCenter: parent.verticalCenter
icon: 'delete'
iconSize:38
scale:0.8
onClicked:removeButtonClicked()
}
}
Rectangle {

View file

@ -319,7 +319,7 @@ TabContainer {
Form {
title: qsTr('developerSettingsTitle')
visible: SettingsModel.developerSettingsEnabled
visible: SettingsModel.isDeveloperSettingsAvailable()
width: parent.width
FormLine {

View file

@ -0,0 +1,286 @@
import QtQuick 2.7
import QtQuick.Layouts 1.3
import Common 1.0
import Linphone 1.0
import LinphoneEnums 1.0
import Utils 1.0
import UtilsCpp 1.0
import App.Styles 1.0
// =============================================================================
TabContainer {
Column {
spacing: SettingsWindowStyle.forms.spacing
width: parent.width
Form{
width: view.width
FormLine {
FormGroup {
//: 'Tunnel Status' : Field title to introduce the status of the tunnel (activated or not)
label: qsTr('tunnelStatus')
RowLayout{
Icon{
Layout.preferredWidth: 20
icon: 'led_orange'
iconSize: 20
function update(){
if( view.tunnelModel.getActivated())
icon = 'led_green'
else
icon = 'led_red'
}
onVisibleChanged: if(visible){
icon = 'led_orange'
tunnelStatusTimer.start()
}else{
tunnelStatusTimer.stop()
icon = 'led_orange'
}
Timer{
id: tunnelStatusTimer
interval: 1000
onTriggered: parent.update()
repeat: true
}
}
Item{
Layout.fillWidth: true
}
}
}
}
//---------------- DEVELOPER SETTINGS FOR TUNNEL
FormLine {
visible: SettingsModel.developerSettingsEnabled
FormGroup {
//: 'Domain' : Field title of a textfield to set domain.
label: qsTr('tunnelDomain')
TextField {
text: view.tunnelModel.domain
onEditingFinished: view.tunnelModel.domain = text
}
}
}
FormLine {
visible: SettingsModel.developerSettingsEnabled
FormGroup {
//: 'Username' : Field title of a textfield to set username.
label: qsTr('tunnelUsername')
TextField {
text: view.tunnelModel.username
onEditingFinished: view.tunnelModel.username = text
}
}
}
FormLine {
visible: SettingsModel.developerSettingsEnabled
FormGroup {
//: 'SIP' : Field title of a switch to set SIP mode.
label: qsTr('tunnelSIP')
Switch {
checked: view.tunnelModel.sipEnabled
onClicked: view.tunnelModel.sipEnabled = !checked
}
}
TextButtonA{
//: 'Cancel' : Button to cancel the action.
text: (proxyHttpOptions.showProxyOptions? qsTr('cancel'):
//: 'Set HTTP proxy' : Button to set the new proxy.
qsTr('setHTTPProxy'))
onClicked:{
proxyHttpOptions.showProxyOptions = !proxyHttpOptions.showProxyOptions
}
Layout.preferredWidth: 100
}
}
FormLine{
visible: SettingsModel.developerSettingsEnabled
RowLayout{
id: proxyHttpOptions
property bool showProxyOptions : false
TextField {
id: proxyHttpHost
visible: parent.showProxyOptions
//: 'Host' : Placeholder to set hostname.
placeholderText: qsTr('proxyHttpHost')
}
NumericField{
id: proxyHttpPort
visible: parent.showProxyOptions
//: 'Port' : Placehoilder to set port.
placeholderText: qsTr('proxyHttpPort')
Layout.preferredWidth: 100
maxValue: 65535
}
TextField {
id: proxyHttpUsername
visible: parent.showProxyOptions
//: 'Username' : Placeholder to set username.
placeholderText: qsTr('proxyHttpUsername')
}
PasswordField {
id: proxyHttpPassword
visible: parent.showProxyOptions
//: 'Password' : Placeholder to set password.
placeholderText: qsTr('proxyHttpPassword')
onVisibleChanged: if(!visible) text=''
}
TextButtonB{
visible: parent.showProxyOptions
//: 'Apply' : Button to set proxy from changes.
text: qsTr('proxyHttpApply')
onClicked: {
view.tunnelModel.setHttpProxy(proxyHttpHost.text, proxyHttpPort.text, proxyHttpUsername.text, proxyHttpPassword.text)
parent.showProxyOptions = false
}
}
}
}
//---------------- USER SETTINGS FOR TUNNEL
FormLine {
FormGroup {
//: 'Mode' : Field title on form to set tunnel mode.
label: qsTr('serverMode')
ExclusiveButtons {
id: mode
property var modes: [ [LinphoneEnums.TunnelModeDisable],
[LinphoneEnums.TunnelModeEnable],
[LinphoneEnums.TunnelModeAuto]
]
texts: modes.map(value => UtilsCpp.toString(value[0]) )
onClicked: view.tunnelModel.mode = modes[button][0]
Binding {
property: 'selectedButton'
target: mode
value: {
var toFound = view.tunnelModel.mode
return Number(Utils.findIndex(mode.modes, function (value) {
return toFound == value[0]
}))
}
}
}
}
}
FormLine {
FormGroup {
//: 'Dual mode' : Field title on form to set dual mode of the tunnel.
label: qsTr('serverDualMode')
Switch {
checked: view.tunnelModel.dualModeEnabled
onClicked: view.tunnelModel.dualModeEnabled = !checked
}
}
}
}
//----------------------------------------------------------------------------------------------------
Repeater {
id: view
property TunnelModel tunnelModel : SettingsModel.getTunnel()
property TunnelConfigProxyModel tunnelConfigProxyModel: tunnelModel.getTunnelProxyConfigs()
width: parent.width
model: tunnelConfigProxyModel
delegate:
Form {
//: 'Server' : Title form to set a server
title: qsTr('serverTitle')+' : '+modelData.host+(view.tunnelModel.dualModeEnabled?' / '+modelData.host2:'')
width: view.width
removeButton: SettingsModel.developerSettingsEnabled
onRemoveButtonClicked: {view.tunnelModel.removeTunnelConfig(modelData)}
FormLine {
FormGroup {
//: 'Hostname' : Field title on form to set hostname.
label: qsTr('serverHostname')
TextField {
text: modelData.host
onEditingFinished: modelData.host = text
}
}
}
FormLine {
FormGroup {
//: 'Port' : Field title on form to set port.
label: qsTr('serverPort')
NumericField {
text: modelData.port
onEditingFinished: modelData.port = text
maxValue: 65535
}
}
}
FormLine {
visible: view.tunnelModel.dualModeEnabled
FormGroup {
//: 'Dual hostname URL' : Field title on form to set the second hostname for dual configuration.
label: qsTr('serverDualHostname')
TextField {
text: modelData.host2
onEditingFinished: modelData.host2 = text
}
}
}
FormLine {
visible: view.tunnelModel.dualModeEnabled
FormGroup {
//: 'Dual port' : Field title on form to set the second port for the dual configuration.
label: qsTr('serverDualPort')
NumericField {
text: modelData.port2
onEditingFinished: modelData.port2 = text
maxValue: 65535
}
}
}
//------------------------- DEVELOPER SETTINGS FOR SERVER
FormLine {
visible: SettingsModel.developerSettingsEnabled
FormGroup {
//: 'Remote UDP mirror port' : Field title on form to set the remote UDP mirror port.
label: qsTr('serverRemoteUDPMirrorPort')
NumericField {
text: modelData.remoteUdpMirrorPort
onEditingFinished: modelData.remoteUdpMirrorPort = text
maxValue: 65535
}
}
}
FormLine {
visible: SettingsModel.developerSettingsEnabled
FormGroup {
//: 'Delay' : Field title on form to set the delay of the tunnel.
label: qsTr('serverDelay')
NumericField {
text: modelData.delay
onEditingFinished: modelData.delay = text
}
}
}
}
}
RowLayout{
width: parent.width
TextButtonB {
visible: SettingsModel.developerSettingsEnabled
//: 'Add server' : Button for adding a server
text: qsTr('tunnelAddServer')
onClicked: {view.tunnelModel.addTunnelConfig()}
}
Item{
Layout.fillWidth: true
}
TextButtonB {
//: 'Apply' : Button to apply changes.
text: qsTr('tunnelApply')
onClicked: view.tunnelModel.apply()
}
}
}
}

View file

@ -12,152 +12,151 @@ import App.Styles 1.0
// =============================================================================
ApplicationWindow {
id: window
minimumHeight: SettingsWindowStyle.height
minimumWidth: SettingsWindowStyle.width
title: qsTr('settingsTitle')
onClosing: SettingsModel.settingsWindowClosing()
// ---------------------------------------------------------------------------
Shortcut {
sequence: StandardKey.Close
onActivated: window.hide()
}
// ---------------------------------------------------------------------------
Rectangle {
anchors.fill: parent
color: SettingsWindowStyle.color
}
ColumnLayout {
anchors.fill: parent
spacing: 0
// -------------------------------------------------------------------------
// Navigation bar.
// -------------------------------------------------------------------------
RowLayout {
Layout.fillWidth: true
spacing: 0
TabBar {
id: tabBar
onCurrentIndexChanged: SettingsModel.onSettingsTabChanged(currentIndex)
TabButton {
iconName: 'settings_sip_accounts'
text: qsTr('sipAccountsTab')
width: implicitWidth
//onClicked: SettingsModel.settingsButtonClicked("sip")
id: window
minimumHeight: SettingsWindowStyle.height
minimumWidth: SettingsWindowStyle.width
title: qsTr('settingsTitle')
onClosing: SettingsModel.settingsWindowClosing()
// ---------------------------------------------------------------------------
Shortcut {
sequence: StandardKey.Close
onActivated: window.hide()
}
// ---------------------------------------------------------------------------
Rectangle {
anchors.fill: parent
color: SettingsWindowStyle.color
}
ColumnLayout {
anchors.fill: parent
spacing: 0
// -------------------------------------------------------------------------
// Navigation bar.
// -------------------------------------------------------------------------
RowLayout {
Layout.fillWidth: true
spacing: 0
TabBar {
id: tabBar
onCurrentIndexChanged: SettingsModel.onSettingsTabChanged(currentIndex)
TabButton {
iconName: 'settings_sip_accounts'
text: qsTr('sipAccountsTab')
width: implicitWidth
}
TabButton {
iconName: 'settings_audio'
text: qsTr('audioTab')
width: implicitWidth
}
TabButton {
enabled: SettingsModel.videoSupported
iconName: 'settings_video'
text: qsTr('videoTab')
width: implicitWidth
}
TabButton {
iconName: 'settings_call'
text: qsTr('callsAndChatTab')
width: implicitWidth
}
TabButton {
enabled: SettingsModel.showNetworkSettings || SettingsModel.developerSettingsEnabled
iconName: 'settings_network'
text: qsTr('networkTab')
width: implicitWidth
}
TabButton {
enabled: SettingsModel.tunnelAvailable
iconName: 'settings_network'
//: 'Tunnel' : Tab title for tunnel section in settings.
text: qsTr('tunnelTab')
width: implicitWidth
}
TabButton {
iconName: 'settings_advanced'
text: qsTr('uiTab')
width: implicitWidth
}
TabButton {
iconName: 'settings_advanced'
text: qsTr('uiAdvanced')
width: implicitWidth
}
}
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: TabButtonStyle.text.height
color: TabButtonStyle.backgroundColor.normal
MouseArea {
anchors.fill: parent
onClicked: konami.forceActiveFocus()
cursorShape: Qt.ArrowCursor
Konami {
id: konami
onTriggered: SettingsModel.developerSettingsEnabled = true
}
}
}
}
// -------------------------------------------------------------------------
// Content.
// -------------------------------------------------------------------------
StackLayout {
Layout.fillHeight: true
Layout.fillWidth: true
currentIndex: tabBar.currentIndex
SettingsSipAccounts {}
SettingsAudio {}
SettingsVideo {}
SettingsCallsChat {}
SettingsNetwork {}
SettingsTunnel {}
SettingsUi {}
SettingsAdvanced {}
}
// -------------------------------------------------------------------------
// Buttons.
// -------------------------------------------------------------------------
TextButtonB {
Layout.alignment: Qt.AlignRight
Layout.topMargin: SettingsWindowStyle.validButton.topMargin
Layout.bottomMargin: SettingsWindowStyle.validButton.bottomMargin
Layout.rightMargin: SettingsWindowStyle.validButton.rightMargin
text: qsTr('validButton')
onClicked: window.close()
}
}
TabButton {
iconName: 'settings_audio'
text: qsTr('audioTab')
width: implicitWidth
//onClicked: SettingsModel.accessAudioSettings()
//onClicked: SettingsModel.settingsButtonClicked("audio")
}
TabButton {
enabled: SettingsModel.videoSupported
iconName: 'settings_video'
text: qsTr('videoTab')
width: implicitWidth
//onClicked: SettingsModel.accessVideoSettings()
//onClicked: SettingsModel.settingsButtonClicked("video")
}
TabButton {
iconName: 'settings_call'
text: qsTr('callsAndChatTab')
width: implicitWidth
//onClicked: SettingsModel.settingsButtonClicked("call")
}
TabButton {
enabled: SettingsModel.showNetworkSettings || SettingsModel.developerSettingsEnabled
iconName: 'settings_network'
text: qsTr('networkTab')
width: implicitWidth
//onClicked: SettingsModel.settingsButtonClicked("network")
}
TabButton {
iconName: 'settings_advanced'
text: qsTr('uiTab')
width: implicitWidth
//onClicked: SettingsModel.settingsButtonClicked("ui")
}
TabButton {
iconName: 'settings_advanced'
text: qsTr('uiAdvanced')
width: implicitWidth
//onClicked: SettingsModel.settingsButtonClicked("advanced")
}
}
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: TabButtonStyle.text.height
color: TabButtonStyle.backgroundColor.normal
MouseArea {
anchors.fill: parent
onClicked: konami.forceActiveFocus()
cursorShape: Qt.ArrowCursor
Konami {
id: konami
onTriggered: SettingsModel.developerSettingsEnabled = true
}
}
}
}
// -------------------------------------------------------------------------
// Content.
// -------------------------------------------------------------------------
StackLayout {
Layout.fillHeight: true
Layout.fillWidth: true
currentIndex: tabBar.currentIndex
SettingsSipAccounts {}
SettingsAudio {}
SettingsVideo {}
SettingsCallsChat {}
SettingsNetwork {}
SettingsUi {}
SettingsAdvanced {}
}
// -------------------------------------------------------------------------
// Buttons.
// -------------------------------------------------------------------------
TextButtonB {
Layout.alignment: Qt.AlignRight
Layout.topMargin: SettingsWindowStyle.validButton.topMargin
Layout.bottomMargin: SettingsWindowStyle.validButton.bottomMargin
Layout.rightMargin: SettingsWindowStyle.validButton.rightMargin
text: qsTr('validButton')
onClicked: window.close()
}
}
}