62 Commits

Author SHA1 Message Date
143a1d95c7 First iteration of animating the JournalList
Now on adding / removing elements, the list is animated. It looks
slightly better.
2020-02-06 01:29:30 +01:00
9d29710d59 NotesFolder: Implement more fine grained notifications 2020-02-06 01:28:50 +01:00
670a0ff12d Remove NoteFSEntity - It's easier to just keep Notes/Folders separate 2020-02-02 16:02:41 +01:00
2711f1c4c9 Add a NotesFolderNotifier
This also implements the ChangeNotifier, but additional provides more
fine grained notifications. We neeed this in order to animate the list
of notes / folders when they change.
2020-02-01 13:20:29 +01:00
0fd7892e40 Avoid loading all the Notes in one go
This can sometimes lead to too many files being opened in parallel and
then failing because there aren't any file descriptors left. This patch
isn't perfect as given the directory structure we could still be loading
too many in one go, but it's a quick workaround for now.

The proper solution is to only load the Notes which need to be displayed
instead of loading all of them at startup.
2020-01-31 23:25:28 +01:00
f9a2f4c875 Add some FIXMEs 2020-01-31 16:17:30 +01:00
95dce61479 Allow the new folder for notes to be configurable
This is currently disabled as it requires a substantial change in the
JournalList.
2020-01-31 16:16:12 +01:00
43281bd2bb Add support for moving a Note to another folder
The Folder selection dialog needs a lot of work, but it's a start.
2020-01-29 16:51:57 +01:00
3f40a2992a Add the concept of Editors
* We no longer have a separate editing and browsing view - This does
mean we loose the ability to quick flip between notes by swiping.
However, this is more how a note editor would behave. I do later want to
add that capability back.

* We have 2 editors for now - Markdown and Raw. By default we use the
Markdown editor which can be toggled between Preview / Edit mode.

I later want to add a rich text editor and a todo editor as well.
2020-01-29 00:04:24 +01:00
f8e7773f16 NoteBrowser: Add a button to rename notes
Fixes #23
2020-01-27 23:09:11 +01:00
93775ddca5 Ignore more git connection errors 2020-01-27 19:07:05 +01:00
06d1124c19 Sync: Retry if the remote has changed
This can happen if someone pushed between our pull and push. In this
case lets just try again.
2020-01-27 19:03:30 +01:00
6e2a905f05 Cleanup ignored exceptions 2020-01-27 18:47:17 +01:00
0da1a0783c analysis: Use curly_braces_in_flow_control_structures
One step closer to using dart:pedantic
2020-01-26 03:01:39 +01:00
4be91f92f0 Note FileName: Save them by default with the title
If that title already exists add an _Num at the end.

This won't change the default for existing users, as our settings system
saves the default value and will just load it the next time. This really
needs to be improved.
2020-01-07 23:54:44 +01:00
7e3cfb9e37 Allow the default yaml modified key to changed
Some people are using GitJournal to edit Hugo websites, this option is
for them as the Hugo front matter uses the 'lastmod' key to indicate
when the post was last modified.
2020-01-05 18:24:46 +01:00
442d9d2b4e Allows Notes to have a different modified yaml key
Possible Options - modified, mod, lastModified, lastMod, lastmodified or
lastmod. When read the the note we will figure out which one is being
used and accordingly write back that value.

This makes it easier to use GitJournal for editing Hugo websites as they
usually use the 'lastmod' field to indicate when the post was last modified.
2020-01-05 18:12:35 +01:00
3285712acc Sort based on file last modified if 'modified' and 'created' not present 2020-01-02 12:08:17 +01:00
72777b96a4 Allow git pulls to fail
They fail when there is nothing to pull because no commit exists on the
server.
2020-01-02 01:04:21 +01:00
4a322b6fc4 Note: The title should never be null
Too much of the code assumes that it will never be null. It'll be so
awesome when Dart allows you to enforce that a type is never null.
2020-01-01 19:51:26 +01:00
2821eb1f8b Note sorting: 'created' can now be null
Earlier it was always something
2020-01-01 19:50:52 +01:00
36d1ae43c3 Split NoteData and its serializer into its own file 2020-01-01 19:50:31 +01:00
14e7f344d1 Add an explicit serializer from Note -> NoteData
This is so that we can start configuring what the yaml metadata keys
should be called, and not have them hardcoded.

This also allows the note.created to be null. Earlier we were always
setting it to some value. That's doesn't seem right.
2020-01-01 19:29:57 +01:00
6d49f76b96 Rename NoteSerializer -> NoteDataSerializer 2020-01-01 18:49:54 +01:00
b35d5f4337 Use YAML serializer package
This code might be useful to someone else
2019-12-29 12:03:42 +01:00
53839c9101 Surround the title by quotes before saving it to yaml
Otherwise people can put # or : or something else in the title and that
will result in invalid YAML.

Also escape any existing '. YAML is weird that the method of escaping a
' is by specifying it twice. It's sad that there is no dart YAML
serializer, and I'm surely missing some other edge cases. The YAML
specification is quite long.
2019-12-28 01:12:18 +01:00
2b09708793 JournalListing: Show the title
It's no longer a simple JournalListing and instead we also show the
title. The main problem is with what to do when the title is not there.
Just leaving it blank seems to feel weird, specially when the note is
too small.

