This commit is contained in:
samcm 2017-11-13 15:21:27 +11:00
parent 0ab3424e3e
commit 9878ee7846
10 changed files with 204 additions and 218 deletions

View File

@ -3,31 +3,34 @@
<v-navigation-drawer app temporary v-model="drawer" disable-route-watcher>
<leftsidebar></leftsidebar>
</v-navigation-drawer>
<v-navigation-drawer app
permanent
clipped v-model="drawerRight" clipped right disable-route-watcher enable-resize-watcher>
<v-navigation-drawer
v-if="showRightDrawerButton"
style="padding: 0"
app
persistent
v-model="drawerRight" right enable-resize-watcher>
<drawerright></drawerright>
</v-navigation-drawer>
<v-toolbar app fixed>
<v-toolbar-side-icon @click.native.stop="drawer = !drawer"></v-toolbar-side-icon>
<v-toolbar-side-icon @click="drawer = !drawer"></v-toolbar-side-icon>
<v-toolbar-title class="white--text">PlexTogether</v-toolbar-title>
<v-spacer></v-spacer>
<v-toolbar-items>
<img class="ma-2 mr-3" style="height:70%;width:auto" v-bind:src="logo"/>
<img class="ma-2 mr-3" style="height:48px; width: 52px" v-bind:src="logo"/>
<v-btn primary dark raised v-if="shortUrl != null" v-clipboard="shortUrl" @success="sendNotification()">Invite</v-btn>
<v-btn small tag="a" class="hidden-sm-and-down" flat v-for="item in links" :key="item.title" :href="item.href" :target="item.target">{{ item.title }}</v-btn>
<v-toolbar-side-icon v-if="showRightDrawerButton" @click="drawerRight = !drawerRight"></v-toolbar-side-icon>
<v-toolbar-side-icon v-if="showRightDrawerButton" @click="toggleDrawerRight"></v-toolbar-side-icon>
</v-toolbar-items>
</v-toolbar>
<main v-bind:style="mainStyle">
<v-content style="padding:0; max-width:100%; margin: 0; margin-top: 64px" v-bind:style="containerStyle">
<v-container fluid class="ma-0 pa-0">
<v-content v-bind:style="containerStyle">
<v-container class="ma-0 pa-0" fluid>
<router-view></router-view>
<v-snackbar
bottom
:timeout="4000"
v-model="snackbar"
> <div style="text-align:center;width:100%">{{snackbarMsg}}</div>
> <div style="text-align:center;width:100%">{{ snackbarMsg }}</div>
</v-snackbar>
</v-container>
</v-content>
@ -90,6 +93,10 @@
methods: {
sendNotification() {
window.EventBus.$emit('notification', 'Copied to clipboard')
},
toggleDrawerRight() {
console.log('Opening right drawer', !this.drawerRight)
this.drawerRight = !this.drawerRight
}
},
mounted () {

View File

@ -35,7 +35,9 @@
.label {
color: rgba(240, 245, 255, 0.55);
}
.application--dark .a {
color: white !important;
}
.select {
color: rgba(240, 245, 255, 0.55)
}

View File

@ -81,10 +81,15 @@ main {
.application--dark {
background: #151924;
}
.application--dark .navigation-drawer .list {
background: #151924;
}
.application--dark .a {
color: white !important;
}
.menu__content {
background: #272c38;
}

View File

@ -43,7 +43,7 @@
</span>
</h4>
<v-layout v-if="recentlyAdded" class="row" row wrap justify-space-between>
<v-flex xs4 md3 xl1 lg1 class="pb-3" v-for="content in subsetRecentlyAdded(10)" :key="content.key">
<v-flex xs4 md3 xl1 lg1 class="pb-3 pa-1" v-for="content in subsetRecentlyAdded(10)" :key="content.key">
<plexthumb :content="content" :server="server" type="thumb" fullTitle locked @contentSet="setContent(content)"></plexthumb>
</v-flex>
</v-layout>

View File

@ -16,56 +16,52 @@
></videoplayer>
<v-dialog v-model="dialog">
<v-card>
<v-card-row>
<v-card-title>Playback Settings </v-card-title>
</v-card-row>
<v-card-row>
<v-card-text>
<v-select
v-model="chosenQuality"
:items="qualitiesSelect"
item-text="text"
item-value="id"
persistent-hint
label="Quality"
hint="Select a different quality"
></v-select>
<v-select
v-model="chosenAudioTrackIndex"
:select-text="'Default'"
label="Audio track"
item-text="text"
item-value="id"
persistent-hint
hint="Select a different audio track"
:items="audioTrackSelect"
></v-select>
<v-select
persistent-hint
label="Subtitles"
item-text="text"
item-value="id"
hint="Select a different subtitle track"
v-model="chosenSubtitleIndex"
:select-text="'Default'"
:items="subtitleTrackSelect"
></v-select>
<v-select
v-if="mediaIndexSelect.length > 1"
persistent-hint
item-text="text"
item-value="id"
hint="Select a different version of the content you're playing"
v-model="chosenMediaIndex"
label="Version"
:items="mediaIndexSelect"
></v-select>
</v-card-text>
</v-card-row>
<v-card-row actions>
<v-card-title>Playback Settings </v-card-title>
<v-card-text>
<v-select
v-model="chosenQuality"
:items="qualitiesSelect"
item-text="text"
item-value="id"
persistent-hint
label="Quality"
hint="Select a different quality"
></v-select>
<v-select
v-model="chosenAudioTrackIndex"
:select-text="'Default'"
label="Audio track"
item-text="text"
item-value="id"
persistent-hint
hint="Select a different audio track"
:items="audioTrackSelect"
></v-select>
<v-select
persistent-hint
label="Subtitles"
item-text="text"
item-value="id"
hint="Select a different subtitle track"
v-model="chosenSubtitleIndex"
:select-text="'Default'"
:items="subtitleTrackSelect"
></v-select>
<v-select
v-if="mediaIndexSelect.length > 1"
persistent-hint
item-text="text"
item-value="id"
hint="Select a different version of the content you're playing"
v-model="chosenMediaIndex"
label="Version"
:items="mediaIndexSelect"
></v-select>
</v-card-text>
<v-card-actions>
<v-btn class="blue--text darken-1" flat @click.native="dialog = false">Close</v-btn>
</v-card-row>
</v-card-actions>
</v-card>
</v-dialog>
<v-layout v-if="playingMetadata && chosenServer" row justify-center>

View File

@ -19,11 +19,13 @@
</div>
<v-divider></v-divider>
<div style="text-align:center" class="pt-4">
<h6 style="text-align:initial">Syncing Method</h6>
<v-radio label="Clean Seek" class="pa-0 ma-0" v-model="syncmode" value="cleanseek"></v-radio>
<v-radio label="Skip Ahead" class="pa-0 ma-0" v-model="syncmode" value="skipahead"
persistent-hint
hint="Sets the syncing method used when we need to get back in line with the host."></v-radio>
<h6 style="text-align:initial">Syncing Method</h6>
<v-radio-group v-model="syncmode">
<v-radio label="Clean Seek" class="pa-0 ma-0" value="cleanseek"></v-radio>
<v-radio label="Skip Ahead" class="pa-0 ma-0" value="skipahead"
persistent-hint
hint="Sets the syncing method used when we need to get back in line with the host."></v-radio>
</v-radio-group>
</div>
</div>
</template>

View File

@ -49,10 +49,10 @@
<label>Device</label><span style="opacity:0.8"> {{ testClient.device }}</span>
</div>
<div>
<label>Running</label><span style="opacity:0.8" v-tooltip="testClient.productVersion"> {{ testClient.product }} </span>
<label>Running</label><span style="opacity:0.8"> {{ testClient.product }} </span>
</div>
<div class="pb-2">
<label>Platform</label><span style="opacity:0.8" v-tooltip="testClient.platformVersion"> {{ testClient.platform }} </span>
<label>Platform</label><span style="opacity:0.8"> {{ testClient.platform }} </span>
</div>
<div v-if="testClientWaiting" class="center spinner-orange">
<div style="width:100%;text-align:center">

View File

@ -2,7 +2,7 @@
<v-layout wrap row ckass="pt-4">
<v-flex xs12 md8 offset-md2>
<v-card style="background: rgba(0,0,0,0.3)">
<h1 class="white--text center-text pa-1">Sign in to Plex.tv</h1>
<h1 class="white--text center-text pa-4">Sign in to Plex.tv</h1>
<div v-if="!pin">
<v-layout wrap row style="position:relative">
<v-flex xs12 md4 offset-md4>

View File

@ -1,100 +1,69 @@
<template>
<div>
<v-list class="pa-0">
<v-list-item>
<v-list-tile avatar tag="div" v-if="validDevices">
<v-list-tile-avatar>
<img :src="plex.user.thumb" />
</v-list-tile-avatar>
<v-list-tile-content>
<v-list-tile-title>{{ plex.user.username }}</v-list-tile-title>
</v-list-tile-content>
<v-list-tile-action>
<v-btn icon dark>
<v-icon>chevron_left</v-icon>
</v-btn>
</v-list-tile-action>
</v-list-tile>
</v-list-item>
</v-list>
<v-list class="pt-0" dense>
<v-divider></v-divider>
<v-subheader >Preferences</v-subheader>
<v-list-item @click.stop="ptsettingstoggle = !ptsettingstoggle">
<v-list-tile>
<v-list-tile-action>
<v-icon >settings</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>PlexTogether Settings</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list-item>
<v-list-item v-if="plex && plex.gotDevices" @click.stop="plexsettingstoggle = !plexsettingstoggle">
<v-list-tile>
<v-list-tile-action>
<v-icon >settings</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>Plex Settings</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list-item>
<v-subheader v-if="plex && plex.gotDevices" >Account</v-subheader>
<v-list-item v-if="plex && plex.gotDevices">
<v-list-tile :router="true" to="/signout">
<v-list-tile-action>
<v-icon >cancel</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title v-if="plex != null" v-text="'Signout'"></v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list-item>
<v-subheader >About</v-subheader>
<v-list-item>
<v-list-tile>
<v-list-tile-action>
<v-icon >info</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>PlexTogether v{{appVersion}}</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list-item>
</v-list>
<v-list class="pa-1" dense>
<template>
<v-list-tile v-if="plex && plex.user">
<v-list-tile-avatar>
<img class="pa-1" :src="plex.user.thumb" />
</v-list-tile-avatar>
<v-list-tile-content>
<v-list-tile-title style="font-weight: bold">{{ plex.user.username }}</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
<v-divider></v-divider>
<v-subheader>Preferences</v-subheader>
<v-list-tile @click.stop="ptsettingstoggle = !ptsettingstoggle">
<v-list-tile-action>
<v-icon color="white">settings</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>PlexTogether Settings</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
<v-list-tile v-if="plex && plex.gotDevices" @click.stop="plexsettingstoggle = !plexsettingstoggle">
<v-list-tile-action>
<v-icon color="white">settings</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>Plex Settings</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
<v-subheader v-if="plex && plex.gotDevices" >Account</v-subheader>
<v-list-tile :router="true" to="/signout">
<v-list-tile-action>
<v-icon color="white">cancel</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>Sign out</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
<v-subheader >About</v-subheader>
<v-list-tile>
<v-list-tile-action>
<v-icon color="white">info</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>PlexTogether v{{appVersion}}</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</template>
</v-list>
<v-dialog v-model="ptsettingstoggle">
<v-card class="grey darken-4">
<v-card-row>
<v-card-title>PlexTogether Settings</v-card-title>
</v-card-row>
<v-card class="grey darken-4 pa-3">
<h6 class="soft-text">PlexTogether Settings</h6>
<v-divider></v-divider>
<v-card-row>
<v-card-text>
<ptsettings></ptsettings>
</v-card-text>
</v-card-row>
<ptsettings></ptsettings>
</v-card>
</v-dialog>
<v-dialog v-model="plexsettingstoggle">
<v-card class="grey darken-4">
<v-card-row>
<v-card-title>Plex Settings</v-card-title>
</v-card-row>
<v-card class="grey darken-4 pa-3">
<h6 class="soft-text">Plex Settings</h6>
<v-divider></v-divider>
<v-card-row>
<v-card-text>
<plexsettings v-if="validPlex && plex.gotDevices"></plexsettings>
</v-card-text>
</v-card-row>
<plexsettings v-if="validPlex && plex.gotDevices"></plexsettings>
</v-card>
</v-dialog>
</div>
</template>
<script>

View File

@ -1,74 +1,79 @@
<template>
<v-container class="pa-0" fill-height>
<v-layout column v-if="ptRoom" class="pl-2 pr-2" style="">
<v-flex xs12 style="height: 50vh">
<h6 style="text-align:center" class="mb-0 pb-0 pt-3"> Room {{ ptRoom }}</h6>
<v-subheader>Users ({{ ptUsers.length }})</v-subheader>
<v-list dense style="overflow-y:scroll">
<div v-for="user in ptUsers" v-bind:key="user.username" style="position:relative;height:7em">
<v-list-item style="height:4em" class="mb-0 pb-0">
<v-list-tile avatar class="pb-0 mb-0" tag="div" >
<v-list-tile-avatar>
<img v-bind:src="user.avatarUrl"/>
</v-list-tile-avatar>
<v-list-tile-content>
<v-list-tile-title> {{ user.username }}</v-list-tile-title>
<v-list-tile-sub-title style="opacity:0.6;color:white;font-size:70%"><v-icon style="font-size:90%">{{playerState(user)}}</v-icon> - {{getTitle(user)}}</v-list-tile-sub-title>
</v-list-tile-content>
<v-list-tile-action v-if="isHost(user)">
<v-icon v-if="isHost(user)" style="color: #E5A00D">star</v-icon>
</v-list-tile-action>
</v-list-tile>
</v-list-item>
<div class="pl-2 pr-2 pt-2 mt-0 pb-0 mb-0">
<span style="float: left;font-size:70%" class="ptuser-time pl-2">{{ getCurrent(user) }}</span>
<span style="float: right;font-size:70%" class="ptuser-maxTime pr-2">{{ getMax(user) }}</span>
<v-progress-linear class="pt-content-progress " :height="2" :value="percent(user)"></v-progress-linear>
</div>
<v-divider class="mt-0 pt-0" style="height:2px; color:white"></v-divider>
</div>
</v-list>
</v-flex>
<v-flex xs12 style="overflow-y: auto; max-height: 50vh">
<v-container class="ma-0 pa-0" fill-height>
<v-layout column>
<v-flex xs12>
<v-divider></v-divider>
<v-subheader>Messages</v-subheader>
<v-list id="chatbox" :style="chatboxStyle" style="overflow-y:scroll; max-height: 34vh">
<v-list-item style="min-height:50px" v-bind:id="getMsgId(msg)" v-for="msg in messages" v-bind:key="msg.msg + msg.time">
<v-list-tile style="height:initial; position:relative" tag="div">
<v-container class="pa-1 pb-0" fill-height>
<v-layout>
<v-flex xs12>
<v-layout v-if="ptRoom" column>
<v-flex xs12 style="height: 50vh">
<h6 style="text-align:center" class="mb-0 pb-0 pt-3"> Room {{ ptRoom }}</h6>
<v-subheader>Users ({{ ptUsers.length }})</v-subheader>
<v-list dense style="overflow-y:scroll">
<div v-for="user in ptUsers" v-bind:key="user.username" style="position:relative;height:7em">
<v-list-tile avatar style="height:4em" class="pb-0 mb-0" tag="div" >
<v-list-tile-avatar>
<img v-bind:src="msg.user.thumb || msg.user.avatarUrl" style="position:absolute;top:0; width: 36px; height: 36px"/>
<img v-bind:src="user.avatarUrl"/>
</v-list-tile-avatar>
<v-list-tile-content>
<v-list-tile-title style="color:white; position:relative;">
<span style="opacity:1;font-size:80%; float:left"> {{ msg.user.username }}</span>
<span style="opacity:0.6;font-size:60%; float:right"> {{ msg.time}}</span>
</v-list-tile-title>
<v-list-tile-sub-title style="opacity:0.8;color:white;font-size:70%;"> {{ msg.msg }}</v-list-tile-sub-title>
</v-list-tile-content>
<v-list-tile-title> {{ user.username }}</v-list-tile-title>
<v-list-tile-sub-title style="opacity:0.6;color:white;font-size:70%"><v-icon style="font-size:90%">{{playerState(user)}}</v-icon> - {{getTitle(user)}}</v-list-tile-sub-title>
</v-list-tile-content>
<v-list-tile-action v-if="isHost(user)">
<v-icon v-if="isHost(user)" style="color: #E5A00D">star</v-icon>
</v-list-tile-action>
</v-list-tile>
</v-list-item>
</v-list>
</v-flex>
<v-flex xs12 style="position:relative" class="pt-2">
<div style="position:absolute; bottom:0; width: 100%" class="ma-0 pa-0">
<v-text-field
prepend-icon="message"
:label="'Send a message to ' + '#'+ptRoom"
autoGrow
v-on:keyup.enter.native="sendMessage()"
v-model="messageToBeSent"
></v-text-field>
<v-btn block v-on:click.native="handleDisconnect()" class="ma-0 mt-1" primary>Leave room </v-btn>
<div class="pl-2 pr-2 pt-2 mt-0 pb-0 mb-0">
<span style="float: left;font-size:70%" class="ptuser-time pl-2">{{ getCurrent(user) }}</span>
<span style="float: right;font-size:70%" class="ptuser-maxTime pr-2">{{ getMax(user) }}</span>
<v-progress-linear class="pt-content-progress " :height="2" :value="percent(user)"></v-progress-linear>
</div>
<v-divider class="mt-0 pt-0" style="height:2px; color:white"></v-divider>
</div>
</v-flex>
</v-layout>
</v-container>
</v-flex>
</v-layout>
</v-list>
</v-flex>
<v-flex xs12 style="height: 50vh max-height: 50vh; position: relative">
<v-container class="ma-0 pa-0">
<v-layout row wrap>
<v-flex xs12>
<v-divider></v-divider>
<v-subheader>Messages</v-subheader>
<v-list id="chatbox" :style="chatboxStyle" style="overflow-y:scroll; max-height: 35vh; height: 35vh">
<v-list-tile style="min-height:50px; height:initial; position:relative" v-bind:id="getMsgId(msg)" v-for="msg in messages" v-bind:key="msg.msg + msg.time" tag="div">
<v-list-tile-avatar>
<img v-bind:src="msg.user.thumb || msg.user.avatarUrl" style="position:absolute;top:0; width: 36px; height: 36px"/>
</v-list-tile-avatar>
<v-list-tile-content>
<v-list-tile-title style="color:white; position:relative;">
<span style="opacity:1;font-size:80%; float:left"> {{ msg.user.username }}</span>
<span style="opacity:0.6;font-size:60%; float:right"> {{ msg.time}}</span>
</v-list-tile-title>
<v-list-tile-sub-title style="opacity:0.8;color:white;font-size:70%;"> {{ msg.msg }}</v-list-tile-sub-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
</v-flex>
<v-flex xs12 style="position:relative" class="pt-2">
<div style="bottom:0; width: 100%" class="ma-0 pa-0">
<v-text-field
prepend-icon="message"
:label="'Send a message to ' + '#'+ptRoom"
autoGrow
v-on:keyup.enter.native="sendMessage()"
v-model="messageToBeSent"
></v-text-field>
</div>
</v-flex>
<v-flex xs12 class="pt-2">
<div style="position: absolute; bottom:0; width: 100%" class="ma-0 pa-0">
<v-btn block v-on:click.native="handleDisconnect()" class="ma-0 mt-1" primary>Leave room </v-btn>
</div>
</v-flex>
</v-layout>
</v-container>
</v-flex>
</v-layout>
</v-flex>
</v-layout>
</v-container>
</template>