Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
14 changes: 7 additions & 7 deletions lib/src/controller/controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,10 @@ class AppController with ChangeNotifier {
);

if (_servers.isEmpty || _accounts.isEmpty || _selectedAccount.isEmpty) {
await saveServer(ServerSoftware.mbin, 'kbin.earth');
await saveServer(defaultSoftware, defaultInstance);
await setAccount(
'@kbin.earth',
const Account(handle: '@kbin.earth', isPushRegistered: false),
defaultAccount,
const Account(handle: defaultAccount, isPushRegistered: false),
switchNow: true,
);
}
Expand Down Expand Up @@ -607,7 +607,7 @@ class AppController with ChangeNotifier {
_rebuildProfile();

_accounts.remove(key);
_selectedAccount = _accounts.keys.firstOrNull ?? '@kbin.earth';
_selectedAccount = _accounts.keys.firstOrNull ?? defaultAccount;

// If there are no accounts left from a server, then remove the server's data
final keyAccountServer = key.split('@').last;
Expand All @@ -634,10 +634,10 @@ class AppController with ChangeNotifier {

// Ensure default guest account remains
if (_servers.isEmpty || _accounts.isEmpty || _selectedAccount.isEmpty) {
await saveServer(ServerSoftware.mbin, 'kbin.earth');
await saveServer(defaultSoftware, defaultInstance);
await setAccount(
'@kbin.earth',
const Account(handle: '@kbin.earth', isPushRegistered: false),
defaultAccount,
const Account(handle: defaultAccount, isPushRegistered: false),
switchNow: true,
);
}
Expand Down
13 changes: 11 additions & 2 deletions lib/src/controller/database/database.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,15 @@ import 'package:sembast/sembast_io.dart';

part 'database.g.dart';

final ServerSoftware defaultSoftware = ServerSoftware.values.byName(
const String.fromEnvironment('defaultSoftware', defaultValue: 'mbin'),
);
const defaultInstance = String.fromEnvironment(
'defaultInstance',
defaultValue: 'kbin.earth',
);
const defaultAccount = '@$defaultInstance';

class CredentialsConverter extends TypeConverter<Credentials, String>
with JsonTypeConverter2<Credentials, String, String> {
const CredentialsConverter();
Expand Down Expand Up @@ -58,7 +67,7 @@ class CredentialsConverter extends TypeConverter<Credentials, String>
@TableIndex(name: 'account_unifiedpushToken', columns: {#unifiedpushToken})
class Accounts extends Table {
TextColumn get handle =>
text().withLength(min: 1).clientDefault(() => '@kbin.earth')();
text().withLength(min: 1).clientDefault(() => defaultAccount)();
TextColumn get oauth => text().map(const CredentialsConverter()).nullable()();
TextColumn get jwt => text().nullable()();
BoolColumn get isPushRegistered =>
Expand Down Expand Up @@ -363,7 +372,7 @@ class MiscCache extends Table {
)();
TextColumn get selectedAccount => text()
.references(Accounts, #handle, onDelete: KeyAction.setDefault)
.clientDefault(() => '@kbin.earth')();
.clientDefault(() => defaultAccount)();
TextColumn get webPushKeys => text().nullable()();
TextColumn get downloadsDir => text().nullable()();
BoolColumn get expandNavDrawer =>
Expand Down
80 changes: 45 additions & 35 deletions lib/src/controller/router.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,45 +10,55 @@ class AppRouter extends RootStackRouter {

@override
List<AutoRoute> get routes => [
AutoRoute(page: AppHome.page, path: '/'),
AutoRoute(page: FeedRoute.page, path: '/feed'),
AutoRoute(page: ExploreRoute.page, path: '/explore'),
AutoRoute(
page: AppInstanceRoute.page,
path: '/:instance',
children: [
AutoRoute(page: AppHome.page, path: ''),
AutoRoute(page: FeedRoute.page, path: 'feed'),
AutoRoute(page: ExploreRoute.page, path: 'explore'),

AutoRoute(page: ThreadRoute.page, path: '/thread/:id'),
AutoRoute(page: MicroblogRoute.page, path: '/microblog/:id'),
AutoRoute(page: PostCommentRoute.page, path: '/comment/:id'),
AutoRoute(page: ContentReplyRoute.page, path: '/reply'),
AutoRoute(page: ThreadRoute.page, path: 'c/:communityName/thread/:id'),
AutoRoute(
page: MicroblogRoute.page,
path: 'c/:communityName/microblog/:id',
),
AutoRoute(page: PostCommentRoute.page, path: 'comment/:id'),
AutoRoute(page: ContentReplyRoute.page, path: 'reply'),

AutoRoute(page: UserRoute.page, path: '/user/:userId'),
AutoRoute(page: ModLogUserRoute.page, path: '/user/:userId/modlog'),
AutoRoute(page: MessageThreadRoute.page, path: '/user/:userId/message'),
AutoRoute(page: UserRoute.page, path: 'u/:username'),
AutoRoute(page: ModLogUserRoute.page, path: 'u/:username/modlog'),
AutoRoute(page: MessageThreadRoute.page, path: 'u/:username/message'),

AutoRoute(page: CommunityRoute.page, path: '/community/:communityId'),
AutoRoute(
page: ModLogCommunityRoute.page,
path: '/community/:communityId/modlog',
),
AutoRoute(
page: CommunityModPanelRoute.page,
path: '/community/:communityId/mod',
),
AutoRoute(
page: CommunityOwnerPanelRoute.page,
path: '/community/:communityId/owner',
),
AutoRoute(page: CommunityRoute.page, path: 'c/:communityName'),
AutoRoute(
page: ModLogCommunityRoute.page,
path: 'c/:communityName/modlog',
),
AutoRoute(
page: CommunityModPanelRoute.page,
path: 'c/:communityName/mod',
),
AutoRoute(
page: CommunityOwnerPanelRoute.page,
path: 'c/:communityName/owner',
),

AutoRoute(page: ModLogRoute.page, path: '/modlog'),
AutoRoute(page: DomainRoute.page, path: '/domain'),
AutoRoute(page: CreateRoute.page, path: '/create'),
AutoRoute(page: AdvancedImageRoute.page, path: '/image'),
AutoRoute(page: TagUsersRoute.page, path: '/tags/:tag'),
AutoRoute(page: TagEditorRoute.page, path: '/tags-editor/:tag'),
AutoRoute(page: BookmarkListRoute.page, path: '/bookmarks'),
AutoRoute(page: BookmarksRoute.page, path: '/bookmarks/:bookmarkList'),
AutoRoute(page: ProfileEditRoute.page, path: '/account/edit'),
AutoRoute(page: EditProfileRoute.page, path: '/profile/edit'),
AutoRoute(page: EditFilterListRoute.page, path: '/filter/:filterList'),
AutoRoute(page: EditFeedRoute.page, path: '/feed/:feed/edit'),
AutoRoute(page: ModLogRoute.page, path: 'modlog'),
AutoRoute(page: DomainRoute.page, path: 'domain'),
AutoRoute(page: CreateRoute.page, path: 'create'),
AutoRoute(page: AdvancedImageRoute.page, path: 'image'),
AutoRoute(page: TagUsersRoute.page, path: 'tags/:tag'),
AutoRoute(page: TagEditorRoute.page, path: 'tags-editor/:tag'),
AutoRoute(page: BookmarkListRoute.page, path: 'bookmarks'),
AutoRoute(page: BookmarksRoute.page, path: 'bookmarks/:bookmarkList'),
AutoRoute(page: ProfileEditRoute.page, path: 'account/edit'),
AutoRoute(page: EditProfileRoute.page, path: 'profile/edit'),
AutoRoute(page: EditFilterListRoute.page, path: 'filter/:filterList'),
AutoRoute(page: EditFeedRoute.page, path: 'feed/:feed/edit'),
],
),
RedirectRoute(path: '/', redirectTo: '/$defaultInstance'),

//settings
AutoRoute(page: BehaviorSettingsRoute.page, path: '/settings/behavior'),
Expand Down
5 changes: 4 additions & 1 deletion lib/src/screens/account/messages/message_thread_item.dart
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,10 @@ class MessageThreadItem extends StatelessWidget {
currMessage.sender.name,
icon: currMessage.sender.avatar,
onTap: () => context.router.push(
UserRoute(userId: currMessage.sender.id),
UserRoute(
username: currMessage.sender.name,
userId: currMessage.sender.id,
),
),
),
],
Expand Down
6 changes: 5 additions & 1 deletion lib/src/screens/account/notification/notification_item.dart
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,10 @@ class _NotificationItemState extends State<NotificationItem> {
widget.item.creator!.name,
icon: widget.item.creator!.avatar,
onTap: () => context.router.push(
UserRoute(userId: widget.item.creator!.id),
UserRoute(
username: widget.item.creator!.name,
userId: widget.item.creator!.id,
),
),
),
),
Expand All @@ -208,6 +211,7 @@ class _NotificationItemState extends State<NotificationItem> {
icon: bannedCommunity.icon,
onTap: () => context.router.push(
CommunityRoute(
communityName: bannedCommunity.name,
communityId: bannedCommunity.id,
),
),
Expand Down
2 changes: 1 addition & 1 deletion lib/src/screens/account/self_feed.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,6 @@ class _SelfFeedState extends State<SelfFeed>

final user = _meUser!;

return UserScreen(user.id, initData: _meUser);
return UserScreen(username: user.name, userId: user.id, initData: _meUser);
}
}
17 changes: 17 additions & 0 deletions lib/src/screens/app_home.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:interstellar/src/controller/controller.dart';
import 'package:interstellar/src/controller/router.dart';
import 'package:interstellar/src/controller/router.gr.dart';
import 'package:interstellar/src/screens/account/inbox_screen.dart';
import 'package:interstellar/src/screens/account/notification/notification_badge.dart';
Expand All @@ -20,6 +21,21 @@ import 'package:interstellar/src/widgets/wrapper.dart';
import 'package:material_symbols_icons/symbols.dart';
import 'package:provider/provider.dart';

@RoutePage()
class AppInstanceScreen extends StatelessWidget {
const AppInstanceScreen({
@PathParam('instance') required this.instance,
super.key,
});

final String instance;

@override
Widget build(BuildContext context) {
return const Scaffold(body: AutoRouter());
}
}

@RoutePage()
class AppHome extends StatefulWidget {
const AppHome({super.key});
Expand Down Expand Up @@ -123,6 +139,7 @@ class _AppHomeState extends State<AppHome> {
_accountKey = UniqueKey();
_inboxKey = UniqueKey();
});
context.router.root.replace(AppInstanceRoute(instance: ac.instanceHost));
};

final notCompact = !Breakpoints.isCompact(context);
Expand Down
1 change: 1 addition & 0 deletions lib/src/screens/explore/bookmarks_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ class _BookmarksScreenState extends State<BookmarksScreen> {
_pagingController.updateItem(newValue.id, newValue),
onTap: () => pushPostPage(
context,
communityName: item.community.name,
postId: item.id,
postType: item.type,
initData: item,
Expand Down
6 changes: 5 additions & 1 deletion lib/src/screens/explore/community_mod_panel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ class _MagazineModPanelReportsState extends State<CommunityModPanelReports> {
if (item.subjectPost != null) {
pushPostPage(
context,
communityName: item.subjectPost!.community.name,
postId: item.subjectPost!.id,
postType: item.subjectPost!.type,
initData: item.subjectPost,
Expand Down Expand Up @@ -255,7 +256,10 @@ class _MagazineModPanelReportsState extends State<CommunityModPanelReports> {
item.reportedBy!.name,
icon: item.reportedBy!.avatar,
onTap: () => context.router.push(
UserRoute(userId: item.reportedBy!.id),
UserRoute(
username: item.reportedBy!.name,
userId: item.reportedBy!.id,
),
),
),
],
Expand Down
33 changes: 21 additions & 12 deletions lib/src/screens/explore/community_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,16 @@ import 'package:provider/provider.dart';

@RoutePage()
class CommunityScreen extends StatefulWidget {
const CommunityScreen(
@PathParam('communityId') this.communityId, {
const CommunityScreen({
@PathParam('communityName') required this.communityName,
this.communityId,
super.key,
this.initData,
this.onUpdate,
});

final int communityId;
final String communityName;
final int? communityId;
final DetailedCommunityModel? initData;
final void Function(DetailedCommunityModel)? onUpdate;

Expand All @@ -47,21 +49,28 @@ class _CommunityScreenState extends State<CommunityScreen> {
_data = widget.initData;

if (_data == null) {
context.read<AppController>().api.community.get(widget.communityId).then((
value,
) {
if (!mounted) return;
setState(() {
_data = value;
});
});
(widget.communityId == null
? context.read<AppController>().api.community.getByName(
widget.communityName,
)
: context.read<AppController>().api.community.get(
widget.communityId!,
))
.then((value) {
if (!mounted) return;
setState(() {
_data = value;
});
});
}
}

@override
Widget build(BuildContext context) {
final ac = context.watch<AppController>();

if (_data == null) return Container();

final globalName = _data == null
? null
: _data!.name.contains('@')
Expand All @@ -72,7 +81,7 @@ class _CommunityScreenState extends State<CommunityScreen> {
feed: FeedAggregator.fromSingleSource(
name: _data?.name ?? '',
source: FeedSource.community,
sourceId: widget.communityId,
sourceId: _data?.id,
),
createPostCommunity: _data,
details: _data == null
Expand Down
15 changes: 13 additions & 2 deletions lib/src/screens/explore/explore_screen_item.dart
Original file line number Diff line number Diff line change
Expand Up @@ -111,10 +111,20 @@ class ExploreScreenItem extends StatelessWidget {
};
final navigate = switch (item) {
final DetailedCommunityModel i => () => context.router.push(
CommunityRoute(communityId: i.id, initData: i, onUpdate: onUpdate),
CommunityRoute(
communityName: i.name,
communityId: i.id,
initData: i,
onUpdate: onUpdate,
),
),
final DetailedUserModel i => () => context.router.push(
UserRoute(userId: i.id, initData: i, onUpdate: onUpdate),
UserRoute(
username: i.name,
userId: i.id,
initData: i,
onUpdate: onUpdate,
),
),
final DomainModel i => () => context.router.push(
DomainRoute(domainId: i.id, initData: i, onUpdate: onUpdate),
Expand Down Expand Up @@ -195,6 +205,7 @@ class ExploreScreenItem extends StatelessWidget {
child: InkWell(
onTap: () => pushPostPage(
context,
communityName: item.community.name,
postId: item.id,
postType: item.type,
initData: item,
Expand Down
Loading