in src/main/kotlin/youtrack/YoutrackIssuesLoader.kt [23:70]
override suspend fun load(params: IssuesLoader.Params) : IssuesLoadResult {
if (params !is IssuesLoader.Params.YouTrack)
return IssuesLoadResult.Failed.wrongParams(YoutrackIssuesLoader::class)
val query = params.query ?: defaultYouTrackQuery
return try {
val url = URL(serverUrl).toString().trimEnd('/')
val (issuesCount, issues) = with(YouTrack) {
if (token.isNullOrBlank()) authorizeAsGuest(url) else authorizeByPermanentToken(url, token)
}
.use { youtrack ->
val issuesCount = youtrack.issues(query).count()
issuesCount to youtrack.issues(query).mapIndexedNotNull { issueIndex, it ->
try {
ExternalIssue(
summary = it.summary,
description = it.description,
assignee = it["Assignee"] ?: "",
status = it.state.name,
externalId = it.id,
externalName = null,
externalUrl = "$url/issue/${it.id}"
)
.also { logger.info(it, issueIndex, issuesCount) }
} catch (e: NullPointerException) {
logger.failedToParseIssue(issueIndex, issuesCount, "YouTrack")
null
}
}.toList()
}
if (issues.count() != issuesCount) {
logger.someIssuesFailedToParse()
}
IssuesLoadResult.Success(issues.map { IssueTemplate(it) })
} catch (e: YouTrackClientException) {
logger.externalServiceClientError(e,
"failed to parse YT response. Does `--youtrackServer` URL match the one in your YT Domain Settings? Typically, it should end with /youtrack")
IssuesLoadResult.Failed.messageOrUnknownException(e)
} catch (e: Exception) {
logger.generalError(e)
IssuesLoadResult.Failed.messageOrUnknownException(e)
}
}