Maybe it's time to change it such that each row size is not the same.
We're effectively wasting whitespace right now for very small notes.
2019-12-27 11:34:15 +01:00
895d2f4f1b Give each Note a title
We're moving away from being a Journal Editor to being a Note Editor. I
don't want to discard the Journaling parts, as Journaling is really a
subset of Note Taking - so in the future it would be nice if this could
be somehow toggled.

Maybe each Folder can have different display settings. Probably in the
"pro" version.
2019-12-27 11:05:32 +01:00
046c08cb67 Folder rename: Only udpate 'folderPath' once rename is successfull 2019-12-27 00:37:26 +01:00
8a6b6023d6 Sync: Combine crashlytics code 2019-12-27 00:37:20 +01:00
6af3b03210 Add a sync button to the AppBar
This somewhat shows what's going on with the network. It isn't ideal, as
is a bit ugly. But it's a start to show the network status, and what's
going on in the background.
2019-12-26 20:43:12 +01:00
04af625a3b Log git exceptions in Crashlytics 2019-12-26 17:41:27 +01:00
757bf0b7ac Update dependencies and gradle 2019-12-23 12:25:31 +01:00
63170445d7 Move libgit2 code to git_bindings repo
We now have a much clearer separation between Git code and this app
specific code. This is awesome, it will allow other people to easily
integrate Git within their apps. Also, eventually it will be trivial to
switch to another implemention of Git (via JGit or a git client written
completely in Dart)

This breaks the iOS version as I haven't moved the code to build the ios
version. Maybe this will be a good excuse for me to setup a proper CI/CD
system for ios builds.

There is also a chance this breaks Crashalytics NDK symbols :(
2019-12-21 01:06:15 +01:00
70877438eb Git: Take the folderPath instead of folderName
The Git Api was strange and took a foldeName and it would only allow you
to access git operations in a particular path. This has now been fixed,
and now it can operate in any path.

This was the first step to moving the git api into its own library.
2019-12-20 20:40:00 +01:00
3657a88ce5 FolderListing: Show the full path of subfolders
It's confusing otherwise, though this doesn't look very pretty.
2019-12-14 12:18:52 +01:00
6096ef8054 Sort Folders based on name
Eventually this sorting should be configurable.
2019-12-14 12:10:20 +01:00
6790bfe9f5 Fix Note sorting function 2019-12-14 12:06:07 +01:00
bc6f7c1b8f Note: Load the modified tag properly 2019-12-14 12:05:52 +01:00
106953ad68 GitRepo: Change commit messages to say "Note" instead of "Journal" 2019-12-14 02:19:02 +01:00
abb6029798 Allow Folders to be deleted
For safety we're only allowing non-empty folders to be deleted. Ideally,
we should have some kind of undo button. Or some kind of history - since
we do have that with git.

Related to #18
2019-12-11 21:43:08 +01:00
880f290d82 New note: fix 'created' not being serialized 2019-12-09 01:36:55 +01:00
b0b7da5291 Move storage classes into core
The Git functionality is fairly core!
2019-12-09 01:19:44 +01:00
cd24d2688f Never let the Note be in an invalid state
It's a bit confusing that the created date has to be set when creating a
new note, and the path had to be constructured properly, without which
the note shouldn't be saved. Ideally, an object shouldn't be able exist
in such an inconsistent state.
2019-12-09 01:14:45 +01:00
ca83cb79a6 JournalListing: Remove recursive option
We aren't using it, and if we implement a recursive option it should
somehow showcase which folder it is under. Evernote does it in an
interesting way.
2019-12-09 00:53:53 +01:00
6c10fa8a0f Improve Note sorting
* First by modified
* Then by created
* Then by file Path

I feel like there must be a simpler way of writing this compareTo
function.
2019-12-09 00:14:00 +01:00
76f70f0d18 Note: Store when last modified
Also sort the notes based on when last modified. Now that we're moving
towards being a more note-taking app, it makes sense that a recently
modified note goes on top.

Of course, the sorting should be controllable by the user, but the
default probably should be by when modified.
2019-12-09 00:02:40 +01:00
8a49d948f0 StateContainer: Do not call setState when the notesFolder changes
The NotesFolder is now a listenable and is always accessed via Provider,
and therefore doesn't need setState to be called when it is modified.
2019-12-08 02:58:56 +01:00
ee9d38e420 NotesFolder: Make sure listeners are always added/removed
Also make sure the _entities and _entityMap are always in sync.

The NotesFolder is complex enough that it could really use some proper
unit testing. Though since it is so tightly coupled to the FileSystem,
it would be quite an elaborate test to write.
2019-12-08 02:26:35 +01:00
1eb9611140 Do not reparse every note on any change
Earlier whenever anything changed we would discard all the Notes +
NotesFolders in memory, and reconstruct the hierarchy. This would means
Notes which haven't changed at all, still need to parsed all over again.

Now we only reload what has actually changed.

This should result in a huge performance boost.

We still shouldn't be loading everything on boot, but that's a different
problem.
2019-12-08 01:56:59 +01:00