Pārlūkot izejas kodu

feat(deeplinking): offer electron app for download, configurable (#14261)

Offer the default app, but make it configurable for own branded
desktop clients

Signed-off-by: Christoph Settgast <csett86_git@quicksands.de>
factor2
Christoph Settgast 1 gadu atpakaļ
vecāks
revīzija
8afdebca08
Revīzijas autora e-pasta adrese nav piesaistīta nevienam kontam

+ 6
- 0
config.js Parādīt failu

@@ -1201,6 +1201,12 @@ var config = {
1201 1201
     //     desktop: {
1202 1202
     //         appName: 'Jitsi Meet',
1203 1203
     //         appScheme: 'jitsi-meet,
1204
+    //         download: {
1205
+    //             linux:
1206
+    //               'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet-x86_64.AppImage',
1207
+    //             macos: 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet.dmg',
1208
+    //             windows: 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet.exe'
1209
+    //         },
1204 1210
     //         enabled: false
1205 1211
     //     },
1206 1212
     //     // If true, any checks to handoff to another application will be prevented

+ 2
- 1
lang/main-de.json Parādīt failu

@@ -219,11 +219,12 @@
219 219
         "joinInBrowser": "Im Browser",
220 220
         "launchMeetingLabel": "Wie möchten Sie an der Konferenz teilnehmen?",
221 221
         "launchWebButton": "Im Web öffnen",
222
+        "noDesktopApp": "Sie haben die App noch nicht installiert?",
222 223
         "noMobileApp": "Sie haben die App noch nicht installiert?",
223 224
         "termsAndConditions": "Indem Sie fortfahren, stimmen Sie unseren <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>Nutzungsbedingungen</a> zu.",
224 225
         "title": "Die Konferenz wird in {{app}} geöffnet …",
225 226
         "titleNew": "Konferenz starten ...",
226
-        "tryAgainButton": "Erneut mit der nativen Applikation versuchen",
227
+        "tryAgainButton": "Erneut versuchen",
227 228
         "unsupportedBrowser": "Sie verwenden einen Browser, der noch nicht unterstützt wird."
228 229
     },
229 230
     "defaultLink": "Bsp.: {{url}}",

+ 1
- 0
lang/main.json Parādīt failu

@@ -219,6 +219,7 @@
219 219
         "joinInBrowser": "Join in browser",
220 220
         "launchMeetingLabel": "How do you want to join this meeting?",
221 221
         "launchWebButton": "Launch in web",
222
+        "noDesktopApp": "You don’t have the app?",
222 223
         "noMobileApp": "You don’t have the app?",
223 224
         "termsAndConditions": "By continuing you agree to our <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>terms & conditions.</a>",
224 225
         "title": "Launching your meeting in {{app}}...",

+ 7
- 0
react/features/base/config/configType.ts Parādīt failu

@@ -141,7 +141,14 @@ export interface IDeeplinkingMobileConfig extends IDeeplinkingPlatformConfig {
141 141
     fDroidUrl?: string;
142 142
 }
143 143
 
144
+export interface IDesktopDownloadConfig {
145
+    linux?: string;
146
+    macos?: string;
147
+    windows?: string;
148
+}
149
+
144 150
 export interface IDeeplinkingDesktopConfig extends IDeeplinkingPlatformConfig {
151
+    download?: IDesktopDownloadConfig;
145 152
     enabled: boolean;
146 153
 }
147 154
 

+ 7
- 0
react/features/base/config/functions.web.ts Parādīt failu

@@ -102,6 +102,13 @@ export function _setDeeplinkingDefaults(deeplinking: IDeeplinkingConfig) {
102 102
 
103 103
     desktop.appName = desktop.appName || 'Jitsi Meet';
104 104
     desktop.appScheme = desktop.appScheme || 'jitsi-meet';
105
+    desktop.download = desktop.download || {};
106
+    desktop.download.windows = desktop.download.windows
107
+        || 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet.exe';
108
+    desktop.download.macos = desktop.download.macos
109
+        || 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet.dmg';
110
+    desktop.download.linux = desktop.download.linux
111
+        || 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet-x86_64.AppImage';
105 112
 
106 113
     ios.appName = ios.appName || 'Jitsi Meet';
107 114
     ios.appScheme = ios.appScheme || 'org.jitsi.meet';

+ 2
- 0
react/features/base/react/Platform.web.ts Parādīt failu

@@ -10,6 +10,8 @@ if (userAgent.match(/Android/i)) {
10 10
     OS = 'macos';
11 11
 } else if (userAgent.match(/Windows/i)) {
12 12
     OS = 'windows';
13
+} else if (userAgent.match(/Linux/i)) {
14
+    OS = 'linux';
13 15
 }
14 16
 
15 17
 /**

+ 19
- 0
react/features/deep-linking/components/DeepLinkingDesktopPage.web.tsx Parādīt failu

@@ -11,6 +11,7 @@ import { IDeeplinkingConfig } from '../../base/config/configType';
11 11
 import { getLegalUrls } from '../../base/config/functions.any';
12 12
 import { isSupportedBrowser } from '../../base/environment/environment';
13 13
 import { translate, translateToHTML } from '../../base/i18n/functions';
14
+import Platform from '../../base/react/Platform.web';
14 15
 import { withPixelLineHeight } from '../../base/styles/functions.web';
15 16
 import Button from '../../base/ui/components/web/Button';
16 17
 import { BUTTON_TYPES } from '../../base/ui/constants.any';
@@ -85,6 +86,14 @@ const DeepLinkingDesktopPage: React.FC<WithTranslation> = ({ t }) => {
85 86
     const deeplinkingCfg = useSelector((state: IReduxState) =>
86 87
         state['features/base/config']?.deeplinking || {} as IDeeplinkingConfig);
87 88
 
89
+    const generateDownloadURL = useCallback(() => {
90
+        const downloadCfg = deeplinkingCfg.desktop?.download;
91
+
92
+        if (downloadCfg) {
93
+            return downloadCfg[Platform.OS as keyof typeof downloadCfg];
94
+        }
95
+    }, [ deeplinkingCfg ]);
96
+
88 97
     const legalUrls = useSelector(getLegalUrls);
89 98
 
90 99
     const { hideLogo, desktop } = deeplinkingCfg;
@@ -134,6 +143,16 @@ const DeepLinkingDesktopPage: React.FC<WithTranslation> = ({ t }) => {
134 143
                             : t(`${_TNS}.descriptionWithoutWeb`, { app: desktop?.appName })
135 144
                     }
136 145
                 </div>
146
+                <div className = { styles.descriptionLabel }>
147
+                    {
148
+                        t(`${_TNS}.noDesktopApp`)
149
+                    } &nbsp;
150
+                    <a href = { generateDownloadURL() }>
151
+                        {
152
+                            t(`${_TNS}.downloadApp`)
153
+                        }
154
+                    </a>
155
+                </div>
137 156
                 <div className = { styles.buttonsContainer }>
138 157
                     <Button
139 158
                         label = { t(`${_TNS}.tryAgainButton`) }

Notiek ielāde…
Atcelt
Saglabāt