about summary refs log tree commit diff
path: root/src/database/file/mod.rs
Commit message (Collapse)AuthorAgeFilesLines
* Make Micropub update logic self-containedVika2024-08-281-1/+3
| | | | | | This allows for a separation of concerns between database backends and Micropub, unless such backend have special requirements, like the file backend storing children of a feed in an array.
* Set MSRV to 1.75, remove #[async_trait] declarations whenever possibleVika2024-08-261-4/+2
| | | | | | | Axum still uses `async_trait`, let them do whatever they want. I will no longer be subject to the humiliation of trying to dig through lifetime errors and unreadable declarations. Also I don't fucking care about MSRV, I'm not a library. If you don't have modern Rust, get one.
* FileStorage: appease clippy and use block_in_place for rewinding feedsVika2024-08-261-9/+14
| | | | | Using `tokio::task::block_in_place` downgrades the thread temporarily to avoid starvation.
* treewide: create a common method for state initializationVika2024-08-011-9/+5
| | | | | Now the database objects can be uniformly created from a URI. They can also optionally do sanity checks and one-time initialization.
* database: use Url to represent user authoritiesVika2024-07-091-15/+17
| | | | This makes the interface more consistent and resistant to misuse.
* Support ?q=category queriesVika2024-03-041-0/+14
| | | | Warning, untested. But hopefully works!
* Moved the entire Kittybox tree into the rootVika2023-07-291-0/+733
|
* flake.nix: reorganizeVika2022-05-241-619/+0
| | | | | | | | | | | | - Kittybox's source code is moved to a subfolder - This improves build caching by Nix since it doesn't take changes to other files into account - Package and test definitions were spun into separate files - This makes my flake.nix much easier to navigate - This also makes it somewhat possible to use without flakes (but it is still not easy, so use flakes!) - Some attributes were moved in compliance with Nix 2.8's changes to flake schema
* FileStorage: only compile tests when neededVika2022-05-101-0/+1
|
* FileStorage: fixes and regression tests for read_feed_with_limitVika2022-05-101-2/+6
| | | | Now I will know if something breaks horribly again.
* FileStorage: fix the item in `after` being emitted as the firstVika2022-05-101-8/+11
| | | | | | Iterator::skip_while() returns the last item. Reimplement the combinator that I need using a loop over Iterator::by_ref() instead. This will terminate after the end is reached.
* FileStorage: code cleanupVika2022-05-101-14/+11
|
* FileStorage: fix the hang when "after" isn't listed in the feedVika2022-05-101-9/+8
| | | | Closes #4.
* chore: code cleanupVika2022-05-011-10/+6
|
* FileStorage: fix writing settings on empty fileVika2022-05-011-8/+12
|
* FileStorage: lockless reads and atomic writesVika2022-05-011-220/+157
| | | | | | | | | | | | | | | | | | | - Reads don't lock anymore. At all. - Writes create a temporary file and use `rename(2)` to atomically replace it - since OpenOptions::create_new(true) is used, tempfile creation is atomic (and since tempfile names are per-post, a post can only be edited by one request at a time) - Since written files get atomically replaced, readers can't read a corrupted file Potential pitfalls: 1. This approach is not covered by unit tests (yet) 2. Stale tempfiles can prevent editing posts (can be solved by throwing out tempfiles that are older than, say, a day) 3. Crashed edits can leave stale tempfiles (honestly that sounds better than corrupting the whole database, doesn't sound like a bug to me at all!)
* Make the settings in the database a strong typeVika2022-03-231-3/+7
|
* FileStorage: add lints to catch panicking inside locked code sectionsVika2022-03-071-149/+168
|
* Restored most of the functionality (except onboarding and some queries)Vika2022-03-061-2/+2
|
* database: code cleanupVika2022-03-021-25/+52
|
* database: code cleanupVika2022-02-211-13/+15
|
* database/file: use Authority instead of origin for directoriesVika2022-02-211-4/+4
|
* WIP: convert to Tokio and WarpVika2022-02-151-26/+25
| | | | | | | | | | | Warp allows requests to be applied as "filters", allowing to flexibly split up logic and have it work in a functional style, similar to pipes. Tokio is just an alternative runtime. I thought that maybe switching runtimes and refactoring the code might allow me to fish out that pesky bug with the whole application hanging after a certain amount of requests...
* FileBackend: introduce timeouts on operationsVika2021-12-311-34/+51
| | | | | | This is to prevent spinning in a loop waiting for a lock. This hangs often, though I suspect this should have been fixed in the previous commit.
* FileBackend: don't transfer locks over async boundariesVika2021-12-311-169/+188
| | | | | | | This may or may not be the cause for the app hanging while waiting for a lock. Now the operations with locks are never performed over an async boundary, excluding any shenanigans that can happen when accidentally leaving a file locked over async boundaries.
* Make rustfmt and clippy happyVika2021-12-061-11/+13
|
* Added support for IndieAuth client sign inVika2021-12-061-1/+1
| | | | | | | This will allow readers to view private posts intended just for them. Additionally fixed bugs in patterns due to which webmentions might not have been sent.
* Code cleanup and small bugfixing in templatesVika2021-12-051-49/+102
|
* Added author mini-cards on h-entriesVika2021-12-051-37/+69
|
* frontend: Added listing feeds to the header barVika2021-12-051-3/+3
|
* Deprecated Redis backend and added a database migration tool (untested, beware)Vika2021-10-271-1/+1
|
* Modified the module to use BACKEND_URIVika2021-09-281-0/+2
|
* Code cleanup and Cargo.lock updatesVika2021-09-271-2/+3
|
* Fix a bug in the error middlewareVika2021-09-271-0/+1
| | | | | | When an error is found, the site name passed to Storage::get_setting in the error handler is incorrect. The ASCII serialisation of the hostname should get used.
* Implemented support for channelsVika2021-09-271-3/+114
|
* Implemented FileStorage::delete_postVika2021-09-271-1/+4
|
* Finally figured out how to read without a BufReaderVika2021-09-271-14/+6
| | | | | BufReader was really unneccesary here, since I was batch-reading all of this in one go.
* Improved symlink creationVika2021-09-271-5/+78
| | | | | | Now symlink creation works on Windows and creates links relative to the posts, allowing for seamless migrations of the backing directory for true portability and no data lock-in.
* Implemented FileStorage::get_setting and FileStorage::set_settingVika2021-09-271-2/+53
|
* Added file updates and fixed a bug with truncated JSON filesVika2021-09-261-3/+100
| | | | | | | | | | | There was a bug where `File::write()` would not write the entire buffer, and this condition was left unchecked by the code. All `File::write()` calls are now replaced with `File::write_all()` which ensures the whole buffer is written to the backing file. Additionally added a smoke check for the file updates. It is in no way comprehensive nor it is able to catch all the possible failures but it's a good way of testing the functionality without way too much hassle.
* Added a WIP file backendVika2021-08-151-0/+173
Currently unavailable for use and only has basic GET and POST operations implemented. A lot more work is needed to make it truly usable. Locking is implemented using flock() system call on Linux.