forked from go/golangs_learn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.1 KiB
147 lines
3.1 KiB
import Vue from 'vue'
|
|
import Vuex from 'vuex'
|
|
import { fSize } from './lib/file'
|
|
import { prettyTime } from './lib/time'
|
|
|
|
Vue.use(Vuex)
|
|
|
|
const store = new Vuex.Store({
|
|
state: {
|
|
config: {
|
|
outDir: '',
|
|
target: '',
|
|
prefix: '',
|
|
suffix: '',
|
|
sizes: [],
|
|
jpegOpt: { quality: 0 },
|
|
pngOpt: { quality: 0 },
|
|
webpOpt: { lossless: false, quality: 0 }
|
|
},
|
|
stats: {
|
|
byteCount: 0,
|
|
imageCount: 0,
|
|
timeCount: 0
|
|
},
|
|
session: {
|
|
count: 0,
|
|
savings: 0,
|
|
time: 0
|
|
}
|
|
},
|
|
getters: {
|
|
config(state) {
|
|
return state.config
|
|
},
|
|
|
|
session(state) {
|
|
return {
|
|
count: state.session.count,
|
|
hasSavings: state.session.savings > 0,
|
|
savings: fSize(state.session.savings),
|
|
time: prettyTime(state.session.time)
|
|
}
|
|
},
|
|
|
|
stats(state) {
|
|
return {
|
|
byteCount: fSize(state.stats.byteCount),
|
|
imageCount: state.stats.imageCount,
|
|
timeCount: prettyTime(state.stats.timeCount)
|
|
}
|
|
}
|
|
},
|
|
actions: {
|
|
addSize(context) {
|
|
context.commit('addSize')
|
|
},
|
|
removeSize(context, index) {
|
|
context.commit('removeSize', index)
|
|
},
|
|
setSizeStrategy(context, payload) {
|
|
context.commit('setSizeStrategy', payload)
|
|
},
|
|
|
|
getConfig(context) {
|
|
window.backend.Config.GetAppConfig()
|
|
.then(cfg => {
|
|
context.commit('setConfig', cfg)
|
|
})
|
|
.catch(err => {
|
|
console.error(err)
|
|
})
|
|
},
|
|
|
|
setConfig(context, c) {
|
|
window.backend.Config.SetConfig(JSON.stringify(c))
|
|
.then(() => {
|
|
context.dispatch('getConfig')
|
|
})
|
|
.catch(err => {
|
|
console.error(err)
|
|
})
|
|
},
|
|
|
|
setConfigProp(context, payload) {
|
|
context.commit('setConfigProp', payload)
|
|
},
|
|
|
|
setSessionProp(context, payload) {
|
|
context.commit('setSessionProp', payload)
|
|
},
|
|
|
|
toggleWebpLossless(context) {
|
|
context.commit('toggleWebpLossless')
|
|
},
|
|
|
|
getStats(context) {
|
|
window.backend.Stat.GetStats()
|
|
.then(s => {
|
|
context.commit('setStats', s)
|
|
})
|
|
.catch(err => {
|
|
console.error(err)
|
|
})
|
|
},
|
|
setStats(context, s) {
|
|
context.commit('setStats', s)
|
|
}
|
|
},
|
|
mutations: {
|
|
addSize(state) {
|
|
const s = { height: null, width: null, strategy: 0 }
|
|
if (!state.config.sizes) {
|
|
state.config.sizes = [s]
|
|
} else {
|
|
state.config.sizes.push(s)
|
|
}
|
|
},
|
|
removeSize(state, index) {
|
|
state.config.sizes.splice(index, 1)
|
|
},
|
|
setSizeStrategy(state, payload) {
|
|
state.config.sizes[payload.index].strategy = payload.value
|
|
},
|
|
|
|
setConfig(state, c) {
|
|
state.config = c
|
|
},
|
|
|
|
setConfigProp(state, payload) {
|
|
state.config[payload.key] = payload.value
|
|
},
|
|
|
|
setSessionProp(state, payload) {
|
|
state.session[payload.key] += payload.value
|
|
},
|
|
|
|
setStats(state, s) {
|
|
state.stats = s
|
|
},
|
|
|
|
toggleWebpLossless(state) {
|
|
state.config.webpOpt.lossless = !state.config.webpOpt.lossless
|
|
}
|
|
}
|
|
})
|
|
|
|
export default store
|
|
|