@live-change/video-call-frontend 0.8.37 → 0.8.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/front/src/App.vue CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  <script setup>
11
11
  import 'primevue/resources/themes/saga-green/theme.css'
12
- import "@fortawesome/fontawesome-free/css/all.min.css"
12
+ import 'boxicons/css/boxicons.min.css'
13
13
 
14
14
  import { useLocale } from '@live-change/vue3-components'
15
15
  const locale = useLocale()
@@ -26,8 +26,8 @@
26
26
 
27
27
  <script setup>
28
28
 
29
- import { VolumeIndicator } from "@live-change/peer-connection"
30
- import { UserIdentification } from "@live-change/identification-frontend"
29
+ import { VolumeIndicator } from "@live-change/peer-connection-frontend"
30
+ import { UserIdentification } from "@live-change/user-frontend"
31
31
 
32
32
  import { defineProps, defineEmits, toRefs, ref, computed } from 'vue'
33
33
 
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <LimitedAccess v-slot="{ authorized }" objectType="videoCall_Room" :object="room" :requiredRoles="requiredRoles">
3
- <div v-if="!joined" class="surface-card shadow-1 border-round p-3 flex flex-row flex-wrap align-items-center">
3
+ <div v-if="state === 'welcome'"
4
+ class="surface-card shadow-1 border-round p-3 flex flex-row flex-wrap align-items-center">
4
5
  <div class="w-30rem m-1" style="max-width: 80vw">
5
6
  <DeviceSelect v-model="selectedDevices" />
6
7
  </div>
@@ -12,6 +13,12 @@
12
13
  <template v-else>
13
14
  <p>JOINED</p>
14
15
  </template>
16
+ <!-- <p>selected devices: {{ selectedDevices }}</p>
17
+ <p>local media streams: {{ localMediaStreams }}</p>
18
+ <p>local tracks: {{ localTracks }}</p>-->
19
+ <div class="surface-card shadow-1 border-round mt-3 p-3">
20
+ <pre>{{ JSON.stringify(peer?.summary, null, " ") }}</pre>
21
+ </div>
15
22
  </LimitedAccess>
16
23
  </template>
17
24
 
@@ -19,7 +26,16 @@
19
26
  import { LimitedAccess } from "@live-change/access-control-frontend"
20
27
  import { DeviceSelect } from '@live-change/peer-connection-frontend'
21
28
 
22
- import { defineProps, toRefs, ref, computed } from 'vue'
29
+ import {
30
+ ref, unref, computed, watch, watchEffect, toRefs,
31
+ onMounted, onUnmounted, defineProps, getCurrentInstance
32
+ } from 'vue'
33
+ import { path, live, actions, api as useApi } from '@live-change/vue3-ssr'
34
+ const api = useApi()
35
+
36
+ const appContext = (typeof window != 'undefined') && getCurrentInstance()?.appContext
37
+
38
+ import { createPeer, mediaStreamsTracks } from "@live-change/peer-connection-frontend"
23
39
 
