diff --git a/src/main/kotlin/extractDocuments.kt b/src/main/kotlin/extractDocuments.kt index bc1fbe3..13b2687 100644 --- a/src/main/kotlin/extractDocuments.kt +++ b/src/main/kotlin/extractDocuments.kt @@ -56,7 +56,7 @@ internal suspend fun SpaceClient.extractFile( } private val imageRegex = """!\[(?.*)]\(/d/(?.*)\?f=0( "(?.*)")?\)""".toRegex() -private val fileNameRegex = "\\W+".toRegex() +internal val fileNameRegex = "\\W+".toRegex() /** * Download single Space document diff --git a/src/main/kotlin/extractMessages.kt b/src/main/kotlin/extractMessages.kt index ae0b681..b3d7c59 100644 --- a/src/main/kotlin/extractMessages.kt +++ b/src/main/kotlin/extractMessages.kt @@ -18,6 +18,10 @@ private suspend fun SpaceClient.writeMessages( ) { var readDateTime: Instant? = null var read: Int + + val attachmentsDirectory = parentDirectory.resolve("attachments") + attachmentsDirectory.createDirectories() + //reading messages in batches do { val result: GetMessagesResponse = chats.messages.getChannelMessages( @@ -39,8 +43,6 @@ private suspend fun SpaceClient.writeMessages( } } } - val attachmentsDirectory = parentDirectory.resolve("attachments") - attachmentsDirectory.createDirectories() result.messages.forEach { message -> writer.appendLine( @@ -121,9 +123,11 @@ suspend fun SpaceClient.extractMessages( is M2SharedChannelContent -> ext.name is M2ChannelContentMember -> ext.member.username else -> channel.contact.key - } + }.replace(fileNameRegex, "_") - val file = parentDirectory.resolve("$name.md") + val chatDirectory = parentDirectory.resolve(name) + + val file = chatDirectory.resolve("$name.md") logger.info("Extracting messages from channel $id to $file") @@ -134,9 +138,6 @@ suspend fun SpaceClient.extractMessages( StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE ).bufferedWriter().use { out -> -// out.append(M2ChannelRecordStructure.serialize(channel).toPrettyString()) -// out.appendLine("") -// out.appendLine() - writeMessages(parentDirectory, out, id) + writeMessages(chatDirectory, out, id) } } \ No newline at end of file diff --git a/src/main/kotlin/main.kt b/src/main/kotlin/main.kt index d9f3a83..77ad912 100644 --- a/src/main/kotlin/main.kt +++ b/src/main/kotlin/main.kt @@ -200,10 +200,16 @@ private class ExtractChannelsCommand : ExtractCommand("channels", "Extract all m SpaceAuth.ClientCredentials() ) - runBlocking { + runBlocking(Dispatchers.IO) { if (channelId == null) { - spaceClient.chats.channels.listAllChannels(query = "").data.forEach { - spaceClient.extractMessages(ChannelIdentifier.Id(it.channelId), Path(path)) + spaceClient.chats.channels.listAllChannels(query = "").data.forEach { channel -> + launch { + try { + spaceClient.extractMessages(ChannelIdentifier.Id(channel.channelId), Path(path)) + } catch (ex: Exception) { + logger.error("Failed to download ${channel.name}", ex) + } + } } } else { spaceClient.extractMessages(ChannelIdentifier.Id(channelId), Path(path))