Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
261 commits
Select commit Hold shift + click to select a range
03ca07f
Move icon models into UI model module
Tlaster May 18, 2026
2742772
Move media card models into UI model module
Tlaster May 18, 2026
e176c04
Move UI state primitives into UI model module
Tlaster May 18, 2026
321a5fb
Move emoji models into UI model module
Tlaster May 18, 2026
0adae60
Move instance models into UI model module
Tlaster May 18, 2026
21a573c
Extract HTTP engine provider to data network
Tlaster May 18, 2026
2bb1afc
Extract database driver provider to data database
Tlaster May 18, 2026
e4d24e9
Move platform path producer to data datastore
Tlaster May 18, 2026
2fb70c4
Move locale helper to core common
Tlaster May 18, 2026
ddc780d
Move app database models to data database
Tlaster May 18, 2026
f4ba75e
Move app database DAOs to data database
Tlaster May 18, 2026
f2a0509
Move JVM file system helper to core common
Tlaster May 18, 2026
108f359
Move database driver factory to data database
Tlaster May 18, 2026
1b660e9
Move datastore settings models to data datastore
Tlaster May 18, 2026
125668c
Move timeline helper models to UI model
Tlaster May 18, 2026
b9a87ed
Move rich text rendering models to UI model
Tlaster May 18, 2026
cf8e2ef
Move interaction event models to UI model
Tlaster May 18, 2026
410ea09
Move action menu models to UI model
Tlaster May 18, 2026
107539d
Extract RSS display model
Tlaster May 18, 2026
06f5487
Move profile UI model
Tlaster May 18, 2026
1ac451f
Move list and podcast UI models
Tlaster May 18, 2026
40057d0
Move timeline UI model
Tlaster May 18, 2026
bf0ae3e
Move direct message UI model
Tlaster May 18, 2026
1884d0d
Move status sample UI model
Tlaster May 18, 2026
8e90452
Move app database draft storage
Tlaster May 18, 2026
fe69e8b
Move debug repository utilities
Tlaster May 18, 2026
53539f2
Move immutable list wrapper to UI model
Tlaster May 18, 2026
54740c5
Move filter repositories to data repository
Tlaster May 18, 2026
a4dfafb
Move application repository to data repository
Tlaster May 18, 2026
2de61bb
Move protobuf datastore serializer to core common
Tlaster May 18, 2026
4f39fba
Move app datastore provider
Tlaster May 18, 2026
bd64360
Move build config to core common
Tlaster May 18, 2026
3e0b745
Move file item abstraction to core common
Tlaster May 18, 2026
6502e2a
Move debug logging to data network
Tlaster May 18, 2026
d4c5551
Move Ktorfit client to data network
Tlaster May 18, 2026
d462cab
Move data export model to repository module
Tlaster May 18, 2026
7462e01
Move legacy appearance settings model
Tlaster May 18, 2026
d9619d3
Declare data network in app entrypoints
Tlaster May 18, 2026
6ef2c94
Move service contracts to core common
Tlaster May 18, 2026
ab054c9
Move switching service manager to core common
Tlaster May 18, 2026
2dfacef
Move compose status to UI model
Tlaster May 18, 2026
bb21867
Move cache data model to UI model
Tlaster May 18, 2026
82b09fc
Move compose contracts to social microblog
Tlaster May 18, 2026
88584a8
Move microblog data source contracts
Tlaster May 18, 2026
073179f
Move microblog loader contracts
Tlaster May 18, 2026
3a25e48
Move microblog paging contracts
Tlaster May 18, 2026
55442eb
Move node detection contracts to social api
Tlaster May 18, 2026
a68df15
Move account UI model to ui model module
Tlaster May 18, 2026
40391fb
Move social platform registry API
Tlaster May 18, 2026
e3d4273
Move draft repositories to data repository
Tlaster May 18, 2026
efc2b7c
Add module boundary validation task
Tlaster May 18, 2026
4ad104e
Add wasm presenter runtime foundation
Tlaster May 18, 2026
ed260af
Add wasm core common support
Tlaster May 18, 2026
9ef5867
Add wasm social model support
Tlaster May 18, 2026
230d362
Add wasm data network support
Tlaster May 18, 2026
1010522
Move cache database into data database
Tlaster May 18, 2026
c1a29b4
Move database providers to data database
Tlaster May 18, 2026
b225f07
Move common cache mappers to data database
Tlaster May 18, 2026
266ce71
Move timeline paging mapper to data database
Tlaster May 18, 2026
f7ad35d
Move RSS network parsing to data network
Tlaster May 18, 2026
1c80a29
Move RSS timeline loader to social rss
Tlaster May 18, 2026
8c74c2f
Move VVO network layer to social vvo
Tlaster May 18, 2026
4a948be
Move user action menu helper to ui model
Tlaster May 18, 2026
42fef89
Move Nostr network layer to social nostr
Tlaster May 18, 2026
4e0df69
Move Bluesky network layer to social bluesky
Tlaster May 18, 2026
63661b2
Move Mastodon network layer to social mastodon
Tlaster May 18, 2026
42cec45
Move Misskey network layer to social misskey
Tlaster May 18, 2026
f610669
Move XQT network layer to social xqt
Tlaster May 18, 2026
82f2d37
Move Bluesky mappers to social bluesky
Tlaster May 18, 2026
707beae
Move Mastodon mapper to social mastodon
Tlaster May 18, 2026
cf66d2f
Move Misskey mapper to social misskey
Tlaster May 18, 2026
98c0fc7
Move VVO mapper to social vvo
Tlaster May 18, 2026
73d7e56
Move deep link mapping to core deeplink
Tlaster May 18, 2026
7c5783e
Move VVO loaders to social vvo
Tlaster May 18, 2026
070a72d
Move Mastodon loaders to social mastodon
Tlaster May 18, 2026
32c9a02
Move Misskey loaders to social misskey
Tlaster May 18, 2026
28b1a9e
Move Bluesky loaders to social bluesky
Tlaster May 18, 2026
a413cae
Move XQT loaders to social xqt
Tlaster May 18, 2026
1f98a54
Remove shared image namespace
Tlaster May 18, 2026
2577ca6
Move appearance models to data repository
Tlaster May 18, 2026
56c33a5
Move guest Mastodon loaders to social mastodon
Tlaster May 18, 2026
1dc2c27
Remove database social microblog dependency
Tlaster May 18, 2026
c0f2a27
Validate database module boundaries
Tlaster May 18, 2026
4505664
Move debug helpers to core common
Tlaster May 18, 2026
d4419f3
Move platform path producers to datastore
Tlaster May 18, 2026
05fd191
Move account repository to data repository
Tlaster May 18, 2026
729d302
Move appearance repository tests
Tlaster May 18, 2026
36d9683
Move draft media store tests
Tlaster May 18, 2026
f9afc55
Move draft repository tests
Tlaster May 18, 2026
8375992
Move translation support to data repository
Tlaster May 18, 2026
aca8910
Move timeline filter model to ui model
Tlaster May 18, 2026
adfc45f
Move appearance models to ui model
Tlaster May 18, 2026
a923af9
Move timeline settings model to ui model
Tlaster May 18, 2026
5372d3f
Move settings export models to data repository
Tlaster May 18, 2026
6136296
Move settings repository to data repository
Tlaster May 18, 2026
9c11475
Move timeline slot normalization to ui model
Tlaster May 18, 2026
b377c3e
Tighten data and social boundary checks
Tlaster May 18, 2026
40f7127
Move AI translation template support to data repository
Tlaster May 18, 2026
18c9833
Move pre-translation support to data repository
Tlaster May 18, 2026
99aec0f
Move AI network services to data repository
Tlaster May 18, 2026
f44a258
Move translation provider to data repository
Tlaster May 18, 2026
06af7f5
Move pre-translation service to data repository
Tlaster May 18, 2026
3ad810f
Route platform detection through registry
Tlaster May 18, 2026
103c618
Move image compressor contract to core
Tlaster May 18, 2026
6857956
Add social platform registry tests
Tlaster May 18, 2026
1a5dc7e
Move RSS readability service to data repository
Tlaster May 18, 2026
7e97cfd
Allow explicit database drivers
Tlaster May 18, 2026
25d1a05
Expose datastore storage provider
Tlaster May 18, 2026
9b27ebf
Route recommended instances through platform registry
Tlaster May 18, 2026
bd21545
Use injected registry for guest account services
Tlaster May 18, 2026
3a87c4a
Require registry for timeline resolver
Tlaster May 18, 2026
f4069cd
Move notification handler to social microblog
Tlaster May 18, 2026
abf4cef
Move notification handler tests to social microblog
Tlaster May 18, 2026
1f89f44
Track web presenter dispatch state
Tlaster May 18, 2026
2ee4f9c
Require timeline resolver for settings tabs
Tlaster May 18, 2026
7dde80e
Route platform metadata through registry
Tlaster May 18, 2026
b8a4d03
Move recommended instances paging to social api
Tlaster May 18, 2026
473215b
Move base paging source to social microblog
Tlaster May 18, 2026
d3684d6
Move base remote mediator to social microblog
Tlaster May 18, 2026
a57bcfc
Add web target for database module
Tlaster May 18, 2026
1f02b90
Enable web target for RSS social module
Tlaster May 18, 2026
4e84398
Enable web target for Mastodon social module
Tlaster May 18, 2026
46aafa8
Guard registry boundary migrations
Tlaster May 18, 2026
890b32d
Declare web presenter export contract
Tlaster May 18, 2026
80b10d9
Wire web export to v1 platform modules
Tlaster May 18, 2026
efb07a0
Prepare datastore serializer contexts
Tlaster May 18, 2026
386ba7b
Parse web presenter bridge JSON
Tlaster May 18, 2026
1cf2808
Make database migrations common-safe
Tlaster May 18, 2026
8f55c74
Add registry query facade
Tlaster May 18, 2026
7a26647
Enable web targets for remaining social modules
Tlaster May 18, 2026
462e94e
Wire web export to additional social modules
Tlaster May 18, 2026
6826ea5
Route registry data sources by platform
Tlaster May 18, 2026
df1b6be
Expose social metadata plugins to web export
Tlaster May 18, 2026
b2e2b9d
Delegate presenter platform metadata to social modules
Tlaster May 18, 2026
df3da30
Keep Nostr SDK dependency in social module
Tlaster May 18, 2026
7a39a98
Enable web target for datastore
Tlaster May 18, 2026
04630fb
Enable web target for repository
Tlaster May 18, 2026
83cb259
Enable web target for presenter features
Tlaster May 19, 2026
78a73ee
Wire web presenter export to runtime
Tlaster May 19, 2026
cc5f4d8
Guard web modules from Nostr export
Tlaster May 19, 2026
aa9356b
Centralize platform IO dispatcher
Tlaster May 19, 2026
eede592
Remove migration SQL executor expect
Tlaster May 19, 2026
0c027f5
Add web SQLite worker driver
Tlaster May 19, 2026
6e905da
Share bundled SQLite driver for non-web
Tlaster May 19, 2026
b19de49
Simplify datastore storage provider
Tlaster May 19, 2026
f2a9602
Remove datastore storage provider wrapper
Tlaster May 19, 2026
b41a618
Move settings stores into datastore
Tlaster May 19, 2026
b92a6e1
Move settings models into datastore
Tlaster May 19, 2026
c13214d
Move shared UI models into core model
Tlaster May 19, 2026
47a111a
Extract AI services into data module
Tlaster May 19, 2026
1e9547b
Move RSS services into social rss
Tlaster May 19, 2026
f762c68
Move settings migrations into datastore
Tlaster May 19, 2026
4a1d128
Hide legacy settings models
Tlaster May 19, 2026
63aa1bc
Add settings datastore facade
Tlaster May 19, 2026
43d5b4c
Merge settings facade into app datastore
Tlaster May 19, 2026
89f27f0
Move settings import export into datastore
Tlaster May 19, 2026
c6c9c81
Hide legacy settings import helpers
Tlaster May 19, 2026
345aec1
Decouple core deeplink from ui model
Tlaster May 19, 2026
b4e8cb8
Move deeplink routes into core deeplink
Tlaster May 19, 2026
4422a67
Move nodeinfo service to data module
Tlaster May 19, 2026
04fad25
Split translation data module
Tlaster May 19, 2026
478a7d3
Split draft data module
Tlaster May 19, 2026
537d90e
Move settings repository to datastore
Tlaster May 19, 2026
a87f9e8
Split account data module
Tlaster May 19, 2026
f65f08d
Split local data module
Tlaster May 19, 2026
a787dae
Remove data repository module
Tlaster May 19, 2026
77dd9f9
Reorganize modules into architecture layers
Tlaster May 19, 2026
91c7e42
Split settings capability from datastore storage
Tlaster May 19, 2026
2814caa
Remove settings repository wrapper
Tlaster May 19, 2026
2d79f09
Remove account exception aliases
Tlaster May 19, 2026
46c35c3
Introduce shared file storage
Tlaster May 19, 2026
125387c
Inject file storage through DI
Tlaster May 19, 2026
9b7e82e
Simplify draft file item creation
Tlaster May 19, 2026
a145eb0
Unify draft media file name fallback
Tlaster May 19, 2026
9a3b2ef
Add FileItem loader constructor
Tlaster May 19, 2026
8967365
Reuse shared file name sanitizer
Tlaster May 19, 2026
02ed717
Use FileStorage for legacy settings migration
Tlaster May 19, 2026
1b6cafb
Route app file paths through FileStorage
Tlaster May 19, 2026
27f374f
Move import export state to features
Tlaster May 19, 2026
27fa328
Split timeline specs by loader type
Tlaster May 19, 2026
c453495
Remove simple timeline presenter wrappers
Tlaster May 19, 2026
9b35fff
Decouple timeline specs from presenters
Tlaster May 19, 2026
e214821
refactor(timeline): add storage-free timeline model
Tlaster May 19, 2026
7550384
refactor(timeline): add presentation persistence mapper scaffold
Tlaster May 19, 2026
6e13efb
refactor(platform): expose typed timeline specs from social platform …
Tlaster May 19, 2026
087ceb7
refactor(microblog): add descriptor-based tab provider bridges
Tlaster May 19, 2026
1dc4880
refactor(tabs): migrate datasource tab outputs to descriptors
Tlaster May 19, 2026
b8cdb72
refactor(tabs): remove presenter creation from timeline tab items
Tlaster May 19, 2026
dcb2157
refactor(microblog): merge shared runtime helpers into social microblog
Tlaster May 19, 2026
734772c
refactor(social-mastodon): move mastodon datasource into module
Tlaster May 19, 2026
3dc9242
refactor(social-misskey): move misskey datasource into module
Tlaster May 19, 2026
33edbbe
refactor(social-bluesky): move bluesky datasource into module
Tlaster May 19, 2026
83c9caf
refactor(social-xqt-vvo): move xqt and vvo datasources into modules
Tlaster May 19, 2026
77c3cde
refactor(social-rss): move rss timeline runtime into module
Tlaster May 19, 2026
9335491
refactor(social-nostr): move nostr datasource into non-web module
Tlaster May 19, 2026
fa33cb0
refactor(timeline): remove legacy storage-coupled timeline APIs
Tlaster May 19, 2026
7c6ef72
test(timeline): cover timeline mapping and platform registry
Tlaster May 19, 2026
e7b2709
refactor: decouple platform modules from capability:account
Tlaster May 19, 2026
47f1e76
refactor: decouple social:microblog from high-level translation and s…
Tlaster May 19, 2026
621de48
refactor: decouple social:rss from sibling platform social:mastodon u…
Tlaster May 19, 2026
cce5b58
fix(timeline): restore modular timeline build
Tlaster May 19, 2026
2e680c6
fix(timeline): preserve disabled group children
Tlaster May 19, 2026
53e3eba
test(microblog): move action menu helper to tests
Tlaster May 19, 2026
db61f1c
refactor(social): type subscription timeline keys
Tlaster May 19, 2026
3695372
build: detect module dependency cycles
Tlaster May 19, 2026
17efd74
chore(build): harden modular checks
Tlaster May 20, 2026
18910fb
test: move platform-only coverage to nonWeb
Tlaster May 20, 2026
563bf1f
fix(timeline): restore migrated presenter exports
Tlaster May 20, 2026
d83b352
chore(ktlint): normalize modular sources
Tlaster May 20, 2026
1f487f7
Add shared memory database builder
Tlaster May 20, 2026
50de927
Migrate draft tests to shared database helper
Tlaster May 20, 2026
b9ea7b4
Migrate presentation tests to shared database helper
Tlaster May 20, 2026
a9ab9da
Migrate draft tests to common
Tlaster May 20, 2026
3e6fe7e
Move date-time UI models to core
Tlaster May 20, 2026
4f28914
Move ComposeStatus to microblog
Tlaster May 20, 2026
23a1760
Move draft use cases into draft module
Tlaster May 20, 2026
4a1c9a8
chore: scaffold modular project layout
Tlaster May 20, 2026
630db4c
refactor: move infrastructure modules under foundation
Tlaster May 20, 2026
0851182
refactor: move presenter runtime under ui
Tlaster May 20, 2026
362d536
refactor: split common ui models from presentation model
Tlaster May 20, 2026
367e256
refactor: split account and social models by ownership
Tlaster May 20, 2026
6d5b034
refactor: move local and draft ui models to owning modules
Tlaster May 20, 2026
df46df4
refactor: move capability data into business modules
Tlaster May 20, 2026
dd243c5
refactor: move draft presentation into draft module
Tlaster May 20, 2026
f0788fe
refactor: centralize module wiring in app composition roots
Tlaster May 20, 2026
9832f8e
chore: remove legacy module aggregators
Tlaster May 20, 2026
d239bdc
Unify platform dispatchers
Tlaster May 21, 2026
3efac13
Move UiDateTime to core model
Tlaster May 21, 2026
11305a6
Add core humanizer module
Tlaster May 21, 2026
df4efc8
Move humanizer formatters to core
Tlaster May 21, 2026
50d34e3
Clean up humanizer dependencies
Tlaster May 21, 2026
b20d02b
Limit deeplink internal API surface
Tlaster May 21, 2026
5c25b0b
Move file primitives into filesystem foundation
Tlaster May 21, 2026
d52270b
Point file consumers at filesystem foundation
Tlaster May 21, 2026
235168f
Remove file APIs from core common
Tlaster May 21, 2026
9d2e83e
Move SwitchingServiceManager into nostr
Tlaster May 21, 2026
b5cc4f9
Move DataExport into presentation features
Tlaster May 21, 2026
f7ba8b9
Move ReferenceType into social model
Tlaster May 21, 2026
4809d1e
Move RssDisplayMode into RSS model module
Tlaster May 21, 2026
a23a8d4
Move account types into account model module
Tlaster May 21, 2026
acffdab
Move account exceptions into account api
Tlaster May 21, 2026
e2cba24
Move deeplink into foundation
Tlaster May 21, 2026
b4f9013
Move translation display options into translation model
Tlaster May 21, 2026
6a9911c
Move translation settings provider into translation api
Tlaster May 21, 2026
710f78d
Move translation display mapping into cache mapper
Tlaster May 21, 2026
c1d7910
Move translation cache models into translation model
Tlaster May 21, 2026
13f35f1
Remove createFileStorage factory
Tlaster May 21, 2026
9c6373a
Move account exception into API module
Tlaster May 21, 2026
02c0140
Move on-device AI implementations into ai data module
Tlaster May 21, 2026
8af6f65
Refactor draft models into model module
Tlaster May 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
20 changes: 8 additions & 12 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -85,14 +85,6 @@ android {
}
}

