diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index d9223b1c4..bdf8c24ce 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -282,6 +282,8 @@ common:
disable-via-mobile: "「モバイルからの投稿」フラグを付けない"
load-raw-images: "添付された画像を高画質で表示する"
load-remote-media: "リモートサーバーのメディアを表示する"
+ sync: "同期"
+ home-profile: "ホームのプロファイル"
search: "検索"
delete: "削除"
diff --git a/src/client/app/common/views/components/settings/settings.vue b/src/client/app/common/views/components/settings/settings.vue
index 0cbc40da5..1c02bdee8 100644
--- a/src/client/app/common/views/components/settings/settings.vue
+++ b/src/client/app/common/views/components/settings/settings.vue
@@ -131,6 +131,12 @@
+
+ {{ $t('@._settings.sync') }}
+ {{ $t('@._settings.home-profile') }}
+ {{ $t('@._settings.home-profile') }}
+
+
{{ $t('@._settings.web-search-engine') }}
{{ $t('@._settings.web-search-engine') }}{{ $t('@._settings.web-search-engine-desc') }}
@@ -500,6 +506,16 @@ export default Vue.extend({
get() { return this.$store.state.device.mobileNotificationPosition; },
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() {
this.$root.getMeta().then(meta => {
diff --git a/src/client/app/desktop/views/home/home.vue b/src/client/app/desktop/views/home/home.vue
index d4677df84..49ac4c240 100644
--- a/src/client/app/desktop/views/home/home.vue
+++ b/src/client/app/desktop/views/home/home.vue
@@ -102,7 +102,11 @@ export default Vue.extend({
computed: {
home(): any[] {
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 {
return [{
name: 'instance',
@@ -186,6 +190,14 @@ export default Vue.extend({
if (this.$store.state.device.home == null) {
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() {
(this.$refs.content as any).focus();
- }
+ },
}
});
diff --git a/src/client/app/mobile/views/pages/widgets.vue b/src/client/app/mobile/views/pages/widgets.vue
index 7130fddb3..7f0ef678d 100644
--- a/src/client/app/mobile/views/pages/widgets.vue
+++ b/src/client/app/mobile/views/pages/widgets.vue
@@ -72,7 +72,11 @@ export default Vue.extend({
computed: {
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: {}
}]);
}
+
+ if (this.$store.state.device.mobileHomeProfile) {
+ this.$watch('$store.state.device.mobileHome', () => {
+ this.$store.dispatch('settings/updateMobileHomeProfile');
+ }, {
+ deep: true
+ });
+ }
},
mounted() {
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 6f545eb09..7b56628b3 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -34,10 +34,14 @@ const defaultSettings = {
gamesReversiShowBoardLabels: false,
gamesReversiUseAvatarStones: true,
disableAnimatedMfm: false,
+ homeProfiles: {},
+ mobileHomeProfiles: {},
};
const defaultDeviceSettings = {
home: null,
+ homeProfile: null,
+ mobileHomeProfile: null,
mobileHome: [],
deck: null,
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
+ });
+ }
}
}
}