import {mapState} from 'vuex'
+import { WebSocketBridge } from 'django-channels'
+import axios from 'axios'
+import logger from '@/logging'
import Like from '@/components/activity/Like'
import Listen from '@/components/activity/Listen'
@@ -33,16 +39,51 @@ import Listen from '@/components/activity/Listen'
export default {
data () {
return {
+ isLoading: false,
components: {
'Like': Like,
'Listen': Listen
}
}
},
+ created () {
+ this.openWebsocket()
+ this.fetchEvents()
+ },
computed: {
...mapState({
events: state => state.instance.events
})
+ },
+ methods: {
+ fetchEvents () {
+ this.isLoading = true
+ let self = this
+ axios.get('/activity/').then((response) => {
+ self.isLoading = false
+ self.$store.commit('instance/events', response.data.results)
+ })
+ },
+ openWebsocket () {
+ if (!this.$store.state.auth.authenticated) {
+ return
+ }
+ let self = this
+ let token = this.$store.state.auth.token
+ // let token = 'test'
+ const bridge = new WebSocketBridge()
+ bridge.connect(
+ `/api/v1/instance/activity?token=${token}`,
+ null,
+ {reconnectInterval: 5000})
+ bridge.listen(function (event) {
+ logger.default.info('Received timeline update', event)
+ self.$store.commit('instance/event', event)
+ })
+ bridge.socket.addEventListener('open', function () {
+ console.log('Connected to WebSocket')
+ })
+ }
}
}