Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge upstream #1211

Closed
wants to merge 74 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
c188307
Add files via upload
LuftVerbot Jul 24, 2023
c1b7b89
Update README.md
LuftVerbot Jul 24, 2023
a883c90
Delete ic_launcher.png
LuftVerbot Jul 24, 2023
928a62c
Update README.md
LuftVerbot Jul 24, 2023
c3062d2
merge1
LuftVerbot Oct 4, 2023
5a2a3fd
fuck lint
LuftVerbot Oct 4, 2023
5ceae31
merge2
LuftVerbot Oct 4, 2023
14a8aeb
merge3
LuftVerbot Oct 4, 2023
2ebf477
merge4
LuftVerbot Oct 4, 2023
f705e19
merge5
LuftVerbot Oct 5, 2023
b3c911e
merge6
LuftVerbot Oct 6, 2023
e99e4c2
merge7
LuftVerbot Oct 6, 2023
c62f86f
merge8
LuftVerbot Oct 21, 2023
67d3043
Merge branch 'aniyomiorg:master' into MR
LuftVerbot Oct 21, 2023
c85576e
merge9
LuftVerbot Oct 22, 2023
da3265f
merge10
LuftVerbot Oct 22, 2023
febf046
fuck lint
LuftVerbot Oct 22, 2023
c19b4b5
fuck lint (again)
LuftVerbot Oct 22, 2023
dfb5ca4
Merge remote-tracking branch 'upstream/master' into MR
LuftVerbot Oct 23, 2023
d78159b
Translations update from Hosted Weblate (#9531)
weblate Jun 3, 2023
974d3b5
Revert "Translations update from Hosted Weblate (#9531)"
LuftVerbot Oct 23, 2023
3a8e7d0
Translations update from Hosted Weblate (#9531)
weblate Jun 3, 2023
e282528
Revert "Translations update from Hosted Weblate (#9531)"
LuftVerbot Oct 23, 2023
5d575f1
Merge remote-tracking branch 'upstream/master' into MR
LuftVerbot Oct 26, 2023
b9333be
fix download button not shown
LuftVerbot Oct 26, 2023
564a959
Merge remote-tracking branch 'origin/master' into MR
LuftVerbot Oct 27, 2023
f51b36a
merge11
LuftVerbot Oct 27, 2023
7e14b6d
Merge remote-tracking branch 'upstream/master' into MR
LuftVerbot Oct 27, 2023
5b1099d
Update AdaptiveSheet.kt
LuftVerbot Oct 27, 2023
692b566
revert subs commit
LuftVerbot Oct 27, 2023
c6317e9
Update AdaptiveSheet.kt
LuftVerbot Oct 27, 2023
2431d8a
merge12
LuftVerbot Oct 27, 2023
f0783f5
feat(player): Subtitle settings + refactor + crash fixes (#1152)
quickdesh Oct 27, 2023
6dd16ca
Merge branch 'master' into MR
LuftVerbot Oct 28, 2023
03ee4bc
merge13
LuftVerbot Oct 28, 2023
9bb1a5d
Merge branch 'master' into MR
LuftVerbot Oct 29, 2023
fd1c643
merge14
LuftVerbot Oct 29, 2023
f3ec9da
Merge branch 'master' into MR
LuftVerbot Oct 31, 2023
f0180e0
rework anime downloader
LuftVerbot Nov 1, 2023
5415cbb
Update AnimeDownloader.kt
LuftVerbot Nov 1, 2023
9509d09
Update AnimeDownloader.kt
LuftVerbot Nov 1, 2023
8f08a24
Merge branch 'master' into MR
LuftVerbot Nov 2, 2023
d2ccb75
Merge branch 'master' into MR
LuftVerbot Nov 2, 2023
dd69ce5
Merge branch 'master' into MR
LuftVerbot Nov 3, 2023
264b0e6
merge15
LuftVerbot Nov 3, 2023
6bab100
Update ReaderActivity.kt
LuftVerbot Nov 3, 2023
184804f
merge15.5
LuftVerbot Nov 3, 2023
59b4404
merge16
LuftVerbot Nov 4, 2023
bb96174
Merge branch 'master' into MR
LuftVerbot Nov 7, 2023
872fc74
fix downloader pause
LuftVerbot Nov 9, 2023
748d610
small changes
LuftVerbot Nov 9, 2023
338b54a
Merge branch 'master' into MR
LuftVerbot Nov 9, 2023
83dcd5e
merge17
LuftVerbot Nov 11, 2023
4732c38
repositioning
LuftVerbot Nov 11, 2023
b9d42c9
Merge branch 'master' into MR
LuftVerbot Nov 11, 2023
61256a2
again repositioning
LuftVerbot Nov 11, 2023
e7b1066
merge18
LuftVerbot Nov 11, 2023
0271706
merge19
LuftVerbot Nov 11, 2023
82eb36b
fuck lint
LuftVerbot Nov 11, 2023
096276c
merge19.5
LuftVerbot Nov 11, 2023
4709cbe
merge20
LuftVerbot Nov 12, 2023
645746a
merge21
LuftVerbot Nov 12, 2023
563efef
Merge branch 'master' into MR
LuftVerbot Nov 15, 2023
7174799
Update StreamsCatalogSheet.kt
LuftVerbot Nov 15, 2023
370212c
merge22
LuftVerbot Nov 17, 2023
a439045
merge23
LuftVerbot Nov 17, 2023
72a54cb
Merge branch 'master' into MR
LuftVerbot Nov 17, 2023
4cbf9a8
merge23.5
LuftVerbot Nov 17, 2023
1b6301c
merge24
LuftVerbot Nov 17, 2023
a2a445f
merge25
LuftVerbot Nov 18, 2023
eeddf17
merge26
LuftVerbot Nov 18, 2023
85d0e49
little fix
LuftVerbot Nov 18, 2023
e29dc62
lint cleanup
LuftVerbot Nov 18, 2023
fa7b842
merge27
LuftVerbot Nov 18, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
merge22
LuftVerbot committed Nov 17, 2023
commit 370212c6772067a23a4070b497d80c17a9c32ec3
Original file line number Diff line number Diff line change
@@ -31,7 +31,7 @@ class PreferenceMutableState<T>(
}

override fun component2(): (T) -> Unit {
return { preference.set(it) }
return preference::set
}
}

Original file line number Diff line number Diff line change
@@ -65,6 +65,7 @@ import eu.kanade.presentation.entries.anime.components.AnimeInfoBox
import eu.kanade.presentation.entries.anime.components.EpisodeDownloadAction
import eu.kanade.presentation.entries.anime.components.ExpandableAnimeDescription
import eu.kanade.presentation.entries.anime.components.NextEpisodeAiringListItem
import eu.kanade.presentation.util.formatEpisodeNumber
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource
import eu.kanade.tachiyomi.animesource.model.SAnime
@@ -73,7 +74,6 @@ import eu.kanade.tachiyomi.source.anime.getNameForAnimeInfo
import eu.kanade.tachiyomi.ui.browse.anime.extension.details.SourcePreferencesScreen
import eu.kanade.tachiyomi.ui.entries.anime.AnimeScreenState
import eu.kanade.tachiyomi.ui.entries.anime.EpisodeItem
import eu.kanade.tachiyomi.ui.entries.anime.episodeDecimalFormat
import eu.kanade.tachiyomi.util.lang.toRelativeString
import eu.kanade.tachiyomi.util.system.copyToClipboard
import kotlinx.coroutines.delay
@@ -477,7 +477,7 @@ private fun AnimeScreenSmallImpl(
NextEpisodeAiringListItem(
title = stringResource(
R.string.display_mode_episode,
episodeDecimalFormat.format(state.airingEpisodeNumber),
formatEpisodeNumber(state.airingEpisodeNumber.toFloat()),
),
date = formatTime(state.airingTime, useDayFormat = true),
)
@@ -734,7 +734,7 @@ fun AnimeScreenLargeImpl(
NextEpisodeAiringListItem(
title = stringResource(
R.string.display_mode_episode,
episodeDecimalFormat.format(state.airingEpisodeNumber),
formatEpisodeNumber(state.airingEpisodeNumber.toFloat()),
),
date = formatTime(state.airingTime, useDayFormat = true),
)
@@ -837,7 +837,7 @@ private fun LazyListScope.sharedEpisodeItems(
title = if (anime.displayMode == Anime.EPISODE_DISPLAY_NUMBER) {
stringResource(
R.string.display_mode_episode,
episodeDecimalFormat.format(episodeItem.episode.episodeNumber.toDouble()),
formatEpisodeNumber(episodeItem.episode.episodeNumber),
)
} else {
episodeItem.episode.name
Original file line number Diff line number Diff line change
@@ -61,14 +61,14 @@ import eu.kanade.presentation.entries.manga.components.ExpandableMangaDescriptio
import eu.kanade.presentation.entries.manga.components.MangaActionRow
import eu.kanade.presentation.entries.manga.components.MangaChapterListItem
import eu.kanade.presentation.entries.manga.components.MangaInfoBox
import eu.kanade.presentation.util.formatChapterNumber
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.download.manga.model.MangaDownload
import eu.kanade.tachiyomi.source.ConfigurableSource
import eu.kanade.tachiyomi.source.manga.getNameForMangaInfo
import eu.kanade.tachiyomi.ui.browse.manga.extension.details.MangaSourcePreferencesScreen
import eu.kanade.tachiyomi.ui.entries.manga.ChapterItem
import eu.kanade.tachiyomi.ui.entries.manga.MangaScreenState
import eu.kanade.tachiyomi.ui.entries.manga.chapterDecimalFormat
import eu.kanade.tachiyomi.util.lang.toRelativeString
import eu.kanade.tachiyomi.util.system.copyToClipboard
import tachiyomi.domain.entries.manga.model.Manga
@@ -746,7 +746,7 @@ private fun LazyListScope.sharedChapterItems(
title = if (manga.displayMode == Manga.CHAPTER_DISPLAY_NUMBER) {
stringResource(
R.string.display_mode_chapter,
chapterDecimalFormat.format(chapterItem.chapter.chapterNumber.toDouble()),
formatChapterNumber(chapterItem.chapter.chapterNumber),
)
} else {
chapterItem.chapter.name
Original file line number Diff line number Diff line change
@@ -21,12 +21,11 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import eu.kanade.presentation.entries.ItemCover
import eu.kanade.presentation.util.formatEpisodeNumber
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.lang.toTimestampString
import tachiyomi.domain.history.anime.model.AnimeHistoryWithRelations
import tachiyomi.presentation.core.components.material.padding
import java.text.DecimalFormat
import java.text.DecimalFormatSymbols

private val HISTORY_ITEM_HEIGHT = 96.dp

@@ -68,7 +67,7 @@ fun AnimeHistoryItem(
text = if (history.episodeNumber > -1) {
stringResource(
R.string.recent_anime_time,
episodeFormatter.format(history.episodeNumber),
formatEpisodeNumber(history.episodeNumber),
seenAt,
)
} else {
@@ -88,8 +87,3 @@ fun AnimeHistoryItem(
}
}
}

private val episodeFormatter = DecimalFormat(
"#.###",
DecimalFormatSymbols().apply { decimalSeparator = '.' },
)
Original file line number Diff line number Diff line change
@@ -21,12 +21,11 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import eu.kanade.presentation.entries.ItemCover
import eu.kanade.presentation.util.formatChapterNumber
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.util.lang.toTimestampString
import tachiyomi.domain.history.manga.model.MangaHistoryWithRelations
import tachiyomi.presentation.core.components.material.padding
import java.text.DecimalFormat
import java.text.DecimalFormatSymbols

private val HISTORY_ITEM_HEIGHT = 96.dp

@@ -68,7 +67,7 @@ fun MangaHistoryItem(
text = if (history.chapterNumber > -1) {
stringResource(
R.string.recent_manga_time,
chapterFormatter.format(history.chapterNumber),
formatChapterNumber(history.chapterNumber),
readAt,
)
} else {
@@ -88,8 +87,3 @@ fun MangaHistoryItem(
}
}
}

private val chapterFormatter = DecimalFormat(
"#.###",
DecimalFormatSymbols().apply { decimalSeparator = '.' },
)
Original file line number Diff line number Diff line change
@@ -16,7 +16,6 @@ import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.res.stringResource
import eu.kanade.presentation.components.TabbedDialog
import eu.kanade.presentation.components.TabbedDialogPaddings
import eu.kanade.presentation.util.collectAsState
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.library.anime.AnimeLibrarySettingsScreenModel
import tachiyomi.core.preference.TriState
@@ -31,6 +30,7 @@ import tachiyomi.presentation.core.components.SettingsChipRow
import tachiyomi.presentation.core.components.SliderItem
import tachiyomi.presentation.core.components.SortItem
import tachiyomi.presentation.core.components.TriStateItem
import tachiyomi.presentation.core.util.collectAsState

@Composable
fun AnimeLibrarySettingsDialog(
@@ -212,59 +212,35 @@ private fun ColumnScope.DisplayPage(
} else {
stringResource(R.string.label_default)
},
onChange = { columnPreference.set(it) },
onChange = columnPreference::set,
)
}

HeadingItem(R.string.overlay_header)
val downloadBadge by screenModel.libraryPreferences.downloadBadge().collectAsState()
CheckboxItem(
label = stringResource(R.string.action_display_download_badge_anime),
checked = downloadBadge,
onClick = {
screenModel.togglePreference(LibraryPreferences::downloadBadge)
},
pref = screenModel.libraryPreferences.downloadBadge(),
)
val localBadge by screenModel.libraryPreferences.localBadge().collectAsState()
CheckboxItem(
label = stringResource(R.string.action_display_local_badge),
checked = localBadge,
onClick = {
screenModel.togglePreference(LibraryPreferences::localBadge)
},
pref = screenModel.libraryPreferences.localBadge(),
)
val languageBadge by screenModel.libraryPreferences.languageBadge().collectAsState()
CheckboxItem(
label = stringResource(R.string.action_display_language_badge),
checked = languageBadge,
onClick = {
screenModel.togglePreference(LibraryPreferences::languageBadge)
},
pref = screenModel.libraryPreferences.languageBadge(),
)
val showContinueViewingButton by screenModel.libraryPreferences.showContinueViewingButton().collectAsState()
CheckboxItem(
label = stringResource(R.string.action_display_show_continue_reading_button),
checked = showContinueViewingButton,
onClick = {
screenModel.togglePreference(LibraryPreferences::showContinueViewingButton)
},
pref = screenModel.libraryPreferences.showContinueViewingButton(),
)

HeadingItem(R.string.tabs_header)
val categoryTabs by screenModel.libraryPreferences.categoryTabs().collectAsState()
CheckboxItem(
label = stringResource(R.string.action_display_show_tabs),
checked = categoryTabs,
onClick = {
screenModel.togglePreference(LibraryPreferences::categoryTabs)
},
pref = screenModel.libraryPreferences.categoryTabs(),
)
val categoryNumberOfItems by screenModel.libraryPreferences.categoryNumberOfItems().collectAsState()
CheckboxItem(
label = stringResource(R.string.action_display_show_number_of_items),
checked = categoryNumberOfItems,
onClick = {
screenModel.togglePreference(LibraryPreferences::categoryNumberOfItems)
},
pref = screenModel.libraryPreferences.categoryNumberOfItems(),
)
}
Original file line number Diff line number Diff line change
@@ -16,7 +16,6 @@ import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.res.stringResource
import eu.kanade.presentation.components.TabbedDialog
import eu.kanade.presentation.components.TabbedDialogPaddings
import eu.kanade.presentation.util.collectAsState
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.library.manga.MangaLibrarySettingsScreenModel
import tachiyomi.core.preference.TriState
@@ -31,6 +30,7 @@ import tachiyomi.presentation.core.components.SettingsChipRow
import tachiyomi.presentation.core.components.SliderItem
import tachiyomi.presentation.core.components.SortItem
import tachiyomi.presentation.core.components.TriStateItem
import tachiyomi.presentation.core.util.collectAsState

@Composable
fun MangaLibrarySettingsDialog(
@@ -211,59 +211,35 @@ private fun ColumnScope.DisplayPage(
} else {
stringResource(R.string.label_default)
},
onChange = { columnPreference.set(it) },
onChange = columnPreference::set,
)
}

HeadingItem(R.string.overlay_header)
val downloadBadge by screenModel.libraryPreferences.downloadBadge().collectAsState()
CheckboxItem(
label = stringResource(R.string.action_display_download_badge),
checked = downloadBadge,
onClick = {
screenModel.togglePreference(LibraryPreferences::downloadBadge)
},
pref = screenModel.libraryPreferences.downloadBadge(),
)
val localBadge by screenModel.libraryPreferences.localBadge().collectAsState()
CheckboxItem(
label = stringResource(R.string.action_display_local_badge),
checked = localBadge,
onClick = {
screenModel.togglePreference(LibraryPreferences::localBadge)
},
pref = screenModel.libraryPreferences.localBadge(),
)
val languageBadge by screenModel.libraryPreferences.languageBadge().collectAsState()
CheckboxItem(
label = stringResource(R.string.action_display_language_badge),
checked = languageBadge,
onClick = {
screenModel.togglePreference(LibraryPreferences::languageBadge)
},
pref = screenModel.libraryPreferences.languageBadge(),
)
val showContinueViewingButton by screenModel.libraryPreferences.showContinueViewingButton().collectAsState()
CheckboxItem(
label = stringResource(R.string.action_display_show_continue_reading_button),
checked = showContinueViewingButton,
onClick = {
screenModel.togglePreference(LibraryPreferences::showContinueViewingButton)
},
pref = screenModel.libraryPreferences.showContinueViewingButton(),
)

HeadingItem(R.string.tabs_header)
val categoryTabs by screenModel.libraryPreferences.categoryTabs().collectAsState()
CheckboxItem(
label = stringResource(R.string.action_display_show_tabs),
checked = categoryTabs,
onClick = {
screenModel.togglePreference(LibraryPreferences::categoryTabs)
},
pref = screenModel.libraryPreferences.categoryTabs(),
)
val categoryNumberOfItems by screenModel.libraryPreferences.categoryNumberOfItems().collectAsState()
CheckboxItem(
label = stringResource(R.string.action_display_show_number_of_items),
checked = categoryNumberOfItems,
onClick = {
screenModel.togglePreference(LibraryPreferences::categoryNumberOfItems)
},
pref = screenModel.libraryPreferences.categoryNumberOfItems(),
)
}
Original file line number Diff line number Diff line change
@@ -22,10 +22,10 @@ import eu.kanade.presentation.more.settings.widget.MultiSelectListPreferenceWidg
import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget
import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget
import eu.kanade.presentation.more.settings.widget.TrackingPreferenceWidget
import eu.kanade.presentation.util.collectAsState
import kotlinx.coroutines.launch
import tachiyomi.core.preference.PreferenceStore
import tachiyomi.presentation.core.components.SliderItem
import tachiyomi.presentation.core.util.collectAsState
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get

Original file line number Diff line number Diff line change
@@ -4,10 +4,10 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.platform.LocalContext
import eu.kanade.core.preference.asState
import eu.kanade.presentation.more.settings.Preference
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.player.settings.PlayerPreferences
import eu.kanade.tachiyomi.util.preference.asState
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get

Original file line number Diff line number Diff line change
@@ -33,7 +33,6 @@ import eu.kanade.presentation.more.settings.Preference
import eu.kanade.presentation.more.settings.screen.advanced.ClearAnimeDatabaseScreen
import eu.kanade.presentation.more.settings.screen.advanced.ClearDatabaseScreen
import eu.kanade.presentation.more.settings.screen.debug.DebugInfoScreen
import eu.kanade.presentation.util.collectAsState
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.cache.ChapterCache
import eu.kanade.tachiyomi.data.cache.EpisodeCache
@@ -71,6 +70,7 @@ import tachiyomi.core.util.lang.withUIContext
import tachiyomi.core.util.system.logcat
import tachiyomi.domain.entries.manga.repository.MangaRepository
import tachiyomi.domain.library.service.LibraryPreferences
import tachiyomi.presentation.core.util.collectAsState
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.io.File
Original file line number Diff line number Diff line change
@@ -21,7 +21,6 @@ import eu.kanade.domain.ui.model.TabletUiMode
import eu.kanade.domain.ui.model.ThemeMode
import eu.kanade.domain.ui.model.setAppCompatDelegateThemeMode
import eu.kanade.presentation.more.settings.Preference
import eu.kanade.presentation.util.collectAsState
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.ui.home.HomeScreen
import eu.kanade.tachiyomi.util.system.LocaleHelper
@@ -31,6 +30,7 @@ import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.merge
import org.xmlpull.v1.XmlPullParser
import tachiyomi.domain.library.service.LibraryPreferences
import tachiyomi.presentation.core.util.collectAsState
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.util.Date
Original file line number Diff line number Diff line change
@@ -42,7 +42,6 @@ import androidx.core.net.toUri
import com.hippo.unifile.UniFile
import eu.kanade.presentation.extensions.RequestStoragePermission
import eu.kanade.presentation.more.settings.Preference
import eu.kanade.presentation.util.collectAsState
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.backup.BackupConst
import eu.kanade.tachiyomi.data.backup.BackupCreateJob
@@ -64,6 +63,7 @@ import tachiyomi.domain.backup.service.FLAG_SETTINGS
import tachiyomi.domain.backup.service.FLAG_TRACK
import tachiyomi.presentation.core.components.ScrollbarLazyColumn
import tachiyomi.presentation.core.components.material.Divider
import tachiyomi.presentation.core.util.collectAsState
import tachiyomi.presentation.core.util.isScrolledToEnd
import tachiyomi.presentation.core.util.isScrolledToStart
import uy.kohesive.injekt.Injekt
Original file line number Diff line number Diff line change
@@ -23,13 +23,13 @@ import eu.kanade.domain.base.BasePreferences
import eu.kanade.presentation.category.visualName
import eu.kanade.presentation.more.settings.Preference
import eu.kanade.presentation.more.settings.widget.TriStateListDialog
import eu.kanade.presentation.util.collectAsState
import eu.kanade.tachiyomi.R
import kotlinx.coroutines.runBlocking
import tachiyomi.domain.category.anime.interactor.GetAnimeCategories
import tachiyomi.domain.category.manga.interactor.GetMangaCategories
import tachiyomi.domain.category.model.Category
import tachiyomi.domain.download.service.DownloadPreferences
import tachiyomi.presentation.core.util.collectAsState
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.io.File
Loading