24
40
  const props = defineProps({
25
41
  room: {
@@ -31,17 +47,59 @@
31
47
  const { room } = toRefs(props)
32
48
  const requiredRoles = ['listener', 'speaker']
33
49
 
34
- const joined = ref(false)
50
+ const state = ref('welcome')
35
51
 
36
52
  const selectedDevices = ref({ })
53
+ const displayMedia = ref()
37
54
 
38
55
  const canJoin = computed(() => !!selectedDevices.value.userMedia)
39
56
 
40
57
  function join() {
41
58
  console.log('Joining room', room.value, selectedDevices.value)
42
- joined.value = true
59
+ state.value = 'joining'
60
+ state.value = 'joined'
61
+ }
62
+
63
+ const localMediaStreams = computed(() =>
64
+ ( selectedDevices.value?.media ? [selectedDevices.value.media] : [])
65
+ .concat(displayMedia.value ? [displayMedia.value] : [])
66
+ )
67
+ const localTracks = mediaStreamsTracks(localMediaStreams)
68
+ watch(() => ([selectedDevices.value.audioMuted, selectedDevices.value.media]), ([muted, media]) => {
69
+ if(!media) return
70
+ for(const track of media.getAudioTracks()) for(const localTrack of localTracks.value)
71
+ if(localTrack.track === track) localTrack.enabled = !muted
72
+ }, { immediate: true })
73
+ watch(() => ([selectedDevices.value.videoMuted, selectedDevices.value.media]), ([muted, media]) => {
74
+ if(!media) return
75
+ for(const track of media.getVideoTracks()) for(const localTrack of localTracks.value)
76
+ if(localTrack.track === track) localTrack.enabled = !muted
77
+ }, { immediate: true })
78
+
79
+ const peer = ref()
80
+
81
+ watchEffect(() => {
82
+ if(!peer.value) return
83
+ peer.value.online = state.value === 'joined'
84
+ }, { immediate: true })
85
+
86
+ let createPeerPromise = null
87
+ async function initPeer() {
88
+ if(createPeerPromise) return createPeerPromise
89
+ createPeerPromise = createPeer({
90
+ channelType: 'videoCall_Room',
91
+ channel: room.value,
92
+ onUnmountedCb: onUnmounted, appContext,
93
+ localTracks,
94
+ })
95
+ peer.value = await createPeerPromise
96
+ createPeerPromise = null
43
97
  }
44
98
 
99
+ onMounted(async () => {
100
+ await initPeer()
101
+ })
102
+
45
103
 
46
104
  </script>
47
105
 
package/index.js CHANGED
@@ -1,2 +1,10 @@
1
+ import PeerVideo from './front/src/room/PeerVideo.vue'
2
+ import Room from './front/src/room/Room.vue'
3
+ import VideoWall from './front/src/room/VideoWall.vue'
4
+
5
+ export { PeerVideo, Room, VideoWall }
6
+
7
+ import { videoCallRoutes } from './front/src/router.js'
8
+ export { videoCallRoutes }
1
9
 
2
10
  export { }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@live-change/video-call-frontend",
3
- "version": "0.8.37",
3
+ "version": "0.8.39",
4
4
  "scripts": {
5
5
  "memDev": "node server/start.js memDev --enableSessions --initScript ./init.js --dbAccess",
6
6
  "localDevInit": "rm tmp.db; node server/start.js localDev --enableSessions --initScript ./init.js",
@@ -35,41 +35,41 @@
35
35
  "@codemirror/language": "6.10.1",
36
36
  "@dotenvx/dotenvx": "0.27.0",
37
37
  "@fortawesome/fontawesome-free": "^6.5.2",
38
- "@live-change/access-control-frontend": "^0.8.37",
39
- "@live-change/access-control-service": "^0.8.37",
40
- "@live-change/backup-service": "^0.8.37",
41
- "@live-change/blog-frontend": "^0.8.37",
42
- "@live-change/blog-service": "^0.8.37",
43
- "@live-change/cli": "^0.8.37",
44
- "@live-change/content-frontend": "^0.8.37",
45
- "@live-change/content-service": "^0.8.37",
46
- "@live-change/dao": "^0.8.37",
47
- "@live-change/dao-vue3": "^0.8.37",
48
- "@live-change/dao-websocket": "^0.8.37",
49
- "@live-change/db-client": "^0.8.37",
50
- "@live-change/email-service": "^0.8.37",
51
- "@live-change/framework": "^0.8.37",
52
- "@live-change/frontend-auto-form": "^0.8.37",
53
- "@live-change/frontend-base": "^0.8.37",
54
- "@live-change/geoip-service": "^0.8.37",
55
- "@live-change/image-frontend": "^0.8.37",
56
- "@live-change/locale-settings-service": "^0.8.37",
57
- "@live-change/password-authentication-service": "^0.8.37",
58
- "@live-change/peer-connection-service": "^0.8.37",
59
- "@live-change/prosemirror-service": "^0.8.37",
60
- "@live-change/secret-code-service": "^0.8.37",
61
- "@live-change/secret-link-service": "^0.8.37",
62
- "@live-change/session-service": "^0.8.37",
63
- "@live-change/task-service": "^0.8.37",
64
- "@live-change/upload-frontend": "^0.8.37",
65
- "@live-change/url-frontend": "^0.8.37",
66
- "@live-change/url-service": "^0.8.37",
67
- "@live-change/user-frontend": "^0.8.37",
68
- "@live-change/user-identification-service": "^0.8.37",
69
- "@live-change/user-service": "^0.8.37",
70
- "@live-change/vote-service": "^0.8.37",
71
- "@live-change/vue3-components": "^0.8.37",
72
- "@live-change/vue3-ssr": "^0.8.37",
38
+ "@live-change/access-control-frontend": "^0.8.39",
39
+ "@live-change/access-control-service": "^0.8.39",
40
+ "@live-change/backup-service": "^0.8.39",
41
+ "@live-change/blog-frontend": "^0.8.39",
42
+ "@live-change/blog-service": "^0.8.39",
43
+ "@live-change/cli": "^0.8.39",
44
+ "@live-change/content-frontend": "^0.8.39",
45
+ "@live-change/content-service": "^0.8.39",
46
+ "@live-change/dao": "^0.8.39",
47
+ "@live-change/dao-vue3": "^0.8.39",
48
+ "@live-change/dao-websocket": "^0.8.39",
49
+ "@live-change/db-client": "^0.8.39",
50
+ "@live-change/email-service": "^0.8.39",
51
+ "@live-change/framework": "^0.8.39",
52
+ "@live-change/frontend-auto-form": "^0.8.39",
53
+ "@live-change/frontend-base": "^0.8.39",
54
+ "@live-change/geoip-service": "^0.8.39",
55
+ "@live-change/image-frontend": "^0.8.39",
56
+ "@live-change/locale-settings-service": "^0.8.39",
57
+ "@live-change/password-authentication-service": "^0.8.39",
58
+ "@live-change/peer-connection-service": "^0.8.39",
59
+ "@live-change/prosemirror-service": "^0.8.39",
60
+ "@live-change/secret-code-service": "^0.8.39",
61
+ "@live-change/secret-link-service": "^0.8.39",
62
+ "@live-change/session-service": "^0.8.39",
63
+ "@live-change/task-service": "^0.8.39",
64
+ "@live-change/upload-frontend": "^0.8.39",
65
+ "@live-change/url-frontend": "^0.8.39",
66
+ "@live-change/url-service": "^0.8.39",
67
+ "@live-change/user-frontend": "^0.8.39",
68
+ "@live-change/user-identification-service": "^0.8.39",
69
+ "@live-change/user-service": "^0.8.39",
70
+ "@live-change/vote-service": "^0.8.39",
71
+ "@live-change/vue3-components": "^0.8.39",
72
+ "@live-change/vue3-ssr": "^0.8.39",
73
73
  "@vueuse/core": "^10.11.0",
74
74
  "boxicons": "^2.1.4",
75
75
  "codeceptjs-assert": "^0.0.5",
@@ -93,7 +93,7 @@
93
93
  "vue3-scroll-border": "0.1.6"
94
94
  },
95
95
  "devDependencies": {
96
- "@live-change/codeceptjs-helper": "^0.8.37",
96
+ "@live-change/codeceptjs-helper": "^0.8.39",
97
97
  "codeceptjs": "^3.5.12",
98
98
  "generate-password": "1.7.1",
99
99
  "playwright": "^1.41.2",
@@ -104,5 +104,5 @@
104
104
  "author": "Michał Łaszczewski <michal@laszczewski.pl>",
105
105
  "license": "ISC",
106
106
  "description": "",
107
- "gitHead": "8b97a83258a3eccd08534d0376015781c4eefdec"
107
+ "gitHead": "153d139ad9785b0b2fcbfbf2c35a999a499f2168"
108
108
  }
@@ -1,3 +1,6 @@
1
+ import dotenv from 'dotenv'
2
+ dotenv.config()
3
+
1
4
  import App from "@live-change/framework"
2
5
  const app = App.app()
3
6
 
@@ -38,7 +38,8 @@ export {
38
38
  googleAuthentication,
39
39
  localeSettings,
40
40
  online,
41
- accessControl
41
+ accessControl,
42
+ peerConnection,
42
43
  }
43
44
 
44
45
  import videoCall from "@live-change/video-call-service"