1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- <template>
- <div>
- <slot></slot>
- </div>
- </template>
- <script>
- import './style.css'
- import ExperimentBase from '@/mixins/ExperimentBase'
- import { mapGetters } from 'vuex'
- import { rand } from '@/functions'
- import { EXPERIMENT as experimentMsgId } from '@/../config.messagesId'
- export default {
- name: 'ExperimentBaseAreSameImages',
- mixins: [ExperimentBase],
- data() {
- return {
- maxTestCount: null,
- testCount: 1,
- leftImage: { link: null, quality: null },
- rightImage: { link: null, quality: null }
- }
- },
- computed: {
- ...mapGetters(['getHostURI'])
- },
- methods: {
- async getTest(leftQuality, rightQuality) {
- const left = this.qualities[leftQuality]
- const right = this.qualities[rightQuality]
- const res = await Promise.all([this.getImage(left), this.getImage(right)])
- const [leftImage, rightImage] = res.map(x => {
- x.link = `${this.getHostURI}${x.link}`
- return x
- })
- return { leftImage, rightImage }
- },
- getRandomTest() {
- return this.getTest(rand(0, this.qualities.length - 1), rand(0, this.qualities.length - 1))
- },
- // An action was triggered, load extracts and save progression
- async areTheSameActionRandom(areTheSame) {
- this.loadingMessage = 'Loading new test...'
- this.loadingErrorMessage = null
- try {
- this.testCount++
- const obj = {
- leftImage: this.leftImage,
- rightImage: this.rightImage,
- areTheSame,
- experimentName: this.experimentName,
- sceneName: this.sceneName
- }
- this.sendMessage({ msgId: experimentMsgId.DATA, msg: obj })
- const { leftImage, rightImage } = await this.getRandomTest()
- this.leftImage = leftImage
- this.rightImage = rightImage
- // Experiment end
- if (this.testCount >= this.maxTestCount) this.finishExperiment()
- }
- catch (err) {
- console.error('Failed to load new test', err)
- this.loadingErrorMessage = 'Failed to load new test. ' + err.message
- }
- finally {
- this.loadingMessage = null
- this.saveProgress()
- }
- },
- // Finish an experiment, sending full data to the server
- // Don't forget to surcharge this function when using this mixin to add more data
- finishExperiment() {
- const obj = {
- experimentName: this.experimentName,
- sceneName: this.sceneName
- }
- this.sendMessage({ msgId: experimentMsgId.VALIDATED, msg: obj })
- this.setExperimentDone({ experimentName: this.experimentName, sceneName: this.sceneName, done: true })
- this.$router.push(`/experiments/${this.experimentName}`)
- }
- }
- }
- </script>
|