feature: add parsing status to UI

This commit is contained in:
Ondřej Synáček 2020-12-20 14:40:43 +01:00
parent 290d7115d0
commit 514b2588df
4 changed files with 28 additions and 25 deletions

View File

@ -1,5 +1,5 @@
import { postURL } from '../services' import { postURL } from '../services'
import { requestStore } from '../stores' import { parseStatusStore, requestStore } from '../stores'
import { Request } from '../records' import { Request } from '../records'
import { uuidv4, parseStartTimeFromiCalString } from '../utils' import { uuidv4, parseStartTimeFromiCalString } from '../utils'
import { extractEventDataFromHTML } from '../../../lib/services/ics-retriever' import { extractEventDataFromHTML } from '../../../lib/services/ics-retriever'
@ -29,16 +29,14 @@ const getEventHTML = async (url) => {
} }
} }
const createICS = (html, url, { logger }) => { const createICS = async (html, url, { logger }) => {
try { try {
// TODO: set parsing status in UI parseStatusStore.set('Parsing event data...')
const eventData = extractEventDataFromHTML(html, url, { logger }) const eventData = extractEventDataFromHTML(html, url, { logger })
generateICS(eventData) const text = await generateICS(eventData)
.then((text) => { const dataUri = encodeURIComponent(text)
const dataUri = encodeURIComponent(text) const uri = `data:text/calendar;charset=utf-8,${dataUri}`
const uri = `data:text/calendar;charset=utf-8,${dataUri}`
console.log(`SUCCESS - uri: ${uri}`)
// TODO: create download link // TODO: create download link
// link.setAttribute('href', uri) // link.setAttribute('href', uri)
@ -47,25 +45,20 @@ const createICS = (html, url, { logger }) => {
// input.value = '' // input.value = ''
const summaryMatch = text.match(/SUMMARY:.*/)[0] const summaryMatch = text.match(/SUMMARY:.*/)[0]
const summary = summaryMatch ? summaryMatch.replace(/SUMMARY:/, '') : '' const summary = summaryMatch ? summaryMatch.replace(/SUMMARY:/, '') : ''
const startTimeMatches = text.match(/DTSTART:.*/) const startTimeMatches = text.match(/DTSTART:.*/)
const startTimeMatch = text.length > 0 ? const startTimeMatch = text.length > 0 ?
(startTimeMatches[0] || '').replace(/DTSTART:/, '') : (startTimeMatches[0] || '').replace(/DTSTART:/, '') :
'' ''
const startTime = parseStartTimeFromiCalString(startTimeMatch) const startTime = parseStartTimeFromiCalString(startTimeMatch)
// TODO: save record to a store // TODO: save record to a store
// createRecord(uri, summary, startTime) // createRecord(uri, summary, startTime)
// TODO: clear UI status parseStatusStore.set(null)
// clearStatuses()
})
// TODO: catch errors
.catch(alert)
} catch (err) { } catch (err) {
// TODO: catch errors parseStatusStore.set(err)
alert(err)
} }
} }

View File

@ -14,7 +14,7 @@
</style> </style>
<script> <script>
import { requestStore } from '../stores' import { parseStatusStore, requestStore } from '../stores'
$: error = ($requestStore && $requestStore.error) ? $requestStore.error : null $: error = ($requestStore && $requestStore.error) ? $requestStore.error : null
$: pendingRequest = Boolean($requestStore && !$requestStore.error) $: pendingRequest = Boolean($requestStore && !$requestStore.error)
@ -31,4 +31,9 @@
Fetching event {$requestStore.url} Fetching event {$requestStore.url}
</div> </div>
{/if} {/if}
{#if $parseStatusStore}
<div class='status-item'>
{$parseStatusStore}
</div>
{/if}
</div> </div>

View File

@ -1,9 +1,11 @@
import configStore from './configStore' import configStore from './configStore'
import eventStore from './eventStore' import eventStore from './eventStore'
import parseStatusStore from './parseStatusStore'
import requestStore from './requestStore' import requestStore from './requestStore'
export { export {
configStore, configStore,
eventStore, eventStore,
parseStatusStore,
requestStore, requestStore,
} }

View File

@ -0,0 +1,3 @@
import { writable } from 'svelte/store'
export default writable(null)