// START Non-FOSS component
if (project.file("google-services.json").exists()) {
sourceSets.getByName("main").kotlin.directories.add("src/play/java")
}
// END Non-FOSS component
if (!project.file("google-services.json").exists()){
sourceSets.getByName("main").kotlin.directories.add("src/foss/java")
}
}

dependencies {
Expand Down Expand Up @@ -123,7 +115,14 @@ dependencies {
implementation(libs.androidx.window)
coreLibraryDesugaring(libs.desugar.jdk.libs)
implementation(libs.compose.webview)
implementation(projects.shared)
implementation(projects.presentation.features)
implementation(projects.core.humanizer)
implementation(projects.modules.draft.presentation)
implementation(projects.modules.ai.data)
implementation(projects.foundation.network)
implementation(projects.foundation.filesystem)
implementation(projects.social.rss)
implementation(projects.social.rss.model)
implementation(projects.composeUi)
implementation(libs.androidx.splash)
implementation(libs.materialKolor)
Expand All @@ -142,9 +141,6 @@ dependencies {
implementation(platform(libs.firebase.bom))
implementation(libs.firebase.crashlytics.ktx)
implementation(libs.firebase.analytics.ktx)
implementation(libs.kotlinx.coroutines.play.services)
implementation("com.google.mlkit:genai-prompt:1.0.0-beta2")
implementation("com.google.mlkit:genai-summarization:1.0.0-beta1")
}
// END Non-FOSS component

Expand Down
10 changes: 0 additions & 10 deletions app/src/foss/java/dev/dimension/flare/di/AiModule.kt

This file was deleted.

3 changes: 1 addition & 2 deletions app/src/main/java/dev/dimension/flare/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import dev.dimension.flare.common.AnimatedPngDecoder
import dev.dimension.flare.common.AnimatedWebPDecoder
import dev.dimension.flare.data.network.ktorClient
import dev.dimension.flare.di.KoinHelper
import dev.dimension.flare.di.aiModule
import dev.dimension.flare.di.androidModule
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin
Expand All @@ -28,7 +27,7 @@ class App :
super.onCreate()
startKoin {
androidContext(this@App)
modules(KoinHelper.modules() + androidModule + aiModule)
modules(KoinHelper.modules() + androidModule)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package dev.dimension.flare.common

import androidx.annotation.StringRes
import dev.dimension.flare.R
import dev.dimension.flare.data.repository.LoginExpiredException
import dev.dimension.flare.model.LoginExpiredException
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow

Expand Down
3 changes: 2 additions & 1 deletion app/src/main/java/dev/dimension/flare/ui/route/Route.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package dev.dimension.flare.ui.route
import androidx.compose.runtime.Immutable
import androidx.navigation3.runtime.NavKey
import dev.dimension.flare.data.model.tab.TimelineSourceRef
import dev.dimension.flare.data.model.tab.xqtDeviceFollowTimelineSource
import dev.dimension.flare.model.AccountType
import dev.dimension.flare.model.MicroBlogKey
import kotlinx.collections.immutable.ImmutableMap
Expand Down Expand Up @@ -470,7 +471,7 @@ internal sealed interface Route : NavKey {
(deeplinkRoute.accountType as? AccountType.Specific)?.accountKey
?: return null
Route.Timeline(
source = TimelineSourceRef.xqtDeviceFollow(accountKey),
source = xqtDeviceFollowTimelineSource(accountKey),
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ import compose.icons.fontawesomeicons.solid.SquarePollHorizontal
import compose.icons.fontawesomeicons.solid.TriangleExclamation
import compose.icons.fontawesomeicons.solid.Xmark
import dev.dimension.flare.R
import dev.dimension.flare.common.FileItem
import dev.dimension.flare.data.io.FileItem
import dev.dimension.flare.data.datasource.microblog.ComposeConfig
import dev.dimension.flare.data.datasource.microblog.ComposeData
import dev.dimension.flare.data.model.PostActionStyle
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.fromHtml
import dev.dimension.flare.BuildConfig
import dev.dimension.flare.R
import dev.dimension.flare.data.repository.SettingsRepository
import dev.dimension.flare.data.datastore.AppDataStore
import dev.dimension.flare.ui.model.UiState
import dev.dimension.flare.ui.model.collectAsUiState
import dev.dimension.flare.ui.model.map
Expand All @@ -20,7 +20,7 @@ import org.koin.compose.koinInject
@Composable
internal fun changeLogPresenter(
context: Context = koinInject(),
repository: SettingsRepository = koinInject(),
repository: AppDataStore = koinInject(),
): ChangeLogState {
val scope = rememberCoroutineScope()
val appSettings by repository.appSettings.collectAsUiState()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import compose.icons.FontAwesomeIcons
import compose.icons.fontawesomeicons.Solid
import compose.icons.fontawesomeicons.solid.Rss
import dev.dimension.flare.R
import dev.dimension.flare.common.FileItem
import dev.dimension.flare.data.io.FileItem
import dev.dimension.flare.data.datasource.microblog.list.ListMetaData
import dev.dimension.flare.data.datasource.microblog.list.ListMetaDataType
import dev.dimension.flare.model.AccountType
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ import compose.icons.fontawesomeicons.solid.Rss
import compose.icons.fontawesomeicons.solid.Trash
import compose.icons.fontawesomeicons.solid.UserPen
import dev.dimension.flare.R
import dev.dimension.flare.common.FileItem
import dev.dimension.flare.data.io.FileItem
import dev.dimension.flare.common.onEmpty
import dev.dimension.flare.common.onError
import dev.dimension.flare.common.onLoading
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import dev.dimension.flare.data.model.IconType
import dev.dimension.flare.data.model.tab.SourceTimelineTabItemV2
import dev.dimension.flare.ui.model.UiIcon
import dev.dimension.flare.ui.model.UiText
import dev.dimension.flare.ui.presenter.list.ListTimelinePresenter
import dev.dimension.flare.ui.presenter.list.createListTimeline
import dev.dimension.flare.ui.route.Route
import dev.dimension.flare.ui.screen.home.TimelineScreen

Expand Down Expand Up @@ -63,7 +63,7 @@ internal fun EntryProviderScope<NavKey>.listEntryBuilder(
title = UiText.Raw(args.title),
icon = IconType.Material(UiIcon.List),
createPresenter = {
ListTimelinePresenter(
createListTimeline(
accountType = args.accountType,
listId = args.listId,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ import dev.dimension.flare.ui.component.FAIcon
import dev.dimension.flare.ui.component.FlareScaffold
import dev.dimension.flare.ui.model.UiIcon
import dev.dimension.flare.ui.model.UiText
import dev.dimension.flare.ui.presenter.list.AntennasTimelinePresenter
import dev.dimension.flare.ui.presenter.list.ChannelTimelinePresenter
import dev.dimension.flare.ui.presenter.list.createMisskeyAntennaTimeline
import dev.dimension.flare.ui.presenter.list.createMisskeyChannelTimeline
import dev.dimension.flare.ui.route.Route
import dev.dimension.flare.ui.screen.home.TimelineScreen

Expand Down Expand Up @@ -64,7 +64,7 @@ internal fun EntryProviderScope<NavKey>.misskeyEntryBuilder(
title = UiText.Raw(args.title),
icon = IconType.Material(UiIcon.Rss),
createPresenter = {
AntennasTimelinePresenter(
createMisskeyAntennaTimeline(
accountType = args.accountType,
id = args.antennaId,
)
Expand Down Expand Up @@ -104,7 +104,7 @@ internal fun EntryProviderScope<NavKey>.misskeyEntryBuilder(
title = UiText.Raw(args.title),
icon = IconType.Material(UiIcon.List),
createPresenter = {
ChannelTimelinePresenter(
createMisskeyChannelTimeline(
accountType = args.accountType,
id = args.channelId,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ import compose.icons.fontawesomeicons.solid.Language
import compose.icons.fontawesomeicons.solid.ShareNodes
import dev.dimension.flare.R
import dev.dimension.flare.common.encodeJson
import dev.dimension.flare.data.datastore.AppDataStore
import dev.dimension.flare.data.network.rss.DocumentData
import dev.dimension.flare.data.repository.SettingsRepository
import dev.dimension.flare.ui.component.BackButton
import dev.dimension.flare.ui.component.DateTimeText
import dev.dimension.flare.ui.component.FAIcon
Expand Down Expand Up @@ -362,7 +362,7 @@ private fun presenter(
url: String,
descriptionHtml: String? = null,
descriptionTitle: String? = null,
settingsRepository: SettingsRepository = koinInject(),
appDataStore: AppDataStore = koinInject(),
) = run {
val state =
remember(url, descriptionHtml) {
Expand All @@ -377,10 +377,10 @@ private fun presenter(
)
}
val enableTldr by remember {
settingsRepository.appSettings.map { it.aiConfig.tldr }
appDataStore.appSettings.map { it.aiConfig.tldr }
}.collectAsUiState()
val preTranslate by remember {
settingsRepository.appSettings.map { it.translateConfig.preTranslate }
appDataStore.appSettings.map { it.translateConfig.preTranslate }
}.collectAsUiState()
var showTldr by remember { mutableStateOf(false) }
var tldrRefreshKey by remember { mutableIntStateOf(0) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import dev.dimension.flare.ui.component.FAIcon
import dev.dimension.flare.ui.component.FlareScaffold
import dev.dimension.flare.ui.model.UiIcon
import dev.dimension.flare.ui.model.UiText
import dev.dimension.flare.ui.presenter.home.rss.RssTimelinePresenter
import dev.dimension.flare.ui.presenter.home.rss.createRssTimeline
import dev.dimension.flare.ui.route.Route
import dev.dimension.flare.ui.screen.home.TimelineScreen

Expand Down Expand Up @@ -81,7 +81,7 @@ internal fun EntryProviderScope<NavKey>.rssEntryBuilder(
IconType.Url(args.favIcon)
} ?: IconType.Material(UiIcon.Rss),
createPresenter = {
RssTimelinePresenter(args.url)
createRssTimeline(args.url)
},
)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ import compose.icons.fontawesomeicons.solid.CircleCheck
import compose.icons.fontawesomeicons.solid.CircleChevronDown
import compose.icons.fontawesomeicons.solid.CircleXmark
import dev.dimension.flare.R
import dev.dimension.flare.data.database.app.model.RssDisplayMode
import dev.dimension.flare.data.database.app.model.SubscriptionType
import dev.dimension.flare.model.RssDisplayMode
import dev.dimension.flare.ui.component.FAIcon
import dev.dimension.flare.ui.component.NetworkImage
import dev.dimension.flare.ui.model.UiRssSource
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ import compose.icons.fontawesomeicons.solid.List
import compose.icons.fontawesomeicons.solid.Plus
import compose.icons.fontawesomeicons.solid.Trash
import dev.dimension.flare.R
import dev.dimension.flare.data.repository.LoginExpiredException
import dev.dimension.flare.model.LoginExpiredException
import dev.dimension.flare.model.MicroBlogKey
import dev.dimension.flare.model.PlatformType
import dev.dimension.flare.ui.component.AvatarComponent
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import dev.dimension.flare.data.datastore.AppDataStore
import dev.dimension.flare.data.model.appearance.AppearanceKey
import dev.dimension.flare.data.model.appearance.AppearancePatch
import dev.dimension.flare.data.repository.SettingsRepository
import dev.dimension.flare.ui.component.FlareDropdownMenu
import dev.dimension.flare.ui.component.platform.isBigScreen
import dev.dimension.flare.ui.model.UiState
Expand Down Expand Up @@ -116,9 +116,9 @@ internal interface AppearanceSettingsUpdater : AppearanceState {
internal fun appearancePresenter(): AppearanceSettingsUpdater =
run {
val scope = rememberCoroutineScope()
val settingsRepository = koinInject<SettingsRepository>()
val appDataStore = koinInject<AppDataStore>()
val appearanceState = remember { AppearancePresenter() }.invoke()
val appearance by settingsRepository.appearancePatch.collectAsUiState()
val appearance by appDataStore.appearancePatch.collectAsUiState()

object : AppearanceSettingsUpdater, AppearanceState by appearanceState {
override val appearance: UiState<AppearancePatch> = appearance
Expand All @@ -128,19 +128,19 @@ internal fun appearancePresenter(): AppearanceSettingsUpdater =
value: T,
) {
scope.launch {
settingsRepository.updateAppearance(key, value)
appDataStore.updateAppearance(key, value)
}
}

override fun clear(key: AppearanceKey<*>) {
scope.launch {
settingsRepository.clearAppearance(key)
appDataStore.clearAppearance(key)
}
}

override fun updateFontScale(fontSizeDiff: Float) {
scope.launch {
settingsRepository.updateAppearance {
appDataStore.updateAppearance {
set(dev.dimension.flare.data.model.appearance.AppearanceKeys.FontSizeDiff, fontSizeDiff)
.set(dev.dimension.flare.data.model.appearance.AppearanceKeys.LineHeightDiff, fontSizeDiff * 2)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ import com.github.skydoves.colorpicker.compose.ColorEnvelope
import com.github.skydoves.colorpicker.compose.HsvColorPicker
import com.github.skydoves.colorpicker.compose.rememberColorPickerController
import dev.dimension.flare.R
import dev.dimension.flare.data.datastore.AppDataStore
import dev.dimension.flare.data.model.appearance.AppearanceKeys
import dev.dimension.flare.data.repository.SettingsRepository
import dev.dimension.flare.ui.component.LocalGlobalAppearance
import dev.dimension.flare.ui.component.LocalTimelineAppearance
import kotlinx.coroutines.CoroutineScope
Expand Down Expand Up @@ -100,7 +100,7 @@ internal fun ColorPickerDialog(onBack: () -> Unit) {
@Composable
private fun presenter(
initialColor: ULong,
settingsRepository: SettingsRepository = koinInject(),
appDataStore: AppDataStore = koinInject(),
coroutineScope: CoroutineScope = koinInject(),
) = run {
var selectedColor by remember { mutableStateOf(Color(initialColor)) }
Expand All @@ -112,7 +112,7 @@ private fun presenter(

fun confirm() {
coroutineScope.launch {
settingsRepository.updateAppearance(AppearanceKeys.ColorSeed, selectedColor.value)
appDataStore.updateAppearance(AppearanceKeys.ColorSeed, selectedColor.value)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ import compose.icons.fontawesomeicons.solid.Download
import compose.icons.fontawesomeicons.solid.Image
import compose.icons.fontawesomeicons.solid.Link
import dev.dimension.flare.R
import dev.dimension.flare.data.io.sanitizeFileName
import dev.dimension.flare.data.model.VideoAutoplay
import dev.dimension.flare.model.AccountType
import dev.dimension.flare.model.MicroBlogKey
Expand Down Expand Up @@ -539,8 +540,6 @@ private fun View.findCaptureHostView(): ViewGroup? =
?: rootView as? ViewGroup
?: parent as? ViewGroup

private fun String.sanitizeForFileName(): String = replace(Regex("[^A-Za-z0-9._-]"), "_")

private fun saveBitmapToDownloads(
context: Context,
bitmap: Bitmap,
Expand All @@ -551,7 +550,7 @@ private fun saveBitmapToDownloads(
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream)
stream.toByteArray()
}
val fileName = "status_${statusKey.sanitizeForFileName()}_${System.currentTimeMillis()}.png"
val fileName = "status_${statusKey.sanitizeFileName()}_${System.currentTimeMillis()}.png"
saveByteArrayToDownloads(
context = context,
byteArray = bytes,
Expand All @@ -571,7 +570,11 @@ private fun shareBitmapAsImage(
if (bitmap.width <= 0 || bitmap.height <= 0) {
return null
}
val file = File(context.cacheDir, "status_share_${statusKey.sanitizeForFileName()}_${System.currentTimeMillis()}.png")
val file =
File(
context.cacheDir,
"status_share_${statusKey.sanitizeFileName()}_${System.currentTimeMillis()}.png",
)
FileOutputStream(file).use {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, it)
}
Expand Down
10 changes: 0 additions & 10 deletions app/src/play/java/dev/dimension/flare/di/AiModule.kt

This file was deleted.

Loading
Loading