/*
* Episteme Reader - A native Android document reader.
* Copyright (C) 2026 Episteme
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*
* mail: epistemereader@gmail.com
*/
package com.aryan.reader.paginatedreader
import timber.log.Timber
import coil.decode.DataSource
import coil.decode.ImageSource
import coil.fetch.FetchResult
import coil.fetch.Fetcher
import coil.fetch.SourceResult
import coil.request.Options
import okio.Buffer
/**
* A custom data class to wrap raw SVG string content.
* This avoids conflicts with Coil's default String fetcher.
*/
data class SvgData(val content: String)
/**
* A custom Coil Fetcher that handles loading SVG data from our [SvgData] class.
*/
class SvgStringFetcher(
private val options: Options,
private val data: SvgData,
) : Fetcher {
override suspend fun fetch(): FetchResult {
Timber.d("SvgStringFetcher: fetching SVG data from SvgData object.")
val buffer = Buffer().writeUtf8(data.content)
return SourceResult(
source = ImageSource(buffer, options.context),
mimeType = "image/svg+xml",
dataSource = DataSource.MEMORY
)
}
class Factory : Fetcher.Factory {
override fun create(data: SvgData, options: Options, imageLoader: coil.ImageLoader): Fetcher {
Timber.d("SvgStringFetcher.Factory: create called for SvgData.")
return SvgStringFetcher(options, data)
}
}
}