Browse Source

Merge pull request #292 from provokateurin/update/readme

Update Readme
pull/308/head
Kate 2 years ago committed by GitHub
parent
commit
ce12fcd1b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 57
      README.md
  2. 44
      assets/architecture.puml
  3. 1
      assets/architecture.svg
  4. 1
      assets/logo.svg
  5. 4
      packages/app/README.md
  6. 1
      packages/app/assets/logo.svg
  7. 1
      packages/app/assets/logo.svg
  8. 6
      tool/generate-app.sh
  9. 10
      tool/generate-assets.sh

57
README.md

@ -1,26 +1,12 @@
# nextcloud-neon
A beautiful convergent cross-platform client for Nextcloud written in Flutter.
<img src="assets/logo.svg" alt="Neon logo" width="200"/>
See [here](packages/app/README.md) for screenshots and other material regarding the app.
This repository not only contains the Neon app, but also a Nextcloud client written in Dart.
The client will replace https://github.com/provokateurin/dart-nextcloud which is an older unmaintained client I wrote some time ago.
The development of this app and client just started, there will be a lot of changes and new features coming soon.
Additional documentation is very much appreciated. If you find something that you think should be documented, please open an issue or pull request.
## Development and support
Either open an issue if you exactly know what you need or your problem is, otherwise please ask in Matrix.
The Matrix space is here: https://matrix.to/#/#nextcloud-neon:matrix.org.
There are separate rooms for the client and the app. If you don't know which channel you should use if you have a question, just use the app channel.
A framework for building convergent cross-platform Nextcloud clients using Flutter.
## Features
There are a lot of planned features that still need help. Go [here](https://github.com/provokateurin/nextcloud-neon/issues?q=is%3Aopen+is%3Aissue+label%3Afeature) and grab an issue to work on.
Even if a new feature is not listed yet, please open an issue.
See [here](packages/app/README.md) for screenshots.
- :heavy_check_mark: Supported
- :rocket: Planned
@ -40,6 +26,43 @@ Even if a new feature is not listed yet, please open an issue.
| Talk | :rocket: |
| Tasks | :rocket: |
## Problems with other clients and how this project tries to solve them
### Current problems with other clients
_Excerpt from my job application to Nextcloud:_
- There are many clients that are designed to run exclusively on a single platform or device type. They all have different code bases, which makes feature parity and maintenance much more difficult.
- The user experience and features differ significantly from platform to platform, which leads to frustration. This particularly affects mobile devices running Linux (e.g. postmarketOS). There is no suitable client on this platform at all. Using the desktop Linux client for file synchronization would probably work, but this platform still lacks almost all the features available on e.g. Android and the client is not made for mobile screens. Someone who uses Linux on their mobile device is likely also interested in Nextcloud, so the need for a solution is definitely there.
- Even on feature-rich platforms, features are spread across multiple apps (e.g. on Android), making it more complicated for the user who simply wants to get the most out of their Nextcloud server on their device.
### How Neon as a framework tries to solve them
This project uses OpenAPI specifications to generate all the necessary API client code.
This vastly reduces the developer efforts of writing a lot of boilerplate code and having to look at the PHP source code.
Most server APIs were not well or at all documented until now (there are some exceptions).
Based on this work a project at the Nextcloud company started for adopting OpenAPI to document the server APIs.
The OpenAPI specifications are generated completely automated from the source code (although some changes to the type annotations are required) and are validated with static analysis of the PHP code.
These efforts are not done yet, but this project basically became the front-line for testing the automatically generated specifications.
We use flutter because of its cross-platform capabilities.
To decrease the developer burden, a lot of useful widgets and utilities have been developed, so that they can be re-used.
Trying to make everything re-usable is a major goal of this project, as we want to close the gap between platforms and functionalities and make development of new clients and apps enjoyable and fast.
Developing a new Nextcloud client can be as easy as adding some UI and then necessary state management, everything else is taken care of for you.
## Development and support
We have a Matrix space where you can ask questions: https://matrix.to/#/#nextcloud-neon:matrix.org
## Architecture overview
![Architecture overview diagram](assets/architecture.svg)
The framework consists of multiple packages:
- For APIs the nextcloud package provides the implementations. The dynamite generator generates the code using the OpenAPI specs.
- The main package is the neon package that provides widgets and functionality that is useful for building a Nextcloud client. It also manages the global state at runtime so that the app implementations do not have to manage things like multiple accounts for example.
- The individual apps are implemented as separate packages. Those depend on the neon framework and implement a few interfaces so that the neon framework can use them.
- On top of all that sits the app package that injects the relevant app implementations into the framework. It is possible to configure which app implementations should be included and how the app is branded.
## Platform support

44
assets/architecture.puml

@ -0,0 +1,44 @@
@startuml architecture
package "neon framework" {
component neon
component nextcloud
component settings
component sort_box
component file_icons
}
package "App implementations" {
component neon_files
component neon_news
component neon_notes
component neon_notifications
}
package "OpenAPI" {
component dynamite
component specs
}
component app
app ..> neon_files
app ..> neon_news
app ..> neon_notes
app ..> neon_notifications
neon_files --> neon
neon_news --> neon
neon_notes --> neon
neon_notifications --> neon
neon --> nextcloud
neon --> settings
neon --> sort_box
neon --> file_icons
dynamite --> nextcloud
specs --> nextcloud
@enduml

1
assets/architecture.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

1
assets/logo.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" id="mdi-cable-data" viewBox="0 0 24 24"><path fill="#f37736" d="M7.05 3.5C5.68 4.88 5.68 7.1 7.05 8.47L15.54 16.95C16.12 17.54 16.12 18.5 15.54 19.07C14.95 19.66 14 19.66 13.41 19.07L9.17 14.83L10.23 13.77L6.7 10.23L6.34 10.59L4.93 9.17C4.54 8.78 3.91 8.78 3.5 9.17L2.1 10.59C1.71 11 1.71 11.61 2.1 12L3.5 13.41L3.16 13.77L6.7 17.3L7.76 16.24L12 20.5C13.37 21.85 15.58 21.85 16.95 20.5C18.32 19.12 18.32 16.9 16.95 15.54L8.46 7.05C7.88 6.46 7.88 5.5 8.46 4.93C9.05 4.34 10 4.34 10.59 4.93L14.83 9.17L13.77 10.23L17.3 13.77L17.66 13.41L19.07 14.83C19.46 15.22 20.1 15.22 20.5 14.83L21.9 13.41C22.29 13 22.29 12.39 21.9 12L20.5 10.59L20.84 10.23L17.3 6.7L16.24 7.76L12 3.5C10.63 2.15 8.42 2.15 7.05 3.5M2.81 11.29L4.22 9.88L5.64 11.29L4.22 12.71M18.36 12.71L19.78 11.29L21.19 12.71L19.78 14.12Z" /></svg>

After

Width:  |  Height:  |  Size: 842 B

4
packages/app/README.md

@ -3,8 +3,8 @@
A beautiful convergent cross-platform client for Nextcloud written in Flutter.
## Install
You can build it yourself from source now, automatic build pipelines are being set up right now.
The app will be published on F-Droid and the Google Playstore later. See https://github.com/provokateurin/nextcloud-neon/issues/106 for the to-do list.
You can build it yourself from source or download it from the automatic build pipelines.
The app will be published on F-Droid, the Google Playstore and Flathub later on. See https://github.com/provokateurin/nextcloud-neon/issues/106 for the to-do list.
## Screenshots

1
packages/app/assets/logo.svg

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" id="mdi-cable-data" viewBox="0 0 24 24"><path fill="#f37736" d="M7.05 3.5C5.68 4.88 5.68 7.1 7.05 8.47L15.54 16.95C16.12 17.54 16.12 18.5 15.54 19.07C14.95 19.66 14 19.66 13.41 19.07L9.17 14.83L10.23 13.77L6.7 10.23L6.34 10.59L4.93 9.17C4.54 8.78 3.91 8.78 3.5 9.17L2.1 10.59C1.71 11 1.71 11.61 2.1 12L3.5 13.41L3.16 13.77L6.7 17.3L7.76 16.24L12 20.5C13.37 21.85 15.58 21.85 16.95 20.5C18.32 19.12 18.32 16.9 16.95 15.54L8.46 7.05C7.88 6.46 7.88 5.5 8.46 4.93C9.05 4.34 10 4.34 10.59 4.93L14.83 9.17L13.77 10.23L17.3 13.77L17.66 13.41L19.07 14.83C19.46 15.22 20.1 15.22 20.5 14.83L21.9 13.41C22.29 13 22.29 12.39 21.9 12L20.5 10.59L20.84 10.23L17.3 6.7L16.24 7.76L12 3.5C10.63 2.15 8.42 2.15 7.05 3.5M2.81 11.29L4.22 9.88L5.64 11.29L4.22 12.71M18.36 12.71L19.78 11.29L21.19 12.71L19.78 14.12Z" /></svg>

Before

Width:  |  Height:  |  Size: 842 B

After

Width:  |  Height:  |  Size: 24 B

1
packages/app/assets/logo.svg

@ -0,0 +1 @@
../../../assets/logo.svg

Before

Width:  |  Height:  |  Size: 842 B

After

Width:  |  Height:  |  Size: 24 B

6
tool/generate-app.sh

@ -2,8 +2,6 @@
set -euxo pipefail
cd "$(dirname "$0")/.."
color="#f37736"
function export_mipmap_icon() {
source="$1"
name="$2"
@ -26,10 +24,6 @@ function export_mipmap_icon_all() {
(
cd packages/app
# Neon logo
wget https://raw.githubusercontent.com/Templarian/MaterialDesign/master/svg/cable-data.svg -O assets/logo.svg
sed -i "s/<path /<path fill=\"$color\" /g" assets/logo.svg
# Splash screens
inkscape assets/logo.svg -o img/splash_icon.png -w 768 -h 768 # 768px at xxxhdpi is 192dp
convert -size 1152x1152 xc:none img/splash_icon.png -gravity center -composite img/splash_icon_android_12.png # 1152px at xxxhdpi is 288dp

10
tool/generate-assets.sh

@ -0,0 +1,10 @@
#!/bin/bash
set -euxo pipefail
cd "$(dirname "$0")/.."
color="#f37736"
plantuml -tsvg assets/architecture.puml
wget https://raw.githubusercontent.com/Templarian/MaterialDesign/master/svg/cable-data.svg -O assets/logo.svg
sed -i "s/<path /<path fill=\"$color\" /g" assets/logo.svg
Loading…
Cancel
Save