From f9b3f8df84f5e024a697b2e12a89bfc706de58ce Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Mon, 13 Feb 2017 22:55:38 +0100 Subject: Add all_following endpoint. --- src/services/api/api.service.js | 10 +++++++++- .../backend_interactor_service/backend_interactor_service.js | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'src/services') diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 87a7e2e5..de89f503 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -1,6 +1,7 @@ /* eslint-env browser */ const LOGIN_URL = '/api/account/verify_credentials.json' const FRIENDS_TIMELINE_URL = '/api/statuses/friends_timeline.json' +const ALL_FOLLOWING_URL = '/api/qvitter/allfollowing' const PUBLIC_TIMELINE_URL = '/api/statuses/public_timeline.json' const PUBLIC_AND_EXTERNAL_TIMELINE_URL = '/api/statuses/public_and_external_timeline.json' const FAVORITE_URL = '/api/favorites/create' @@ -54,6 +55,12 @@ const fetchFriends = ({credentials}) => { .then((data) => data.json()) } +const fetchAllFollowing = ({username, credentials}) => { + const url = `${ALL_FOLLOWING_URL}/${username}.json` + return fetch(url, { headers: authHeaders(credentials) }) + .then((data) => data.json().users) +} + const fetchMentions = ({username, sinceId = 0, credentials}) => { let url = `${MENTIONS_URL}?since_id=${sinceId}&screen_name=${username}` return fetch(url, { headers: authHeaders(credentials) }) @@ -169,7 +176,8 @@ const apiService = { retweet, postStatus, deleteStatus, - uploadMedia + uploadMedia, + fetchAllFollowing } export default apiService diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index 746776bf..eba6d779 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -17,6 +17,10 @@ const backendInteractorService = (credentials) => { return apiService.fetchFriends({credentials}) } + const fetchAllFollowing = ({username}) => { + return apiService.fetchAllFollowing({username, credentials}) + } + const followUser = (id) => { return apiService.followUser({credentials, id}) } @@ -32,6 +36,7 @@ const backendInteractorService = (credentials) => { fetchFriends, followUser, unfollowUser, + fetchAllFollowing, verifyCredentials: apiService.verifyCredentials } -- cgit v1.2.3-70-g09d2 From 832bd3cdd27d5ca10df6f67a51ac84c8cfa9c05d Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Thu, 16 Feb 2017 11:17:47 +0100 Subject: Fetch Public and TWKN timelines when viewed. --- .../public_and_external_timeline.js | 6 ++++++ src/components/public_timeline/public_timeline.js | 7 +++++++ src/modules/api.js | 23 +++++++++++++++++++++- src/modules/users.js | 7 +++---- .../backend_interactor_service.js | 8 +++++++- .../timeline_fetcher/timeline_fetcher.service.js | 3 +-- 6 files changed, 46 insertions(+), 8 deletions(-) (limited to 'src/services') diff --git a/src/components/public_and_external_timeline/public_and_external_timeline.js b/src/components/public_and_external_timeline/public_and_external_timeline.js index 138118ad..0db6efae 100644 --- a/src/components/public_and_external_timeline/public_and_external_timeline.js +++ b/src/components/public_and_external_timeline/public_and_external_timeline.js @@ -5,6 +5,12 @@ const PublicAndExternalTimeline = { }, computed: { timeline () { return this.$store.state.statuses.timelines.publicAndExternal } + }, + created () { + this.$store.dispatch('startFetching', 'publicAndExternal') + }, + destroyed () { + this.$store.dispatch('stopFetching', 'publicAndExternal') } } diff --git a/src/components/public_timeline/public_timeline.js b/src/components/public_timeline/public_timeline.js index cac422ec..9b866be8 100644 --- a/src/components/public_timeline/public_timeline.js +++ b/src/components/public_timeline/public_timeline.js @@ -5,7 +5,14 @@ const PublicTimeline = { }, computed: { timeline () { return this.$store.state.statuses.timelines.public } + }, + created () { + this.$store.dispatch('startFetching', 'public') + }, + destroyed () { + this.$store.dispatch('stopFetching', 'public') } + } export default PublicTimeline diff --git a/src/modules/api.js b/src/modules/api.js index 4000dc60..a32adfde 100644 --- a/src/modules/api.js +++ b/src/modules/api.js @@ -2,11 +2,32 @@ import backendInteractorService from '../services/backend_interactor_service/bac const api = { state: { - backendInteractor: backendInteractorService() + backendInteractor: backendInteractorService(), + fetchers: {} }, mutations: { setBackendInteractor (state, backendInteractor) { state.backendInteractor = backendInteractor + }, + addFetcher (state, {timeline, fetcher}) { + state.fetchers[timeline] = fetcher + }, + removeFetcher (state, {timeline}) { + delete state.fetchers[timeline] + } + }, + actions: { + startFetching (store, timeline) { + // Don't start fetching if we already are. + if (!store.state.fetchers[timeline]) { + const fetcher = store.state.backendInteractor.startFetching({timeline, store}) + store.commit('addFetcher', {timeline, fetcher}) + } + }, + stopFetching (store, timeline) { + const fetcher = store.state.fetchers[timeline] + window.clearInterval(fetcher) + store.commit('removeFetcher', {timeline}) } } } diff --git a/src/modules/users.js b/src/modules/users.js index 546015ba..dd65afe1 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -1,4 +1,3 @@ -import timelineFetcher from '../services/timeline_fetcher/timeline_fetcher.service.js' import backendInteractorService from '../services/backend_interactor_service/backend_interactor_service.js' import { compact, map, each, find, merge } from 'lodash' import { set } from 'vue' @@ -74,12 +73,12 @@ const users = { commit('setCurrentUser', user) commit('addNewUsers', [user]) - // Start getting fresh tweets. - timelineFetcher.startFetching({store, credentials: userCredentials}) - // Set our new backend interactor commit('setBackendInteractor', backendInteractorService(userCredentials)) + // Start getting fresh tweets. + store.dispatch('startFetching', 'friends') + // Fetch our friends store.rootState.api.backendInteractor.fetchFriends() .then((friends) => commit('addNewUsers', friends)) diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index eba6d779..d335bfb7 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -1,4 +1,5 @@ import apiService from '../api/api.service.js' +import timelineFetcherService from '../timeline_fetcher/timeline_fetcher.service.js' const backendInteractorService = (credentials) => { const fetchStatus = ({id}) => { @@ -29,6 +30,10 @@ const backendInteractorService = (credentials) => { return apiService.unfollowUser({credentials, id}) } + const startFetching = ({timeline, store}) => { + return timelineFetcherService.startFetching({timeline, store, credentials}) + } + const backendInteractorServiceInstance = { fetchStatus, fetchConversation, @@ -37,7 +42,8 @@ const backendInteractorService = (credentials) => { followUser, unfollowUser, fetchAllFollowing, - verifyCredentials: apiService.verifyCredentials + verifyCredentials: apiService.verifyCredentials, + startFetching } return backendInteractorServiceInstance diff --git a/src/services/timeline_fetcher/timeline_fetcher.service.js b/src/services/timeline_fetcher/timeline_fetcher.service.js index 0d4ffcad..37bbcd82 100644 --- a/src/services/timeline_fetcher/timeline_fetcher.service.js +++ b/src/services/timeline_fetcher/timeline_fetcher.service.js @@ -30,8 +30,7 @@ const fetchAndUpdate = ({store, credentials, timeline = 'friends', older = false const startFetching = ({ timeline = 'friends', credentials, store }) => { fetchAndUpdate({timeline, credentials, store, showImmediately: true}) const boundFetchAndUpdate = () => fetchAndUpdate({ timeline, credentials, store }) - - setInterval(boundFetchAndUpdate, 10000) + return setInterval(boundFetchAndUpdate, 10000) } const timelineFetcher = { fetchAndUpdate, -- cgit v1.2.3-70-g09d2 From 5481cf00a3c8cc2a8707155e7b7383f2ebff92b1 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Thu, 16 Feb 2017 15:58:49 +0100 Subject: Make user profiles visible inline. --- src/components/status/status.js | 10 ++++++++-- src/components/status/status.vue | 12 +++++++++++- src/services/style_setter/style_setter.js | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) (limited to 'src/services') diff --git a/src/components/status/status.js b/src/components/status/status.js index 3d1d50fb..030e22b5 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -3,6 +3,7 @@ import FavoriteButton from '../favorite_button/favorite_button.vue' import RetweetButton from '../retweet_button/retweet_button.vue' import DeleteButton from '../delete_button/delete_button.vue' import PostStatusForm from '../post_status_form/post_status_form.vue' +import UserCardContent from '../user_card_content/user_card_content.vue' const Status = { props: [ @@ -12,7 +13,8 @@ const Status = { data: () => ({ replying: false, expanded: false, - unmuted: false + unmuted: false, + userExpanded: false }), computed: { retweet () { return !!this.statusoid.retweeted_status }, @@ -34,7 +36,8 @@ const Status = { FavoriteButton, RetweetButton, DeleteButton, - PostStatusForm + PostStatusForm, + UserCardContent }, methods: { toggleReplying () { @@ -45,6 +48,9 @@ const Status = { }, toggleMute () { this.unmuted = !this.unmuted + }, + toggleUserExpanded () { + this.userExpanded = !this.userExpanded } } } diff --git a/src/components/status/status.vue b/src/components/status/status.vue index c215a00b..0c004936 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -18,10 +18,13 @@
+
+ +

{{status.user.name}} @@ -147,4 +150,11 @@ display: block; margin-left: auto; } + + .usercard { + border-style: solid; + border-width: 1px; + border-radius: 1em; + margin-bottom: 1em; + } diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 79b68b38..0a5be77d 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -34,7 +34,7 @@ const setStyle = (href) => { styleSheet.insertRule(`a { color: ${base08Color}`, 'index-max') styleSheet.insertRule(`body { color: ${base05Color}`, 'index-max') - styleSheet.insertRule(`.base05-border { color: ${base05Color}`, 'index-max') + styleSheet.insertRule(`.base05-border { border-color: ${base05Color}`, 'index-max') body.style.display = 'initial' } cssEl.addEventListener('load', setDynamic) -- cgit v1.2.3-70-g09d2