ホームのカスタマイズ情報を複数のデバイス間で同期できるように

This commit is contained in:
syuilo 2019-06-21 01:50:01 +09:00
parent bd83939993
commit 18184441f1
No known key found for this signature in database
GPG key ID: BDC4C49D06AB9D69
5 changed files with 75 additions and 3 deletions

View file

@ -282,6 +282,8 @@ common:
disable-via-mobile: "「モバイルからの投稿」フラグを付けない" disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する" load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する" load-remote-media: "リモートサーバーのメディアを表示する"
sync: "同期"
home-profile: "ホームのプロファイル"
search: "検索" search: "検索"
delete: "削除" delete: "削除"

View file

@ -131,6 +131,12 @@
</section> </section>
</section> </section>
<section>
<header>{{ $t('@._settings.sync') }}</header>
<ui-input v-if="$root.isMobile" v-model="homeProfile">{{ $t('@._settings.home-profile') }}</ui-input>
<ui-input v-else v-model="mobileHomeProfile">{{ $t('@._settings.home-profile') }}</ui-input>
</section>
<section> <section>
<header>{{ $t('@._settings.web-search-engine') }}</header> <header>{{ $t('@._settings.web-search-engine') }}</header>
<ui-input v-model="webSearchEngine">{{ $t('@._settings.web-search-engine') }}<template #desc>{{ $t('@._settings.web-search-engine-desc') }}</template></ui-input> <ui-input v-model="webSearchEngine">{{ $t('@._settings.web-search-engine') }}<template #desc>{{ $t('@._settings.web-search-engine-desc') }}</template></ui-input>
@ -500,6 +506,16 @@ export default Vue.extend({
get() { return this.$store.state.device.mobileNotificationPosition; }, get() { return this.$store.state.device.mobileNotificationPosition; },
set(value) { this.$store.commit('device/set', { key: 'mobileNotificationPosition', value }); } set(value) { this.$store.commit('device/set', { key: 'mobileNotificationPosition', value }); }
}, },
homeProfile: {
get() { return this.$store.state.device.homeProfile; },
set(value) { this.$store.commit('device/set', { key: 'homeProfile', value }); }
},
mobileHomeProfile: {
get() { return this.$store.state.device.mobileHomeProfile; },
set(value) { this.$store.commit('device/set', { key: 'mobileHomeProfile', value }); }
},
}, },
created() { created() {
this.$root.getMeta().then(meta => { this.$root.getMeta().then(meta => {

View file

@ -102,7 +102,11 @@ export default Vue.extend({
computed: { computed: {
home(): any[] { home(): any[] {
if (this.$store.getters.isSignedIn) { if (this.$store.getters.isSignedIn) {
return this.$store.state.device.home || []; if (this.$store.state.device.homeProfile) {
return this.$store.state.settings.homeProfiles[this.$store.state.device.homeProfile] || this.$store.state.device.home || [];
} else {
return this.$store.state.device.home || [];
}
} else { } else {
return [{ return [{
name: 'instance', name: 'instance',
@ -186,6 +190,14 @@ export default Vue.extend({
if (this.$store.state.device.home == null) { if (this.$store.state.device.home == null) {
this.$store.commit('device/setHome', _defaultDesktopHomeWidgets); this.$store.commit('device/setHome', _defaultDesktopHomeWidgets);
} }
if (this.$store.state.device.homeProfile) {
this.$watch('$store.state.device.home', () => {
this.$store.dispatch('settings/updateHomeProfile');
}, {
deep: true
});
}
} }
}, },
@ -245,7 +257,7 @@ export default Vue.extend({
focus() { focus() {
(this.$refs.content as any).focus(); (this.$refs.content as any).focus();
} },
} }
}); });
</script> </script>

View file

@ -72,7 +72,11 @@ export default Vue.extend({
computed: { computed: {
widgets(): any[] { widgets(): any[] {
return this.$store.state.device.mobileHome; if (this.$store.state.device.mobileHomeProfile) {
return this.$store.state.settings.mobileHomeProfiles[this.$store.state.device.mobileHomeProfile] || this.$store.state.device.mobileHome;
} else {
return this.$store.state.device.mobileHome;
}
} }
}, },
@ -98,6 +102,14 @@ export default Vue.extend({
id: 'g', data: {} id: 'g', data: {}
}]); }]);
} }
if (this.$store.state.device.mobileHomeProfile) {
this.$watch('$store.state.device.mobileHome', () => {
this.$store.dispatch('settings/updateMobileHomeProfile');
}, {
deep: true
});
}
}, },
mounted() { mounted() {

View file

@ -34,10 +34,14 @@ const defaultSettings = {
gamesReversiShowBoardLabels: false, gamesReversiShowBoardLabels: false,
gamesReversiUseAvatarStones: true, gamesReversiUseAvatarStones: true,
disableAnimatedMfm: false, disableAnimatedMfm: false,
homeProfiles: {},
mobileHomeProfiles: {},
}; };
const defaultDeviceSettings = { const defaultDeviceSettings = {
home: null, home: null,
homeProfile: null,
mobileHomeProfile: null,
mobileHome: [], mobileHome: [],
deck: null, deck: null,
deckMode: false, deckMode: false,
@ -361,6 +365,32 @@ export default (os: MiOS) => new Vuex.Store({
}); });
} }
}, },
updateHomeProfile(ctx) {
const profiles = ctx.state.homeProfiles;
profiles[ctx.rootState.device.homeProfile] = ctx.rootState.device.home;
ctx.commit('set', {
key: 'homeProfiles',
value: profiles
});
os.api('i/update-client-setting', {
name: 'homeProfiles',
value: profiles
});
},
updateMobileHomeProfile(ctx) {
const profiles = ctx.state.mobileHomeProfiles;
profiles[ctx.rootState.device.mobileHomeProfile] = ctx.rootState.device.mobileHome;
ctx.commit('set', {
key: 'mobileHomeProfiles',
value: profiles
});
os.api('i/update-client-setting', {
name: 'mobileHomeProfiles',
value: profiles
});
}
} }
} }
} }