Fix loading error catch

Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
This commit is contained in:
John Molakvoæ (skjnldsv) 2020-09-15 15:01:50 +02:00 committed by backportbot[bot]
parent 2000e2faa5
commit 2672f5da59
7 changed files with 55 additions and 36 deletions

View File

@ -1,4 +1,4 @@
/* /**
* @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at> * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
* *
* @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at> * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>

View File

@ -1,4 +1,4 @@
/* /**
* @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at> * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
* *
* @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at> * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>

View File

@ -1,4 +1,4 @@
/* /**
* @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at> * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
* *
* @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at> * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>

View File

@ -1,4 +1,4 @@
/* /**
* @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at> * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
* *
* @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at> * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>

View File

@ -1,4 +1,4 @@
/* /**
* @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at> * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
* *
* @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at> * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>

View File

@ -19,8 +19,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { getRequestToken } from '@nextcloud/auth'
import { generateFilePath } from '@nextcloud/router' import { generateFilePath } from '@nextcloud/router'
import { getLoggerBuilder } from '@nextcloud/logger'
import { getRequestToken } from '@nextcloud/auth'
import { translate as t, translatePlural as n } from '@nextcloud/l10n' import { translate as t, translatePlural as n } from '@nextcloud/l10n'
import Vue from 'vue' import Vue from 'vue'
@ -32,7 +33,17 @@ __webpack_nonce__ = btoa(getRequestToken())
// eslint-disable-next-line camelcase // eslint-disable-next-line camelcase
__webpack_public_path__ = generateFilePath('core', '', 'js/') __webpack_public_path__ = generateFilePath('core', '', 'js/')
const logger = getLoggerBuilder()
.setApp('unified-search')
.detectUser()
.build()
Vue.mixin({ Vue.mixin({
data() {
return {
logger,
}
},
methods: { methods: {
t, t,
n, n,

View File

@ -57,7 +57,7 @@
<!-- Loading placeholders --> <!-- Loading placeholders -->
<SearchResultPlaceholders v-if="isLoading" /> <SearchResultPlaceholders v-if="isLoading" />
<EmptyContent v-else-if="isValidQuery && isDoneSearching" icon="icon-search"> <EmptyContent v-else-if="isValidQuery" icon="icon-search">
{{ t('core', 'No results for {query}', {query}) }} {{ t('core', 'No results for {query}', {query}) }}
</EmptyContent> </EmptyContent>
@ -116,6 +116,7 @@ import Magnify from 'vue-material-design-icons/Magnify'
import HeaderMenu from '../components/HeaderMenu' import HeaderMenu from '../components/HeaderMenu'
import SearchResult from '../components/UnifiedSearch/SearchResult' import SearchResult from '../components/UnifiedSearch/SearchResult'
import SearchResultPlaceholders from '../components/UnifiedSearch/SearchResultPlaceholders' import SearchResultPlaceholders from '../components/UnifiedSearch/SearchResultPlaceholders'
import { showError } from '@nextcloud/dialogs'
export default { export default {
name: 'UnifiedSearch', name: 'UnifiedSearch',
@ -255,7 +256,7 @@ export default {
async created() { async created() {
this.types = await getTypes() this.types = await getTypes()
console.debug('Unified Search initialized with the following providers', this.types) this.logger.debug('Unified Search initialized with the following providers', this.types)
}, },
mounted() { mounted() {
@ -372,42 +373,49 @@ export default {
// Remove any filters from the query // Remove any filters from the query
query = query.replace(regexFilterIn, '').replace(regexFilterNot, '') query = query.replace(regexFilterIn, '').replace(regexFilterNot, '')
console.debug('Searching', query, 'in', types) this.logger.debug(`Searching ${query} in`, types)
// Reset search if the query changed // Reset search if the query changed
this.resetState() this.resetState()
types.forEach(async type => { types.forEach(async type => {
this.$set(this.loading, type, true) try {
const request = await search(type, query) this.$set(this.loading, type, true)
const request = await search(type, query)
// Process results
if (request.data.ocs.data.entries.length > 0) {
this.$set(this.results, type, request.data.ocs.data.entries)
} else {
this.$delete(this.results, type)
}
// Save cursor if any
if (request.data.ocs.data.cursor) {
this.$set(this.cursors, type, request.data.ocs.data.cursor)
} else if (!request.data.ocs.data.isPaginated) {
// If no cursor and no pagination, we save the default amount
// provided by server's initial state `defaultLimit`
this.$set(this.limits, type, this.defaultLimit)
}
// Check if we reached end of pagination
if (request.data.ocs.data.entries.length < this.defaultLimit) {
this.$set(this.reached, type, true)
}
// If none already focused, focus the first rendered result
if (this.focused === null) {
this.focused = 0
}
} catch (error) {
this.logger.error(`Error searching for ${this.typesMap[type]}`, error)
showError(this.t('core', 'An error occurred while looking for {type}', { type: this.typesMap[type] }))
// Process results
if (request.data.ocs.data.entries.length > 0) {
this.$set(this.results, type, request.data.ocs.data.entries)
} else {
this.$delete(this.results, type) this.$delete(this.results, type)
} finally {
this.$set(this.loading, type, false)
} }
// Save cursor if any
if (request.data.ocs.data.cursor) {
this.$set(this.cursors, type, request.data.ocs.data.cursor)
} else if (!request.data.ocs.data.isPaginated) {
// If no cursor and no pagination, we save the default amount
// provided by server's initial state `defaultLimit`
this.$set(this.limits, type, this.defaultLimit)
}
// Check if we reached end of pagination
if (request.data.ocs.data.entries.length < this.defaultLimit) {
this.$set(this.reached, type, true)
}
// If none already focused, focus the first rendered result
if (this.focused === null) {
this.focused = 0
}
this.$set(this.loading, type, false)
}) })
}, },
onInputDebounced: debounce(function(e) { onInputDebounced: debounce(function(e) {