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

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