feature: add parsing status to UI
This commit is contained in:
parent
290d7115d0
commit
514b2588df
|
@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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,
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
import { writable } from 'svelte/store'
|
||||||
|
|
||||||
|
export default writable(null)
|
Loading…
Reference in New Issue