mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-26 16:46:51 +08:00
RepoManager: Implement deleting a repo
This is ugly as fuck. All of the settings pages need a more coherent look and feel, and need to be organized better. This finished the implementation of multiple repos. Fixes #229
This commit is contained in:
@ -152,6 +152,7 @@ settings:
|
||||
title: Bottom Menu Bar
|
||||
subtitle: Configure its appearance and behaviour
|
||||
enable: Enable Buttom Menu Bar
|
||||
deleteRepo: Delete Repository
|
||||
|
||||
editors:
|
||||
checklist:
|
||||
|
@ -88,4 +88,28 @@ class RepositoryManager with ChangeNotifier {
|
||||
Log.i("Switching to repo with id: $id");
|
||||
await buildActiveRepository();
|
||||
}
|
||||
|
||||
Future<void> deleteCurrent() async {
|
||||
if (repoIds.length == 1) {
|
||||
throw Exception("Last Repo cannot be deleted");
|
||||
}
|
||||
|
||||
Log.i("Deleting repo: $currentId");
|
||||
|
||||
var i = repoIds.indexOf(currentId);
|
||||
|
||||
var repoPath = _repo.repoPath;
|
||||
var cachePath = _repo.cacheDir;
|
||||
|
||||
await Directory(repoPath).delete(recursive: true);
|
||||
await Directory(cachePath).delete(recursive: true);
|
||||
|
||||
repoIds.removeAt(i);
|
||||
|
||||
i = i.clamp(0, repoIds.length - 1);
|
||||
currentId = repoIds[i];
|
||||
|
||||
await _save();
|
||||
await buildActiveRepository();
|
||||
}
|
||||
}
|
||||
|
@ -180,7 +180,9 @@ class _GitRemoteSettingsScreenState extends State<GitRemoteSettingsScreen> {
|
||||
void _resetGitHost() async {
|
||||
var ok = await showDialog(
|
||||
context: context,
|
||||
builder: (_) => HostChangeConfirmationDialog(),
|
||||
builder: (_) => IrreversibleActionConfirmationDialog(
|
||||
tr("settings.gitRemote.changeHost.title"),
|
||||
),
|
||||
);
|
||||
if (ok == null) {
|
||||
return;
|
||||
@ -266,11 +268,15 @@ class RedButton extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
class HostChangeConfirmationDialog extends StatelessWidget {
|
||||
class IrreversibleActionConfirmationDialog extends StatelessWidget {
|
||||
final String title;
|
||||
|
||||
IrreversibleActionConfirmationDialog(this.title);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AlertDialog(
|
||||
title: Text(tr("settings.gitRemote.changeHost.title")),
|
||||
title: Text(title),
|
||||
content: Text(tr("settings.gitRemote.changeHost.subtitle")),
|
||||
actions: <Widget>[
|
||||
FlatButton(
|
||||
|
@ -17,6 +17,7 @@ import 'package:gitjournal/app_settings.dart';
|
||||
import 'package:gitjournal/core/notes_folder_fs.dart';
|
||||
import 'package:gitjournal/features.dart';
|
||||
import 'package:gitjournal/repository.dart';
|
||||
import 'package:gitjournal/repository_manager.dart';
|
||||
import 'package:gitjournal/screens/debug_screen.dart';
|
||||
import 'package:gitjournal/screens/feature_timeline_screen.dart';
|
||||
import 'package:gitjournal/screens/settings_bottom_menu_bar.dart';
|
||||
@ -69,6 +70,7 @@ class SettingsListState extends State<SettingsList> {
|
||||
var settings = Provider.of<Settings>(context);
|
||||
var appSettings = Provider.of<AppSettings>(context);
|
||||
final repo = Provider.of<GitJournalRepo>(context);
|
||||
var repoManager = Provider.of<RepositoryManager>(context);
|
||||
|
||||
var saveGitAuthor = (String gitAuthor) {
|
||||
settings.gitAuthor = gitAuthor;
|
||||
@ -377,6 +379,26 @@ class SettingsListState extends State<SettingsList> {
|
||||
Navigator.of(context).push(route);
|
||||
},
|
||||
),
|
||||
if (repoManager.repoIds.length > 1)
|
||||
RedButton(
|
||||
text: tr('settings.deleteRepo'),
|
||||
onPressed: () async {
|
||||
var ok = await showDialog(
|
||||
context: context,
|
||||
builder: (_) => IrreversibleActionConfirmationDialog(
|
||||
tr('settings.deleteRepo'),
|
||||
),
|
||||
);
|
||||
if (ok == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
var repoManager = context.read<RepositoryManager>();
|
||||
await repoManager.deleteCurrent();
|
||||
|
||||
Navigator.popUntil(context, (route) => route.isFirst);
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 16.0),
|
||||
ListTile(
|
||||
title: Text(tr("feature_timeline.title")),
|
||||
|
Reference in New Issue
Block a user