Skip to content

Commit

Permalink
refactor: extract url function to WebcamMixin
Browse files Browse the repository at this point in the history
Signed-off-by: Stefan Dej <meteyou@gmail.com>
  • Loading branch information
meteyou committed Jul 17, 2023
1 parent 6b5cda2 commit c615c49
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 39 deletions.
16 changes: 15 additions & 1 deletion src/components/mixins/webcam.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,23 @@ import {
mdiRaspberryPi,
mdiWebcam,
} from '@mdi/js'
import { Mixins } from 'vue-property-decorator'
import BaseMixin from '@/components/mixins/base'

@Component
export default class WebcamMixin extends Vue {
export default class WebcamMixin extends Mixins(BaseMixin) {
convertUrl(baseUrl: string, printerUrl: string | null) {
let url = new URL(baseUrl, this.hostUrl.toString())

// use printerURL if it exists
if (printerUrl !== null) url = new URL(baseUrl, printerUrl)

// overwrite url to baseUrl, if it is an absolute URL
if (baseUrl.startsWith('http') || baseUrl.startsWith('://')) url = new URL(baseUrl)

return decodeURIComponent(url.toString())
}

convertWebcamIcon(iconName: string): string {
switch (iconName) {
case 'mdiAlbum':
Expand Down
11 changes: 3 additions & 8 deletions src/components/webcams/Hlsstreamer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@ import { Component, Mixins, Prop } from 'vue-property-decorator'
import BaseMixin from '@/components/mixins/base'
import Hls from 'hls.js'
import { GuiWebcamStateWebcam } from '@/store/gui/webcams/types'
import WebcamMixin from '@/components/mixins/webcam'
@Component
export default class Hlsstreamer extends Mixins(BaseMixin) {
export default class Hlsstreamer extends Mixins(BaseMixin, WebcamMixin) {
private aspectRatio: null | number = null
private isVisible = true
private hls: Hls | null = null
Expand All @@ -30,13 +31,7 @@ export default class Hlsstreamer extends Mixins(BaseMixin) {
}
get url() {
if (!this.isVisible) return ''
const baseUrl = this.camSettings.stream_url
let url = new URL(baseUrl, this.printerUrl === null ? this.hostUrl.toString() : this.printerUrl)
if (baseUrl.startsWith('http') || baseUrl.startsWith('://')) url = new URL(baseUrl)
return decodeURIComponent(url.toString())
return this.convertUrl(this.camSettings?.stream_url, this.printerUrl)
}
get webcamStyle() {
Expand Down
11 changes: 3 additions & 8 deletions src/components/webcams/Ipstreamer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,17 @@
import { Component, Mixins, Prop } from 'vue-property-decorator'
import BaseMixin from '@/components/mixins/base'
import { GuiWebcamStateWebcam } from '@/store/gui/webcams/types'
import WebcamMixin from '@/components/mixins/webcam'
@Component
export default class Ipstreamer extends Mixins(BaseMixin) {
export default class Ipstreamer extends Mixins(BaseMixin, WebcamMixin) {
private isVisible = true
@Prop({ required: true }) readonly camSettings!: GuiWebcamStateWebcam
@Prop({ default: null }) readonly printerUrl!: string | null
get url() {
if (!this.isVisible) return ''
const baseUrl = this.camSettings.stream_url
let url = new URL(baseUrl, this.printerUrl === null ? this.hostUrl.toString() : this.printerUrl)
if (baseUrl.startsWith('http') || baseUrl.startsWith('://')) url = new URL(baseUrl)
return decodeURIComponent(url.toString())
return this.convertUrl(this.camSettings?.stream_url, this.printerUrl)
}
get webcamStyle() {
Expand Down
9 changes: 3 additions & 6 deletions src/components/webcams/JMuxerStream.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@ import JMuxer from 'jmuxer'
import { Component, Mixins, Prop, Watch } from 'vue-property-decorator'
import BaseMixin from '@/components/mixins/base'
import { GuiWebcamStateWebcam } from '@/store/gui/webcams/types'
import WebcamMixin from '@/components/mixins/webcam'
@Component
export default class JMuxerStreamer extends Mixins(BaseMixin) {
export default class JMuxerStreamer extends Mixins(BaseMixin, WebcamMixin) {
private jmuxer: JMuxer | null = null
private status: string = 'connecting'
Expand All @@ -29,11 +30,7 @@ export default class JMuxerStreamer extends Mixins(BaseMixin) {
}
get url() {
const baseUrl = this.camSettings.stream_url
let url = new URL(baseUrl, this.printerUrl === null ? this.hostUrl.toString() : this.printerUrl)
if (baseUrl.startsWith('http') || baseUrl.startsWith('://')) url = new URL(baseUrl)
return decodeURIComponent(url.toString())
return this.convertUrl(this.camSettings?.stream_url, this.printerUrl)
}
get webcamStyle() {
Expand Down
9 changes: 3 additions & 6 deletions src/components/webcams/Mjpegstreamer.vue
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,13 @@ import Component from 'vue-class-component'
import { Mixins, Prop, Watch } from 'vue-property-decorator'
import BaseMixin from '@/components/mixins/base'
import { GuiWebcamStateWebcam } from '@/store/gui/webcams/types'
import WebcamMixin from '@/components/mixins/webcam'
const CONTENT_LENGTH = 'content-length'
const TYPE_JPEG = 'image/jpeg'
@Component
export default class Mjpegstreamer extends Mixins(BaseMixin) {
export default class Mjpegstreamer extends Mixins(BaseMixin, WebcamMixin) {
private currentFPS = 0
private streamState = false
private aspectRatio: null | number = null
Expand All @@ -44,11 +45,7 @@ export default class Mjpegstreamer extends Mixins(BaseMixin) {
}
get url() {
const baseUrl = this.camSettings.stream_url
let url = new URL(baseUrl, this.printerUrl === null ? this.hostUrl.toString() : this.printerUrl)
if (baseUrl.startsWith('http') || baseUrl.startsWith('://')) url = new URL(baseUrl)
return decodeURIComponent(url.toString())
return this.convertUrl(this.camSettings?.stream_url, this.printerUrl)
}
get webcamStyle() {
Expand Down
9 changes: 3 additions & 6 deletions src/components/webcams/Uv4lMjpeg.vue
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@
import { Component, Mixins, Prop, Watch } from 'vue-property-decorator'
import BaseMixin from '@/components/mixins/base'
import { GuiWebcamStateWebcam } from '@/store/gui/webcams/types'
import WebcamMixin from '@/components/mixins/webcam'
@Component
export default class Uv4lMjpeg extends Mixins(BaseMixin) {
export default class Uv4lMjpeg extends Mixins(BaseMixin, WebcamMixin) {
private aspectRatio: null | number = null
private isVisible = false
private isVisibleViewport = false
Expand All @@ -29,11 +30,7 @@ export default class Uv4lMjpeg extends Mixins(BaseMixin) {
}
get url() {
const baseUrl = this.camSettings.stream_url
let url = new URL(baseUrl, this.printerUrl === null ? this.hostUrl.toString() : this.printerUrl)
if (baseUrl.startsWith('http') || baseUrl.startsWith('://')) url = new URL(baseUrl)
return decodeURIComponent(url.toString())
return this.convertUrl(this.camSettings?.stream_url, this.printerUrl)
}
get webcamStyle() {
Expand Down
11 changes: 7 additions & 4 deletions src/components/webcams/WebrtcMediaMTX.vue
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@
import { Component, Mixins, Prop, Ref, Watch } from 'vue-property-decorator'
import BaseMixin from '@/components/mixins/base'
import { GuiWebcamStateWebcam } from '@/store/gui/webcams/types'
import WebcamMixin from '@/components/mixins/webcam'
@Component
export default class WebrtcRTSPSimpleServer extends Mixins(BaseMixin) {
export default class WebrtcRTSPSimpleServer extends Mixins(BaseMixin, WebcamMixin) {
@Prop({ required: true }) readonly camSettings!: GuiWebcamStateWebcam
@Prop({ default: null }) readonly printerUrl!: string | null
@Ref() declare video: HTMLVideoElement
// webrtc player vars
Expand Down Expand Up @@ -54,11 +56,12 @@ export default class WebrtcRTSPSimpleServer extends Mixins(BaseMixin) {
}
get url() {
if (this.camSettings.stream_url.startsWith('http')) {
return this.camSettings.stream_url.replace('http', 'ws') + 'ws'
let baseUrl = this.camSettings.stream_url
if (baseUrl.startsWith('http')) {
baseUrl = baseUrl.replace('http', 'ws') + 'ws'
}
return this.camSettings.stream_url
return this.convertUrl(baseUrl, this.printerUrl)
}
// stop and restart the video if the url changes
Expand Down

0 comments on commit c615c49

Please sign in to comment.