fix: simple columns issues (#7466)

* Revert "feat: use flutter_distrubutor to build linux and macos packages (#7392)"

This reverts commit 6dc45c9830.

* fix: linux link issue

* fix: outline doesn't work well in columns

* fix: cannot drag a block under a table that’s in the second column
This commit is contained in:
Lucas 2025-03-06 12:33:53 +08:00 committed by GitHub
parent 8d8fc91391
commit 8046177d84
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
31 changed files with 207 additions and 833 deletions

View file

@ -128,9 +128,9 @@ jobs:
runs-on: ${{ matrix.job.os }}
needs: create-release
env:
MACOS_APP_RELEASE_PATH: frontend/appflowy_flutter/build/${{ github.ref_name }}
MACOS_APP_RELEASE_PATH: frontend/appflowy_flutter/product/${{ github.ref_name }}/macos/Release
MACOS_X86_ZIP_NAME: AppFlowy-${{ github.ref_name }}-macos-x86_64.zip
MACOS_DMG_NAME: AppFlowy-${{ github.ref_name }}-macos-x86_64.dmg
MACOS_DMG_NAME: AppFlowy-${{ github.ref_name }}-macos-x86_64
strategy:
fail-fast: false
matrix:
@ -158,22 +158,46 @@ jobs:
- name: Install prerequisites
working-directory: frontend
run: |
brew install p7zip
cargo install --force --locked cargo-make
cargo install --force --locked duckscript_cli
- name: Import codesign certificate
uses: apple-actions/import-codesign-certs@v3
with:
p12-file-base64: ${{ secrets.MACOS_CERTIFICATE }}
p12-password: ${{ secrets.MACOS_CERTIFICATE_PWD }}
- name: Build AppFlowy
working-directory: frontend
run: |
flutter config --enable-macos-desktop
flutter pub global activate flutter_distributor
sh scripts/flutter_release_build/build_macos.sh --build_type dmg --build_arch x86_64 --version ${{ github.ref_name }} --apple-id ${{ secrets.MACOS_NOTARY_USER }} --team-id ${{ secrets.MACOS_TEAM_ID }} --password ${{ secrets.MACOS_NOTARY_PWD }}
dart ./scripts/flutter_release_build/build_flowy.dart run . ${{ github.ref_name }}
- name: Codesign AppFlowy
run: |
echo ${{ secrets.MACOS_CERTIFICATE }} | base64 --decode > certificate.p12
security create-keychain -p action build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p action build.keychain
security import certificate.p12 -k build.keychain -P ${{ secrets.MACOS_CERTIFICATE_PWD }} -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k action build.keychain
/usr/bin/codesign --force --options runtime --deep --sign "${{ secrets.MACOS_CODESIGN_ID }}" "${{ env.MACOS_APP_RELEASE_PATH }}/AppFlowy.app" -v
- name: Create macOS dmg
run: |
brew install create-dmg
create-dmg \
--volname ${{ env.MACOS_DMG_NAME }} \
--hide-extension "AppFlowy.app" \
--background frontend/scripts/dmg_assets/AppFlowyInstallerBackground.jpg \
--window-size 600 450 \
--icon-size 94 \
--icon "AppFlowy.app" 141 249 \
--app-drop-link 458 249 \
"${{ env.MACOS_APP_RELEASE_PATH }}/${{ env.MACOS_DMG_NAME }}.dmg" \
"${{ env.MACOS_APP_RELEASE_PATH }}/AppFlowy.app"
- name: Notarize AppFlowy
run: |
xcrun notarytool submit ${{ env.MACOS_APP_RELEASE_PATH }}/${{ env.MACOS_DMG_NAME }}.dmg --apple-id ${{ secrets.MACOS_NOTARY_USER }} --team-id ${{ secrets.MACOS_TEAM_ID }} --password ${{ secrets.MACOS_NOTARY_PWD }} -v -f "json" --wait
- name: Archive Asset
working-directory: ${{ env.MACOS_APP_RELEASE_PATH }}
run: zip --symlinks -qr ${{ env.MACOS_X86_ZIP_NAME }} AppFlowy.app
- name: Upload Asset
uses: actions/upload-release-asset@v1
@ -191,82 +215,8 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-release.outputs.upload_url }}
asset_path: ${{ env.MACOS_APP_RELEASE_PATH }}/${{ env.MACOS_DMG_NAME }}
asset_name: ${{ env.MACOS_DMG_NAME }}
asset_content_type: application/octet-stream
build-for-macOS-arm64:
name: ${{ matrix.job.target }} (${{ matrix.job.os }}) [${{ matrix.job.extra-build-args }}]
runs-on: ${{ matrix.job.os }}
needs: create-release
env:
MACOS_APP_RELEASE_PATH: frontend/appflowy_flutter/build/${{ github.ref_name }}
MACOS_AARCH64_ZIP_NAME: AppFlowy-${{ github.ref_name }}-macos-arm64.zip
MACOS_DMG_NAME: AppFlowy-${{ github.ref_name }}-macos-arm64.dmg
strategy:
fail-fast: false
matrix:
job:
- {
targets: "aarch64-apple-darwin",
os: macos-latest,
extra-build-args: "",
}
steps:
- name: Checkout source code
uses: actions/checkout@v4
- name: Install flutter
uses: subosito/flutter-action@v2
with:
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
targets: ${{ matrix.job.targets }}
components: rustfmt
- name: Install prerequisites
working-directory: frontend
run: |
brew install p7zip
cargo install --force --locked cargo-make
cargo install --force --locked duckscript_cli
- name: Import codesign certificate
uses: apple-actions/import-codesign-certs@v3
with:
p12-file-base64: ${{ secrets.MACOS_CERTIFICATE }}
p12-password: ${{ secrets.MACOS_CERTIFICATE_PWD }}
- name: Build AppFlowy
working-directory: frontend
run: |
flutter config --enable-macos-desktop
dart pub global activate flutter_distributor
sh scripts/flutter_release_build/build_macos.sh --build_type dmg --build_arch arm64 --version ${{ github.ref_name }} --apple-id ${{ secrets.MACOS_NOTARY_USER }} --team-id ${{ secrets.MACOS_TEAM_ID }} --password ${{ secrets.MACOS_NOTARY_PWD }}
- name: Upload Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-release.outputs.upload_url }}
asset_path: ${{ env.MACOS_APP_RELEASE_PATH }}/${{ env.MACOS_AARCH64_ZIP_NAME }}
asset_name: ${{ env.MACOS_AARCH64_ZIP_NAME }}
asset_content_type: application/octet-stream
- name: Upload DMG Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-release.outputs.upload_url }}
asset_path: ${{ env.MACOS_APP_RELEASE_PATH }}/${{ env.MACOS_DMG_NAME }}
asset_name: ${{ env.MACOS_DMG_NAME }}
asset_path: ${{ env.MACOS_APP_RELEASE_PATH }}/${{ env.MACOS_DMG_NAME }}.dmg
asset_name: ${{ env.MACOS_DMG_NAME }}.dmg
asset_content_type: application/octet-stream
build-for-macOS-universal:
@ -274,9 +224,9 @@ jobs:
runs-on: ${{ matrix.job.os }}
needs: create-release
env:
MACOS_APP_RELEASE_PATH: frontend/appflowy_flutter/build/${{ github.ref_name }}
MACOS_APP_RELEASE_PATH: frontend/appflowy_flutter/product/${{ github.ref_name }}/macos/Release
MACOS_AARCH64_ZIP_NAME: AppFlowy-${{ github.ref_name }}-macos-universal.zip
MACOS_DMG_NAME: AppFlowy-${{ github.ref_name }}-macos-universal.dmg
MACOS_DMG_NAME: AppFlowy-${{ github.ref_name }}-macos-universal
strategy:
fail-fast: false
matrix:
@ -306,22 +256,46 @@ jobs:
- name: Install prerequisites
working-directory: frontend
run: |
brew install p7zip
cargo install --force --locked cargo-make
cargo install --force --locked duckscript_cli
- name: Import codesign certificate
uses: apple-actions/import-codesign-certs@v3
with:
p12-file-base64: ${{ secrets.MACOS_CERTIFICATE }}
p12-password: ${{ secrets.MACOS_CERTIFICATE_PWD }}
- name: Build AppFlowy
working-directory: frontend
run: |
flutter config --enable-macos-desktop
dart pub global activate flutter_distributor
sh scripts/flutter_release_build/build_macos.sh --build_type dmg --build_arch universal --version ${{ github.ref_name }} --apple-id ${{ secrets.MACOS_NOTARY_USER }} --team-id ${{ secrets.MACOS_TEAM_ID }} --password ${{ secrets.MACOS_NOTARY_PWD }}
sh scripts/flutter_release_build/build_universal_package_for_macos.sh ${{ github.ref_name }}
- name: Codesign AppFlowy
run: |
echo ${{ secrets.MACOS_CERTIFICATE }} | base64 --decode > certificate.p12
security create-keychain -p action build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p action build.keychain
security import certificate.p12 -k build.keychain -P ${{ secrets.MACOS_CERTIFICATE_PWD }} -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k action build.keychain
/usr/bin/codesign --force --options runtime --deep --sign "${{ secrets.MACOS_CODESIGN_ID }}" "${{ env.MACOS_APP_RELEASE_PATH }}/AppFlowy.app" -v
- name: Create macOS dmg
run: |
brew install create-dmg
create-dmg \
--volname ${{ env.MACOS_DMG_NAME }} \
--hide-extension "AppFlowy.app" \
--background frontend/scripts/dmg_assets/AppFlowyInstallerBackground.jpg \
--window-size 600 450 \
--icon-size 94 \
--icon "AppFlowy.app" 141 249 \
--app-drop-link 458 249 \
"${{ env.MACOS_APP_RELEASE_PATH }}/${{ env.MACOS_DMG_NAME }}.dmg" \
"${{ env.MACOS_APP_RELEASE_PATH }}/AppFlowy.app"
- name: Notarize AppFlowy
run: |
xcrun notarytool submit ${{ env.MACOS_APP_RELEASE_PATH }}/${{ env.MACOS_DMG_NAME }}.dmg --apple-id ${{ secrets.MACOS_NOTARY_USER }} --team-id ${{ secrets.MACOS_TEAM_ID }} --password ${{ secrets.MACOS_NOTARY_PWD }} -v -f "json" --wait
- name: Archive Asset
working-directory: ${{ env.MACOS_APP_RELEASE_PATH }}
run: zip --symlinks -qr ${{ env.MACOS_AARCH64_ZIP_NAME }} AppFlowy.app
- name: Upload Asset
uses: actions/upload-release-asset@v1
@ -339,8 +313,8 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-release.outputs.upload_url }}
asset_path: ${{ env.MACOS_APP_RELEASE_PATH }}/${{ env.MACOS_DMG_NAME }}
asset_name: ${{ env.MACOS_DMG_NAME }}
asset_path: ${{ env.MACOS_APP_RELEASE_PATH }}/${{ env.MACOS_DMG_NAME }}.dmg
asset_name: ${{ env.MACOS_DMG_NAME }}.dmg
asset_content_type: application/octet-stream
build-for-linux:
@ -348,12 +322,14 @@ jobs:
runs-on: ${{ matrix.job.os }}
needs: create-release
env:
LINUX_APP_RELEASE_PATH: frontend/appflowy_flutter/build/${{ github.ref_name }}
LINUX_APP_RELEASE_PATH: frontend/appflowy_flutter/product/${{ github.ref_name }}/linux/Release
LINUX_ZIP_NAME: AppFlowy-${{ matrix.job.target }}-x86_64.tar.gz
LINUX_PACKAGE_DEB_NAME: AppFlowy-${{ github.ref_name }}-linux-x86_64.deb
LINUX_PACKAGE_RPM_NAME: AppFlowy-${{ github.ref_name }}-linux-x86_64.rpm
LINUX_PACKAGE_TMP_RPM_NAME: AppFlowy-${{ github.ref_name }}-2.x86_64.rpm
LINUX_PACKAGE_TMP_APPIMAGE_NAME: AppFlowy-${{ github.ref_name }}-x86_64.AppImage
LINUX_PACKAGE_APPIMAGE_NAME: AppFlowy-${{ github.ref_name }}-linux-x86_64.AppImage
LINUX_PACKAGE_ZIP_NAME: AppFlowy-${{ github.ref_name }}-linux-x86_64.zip
LINUX_PACKAGE_TAR_NAME: AppFlowy-${{ github.ref_name }}-linux-x86_64.tar.gz
LINUX_PACKAGE_ZIP_NAME: AppFlowy-${{ github.ref_name }}-linux-x86_64.tar.gz
strategy:
fail-fast: false
@ -362,7 +338,7 @@ jobs:
- {
arch: x86_64,
target: x86_64-unknown-linux-gnu,
os: ubuntu-22.04,
os: ubuntu-20.04,
extra-build-args: "",
flutter_profile: production-linux-x86_64,
}
@ -388,24 +364,14 @@ jobs:
- name: Install prerequisites
working-directory: frontend
run: |
# Install dependencies
sudo wget -qO /etc/apt/trusted.gpg.d/dart_linux_signing_key.asc https://dl-ssl.google.com/linux/linux_signing_key.pub
sudo apt-get update
sudo apt-get install -y build-essential libsqlite3-dev libssl-dev clang cmake ninja-build pkg-config libgtk-3-dev keybinder-3.0 libnotify-dev
sudo apt install rpm patchelf locate
sudo add-apt-repository universe
sudo apt install libfuse2
# Install appimagetool
wget -O appimagetool "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage"
chmod +x appimagetool
mv appimagetool /usr/local/bin/
# Install cargo-make and duckscript
sudo apt-get install -y build-essential libsqlite3-dev libssl-dev clang cmake ninja-build pkg-config libgtk-3-dev
sudo apt-get install keybinder-3.0
sudo apt-get install -y alien libnotify-dev
source $HOME/.cargo/env
cargo install --force --locked cargo-make
cargo install --force --locked duckscript_cli
rustup target add ${{ matrix.job.target }}
- name: Install gcc-aarch64-linux-gnu
@ -418,8 +384,30 @@ jobs:
working-directory: frontend
run: |
flutter config --enable-linux-desktop
dart pub global activate flutter_distributor
./scripts/flutter_release_build/build_linux.sh --build_type all --build_arch x86_64 --version ${{ github.ref_name }}
dart ./scripts/flutter_release_build/build_flowy.dart run . ${{ github.ref_name }}
- name: Archive Asset
working-directory: ${{ env.LINUX_APP_RELEASE_PATH }}
run: tar -czf ${{ env.LINUX_ZIP_NAME }} *
- name: Build Linux package (.deb)
working-directory: frontend
run: |
sh scripts/linux_distribution/deb/build_deb.sh appflowy_flutter/product/${{ github.ref_name }}/linux/Release ${{ github.ref_name }} ${{ env.LINUX_PACKAGE_DEB_NAME }}
- name: Build Linux package (.rpm)
working-directory: ${{ env.LINUX_APP_RELEASE_PATH }}
run: |
sudo alien -r ${{ env.LINUX_PACKAGE_DEB_NAME }}
cp -r ${{ env.LINUX_PACKAGE_TMP_RPM_NAME }} ${{ env.LINUX_PACKAGE_RPM_NAME }}
- name: Build Linux package (.AppImage)
working-directory: frontend
continue-on-error: true
run: |
sh scripts/linux_distribution/appimage/build_appimage.sh ${{ github.ref_name }}
cd ..
cp -r frontend/${{ env.LINUX_PACKAGE_TMP_APPIMAGE_NAME }} ${{ env.LINUX_APP_RELEASE_PATH }}/${{ env.LINUX_PACKAGE_APPIMAGE_NAME }}
- name: Upload Asset
id: upload-release-asset
@ -428,11 +416,11 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create-release.outputs.upload_url }}
asset_path: ${{ env.LINUX_APP_RELEASE_PATH }}/${{ env.LINUX_PACKAGE_ZIP_NAME }}
asset_path: ${{ env.LINUX_APP_RELEASE_PATH }}/${{ env.LINUX_ZIP_NAME }}
asset_name: ${{ env.LINUX_PACKAGE_ZIP_NAME }}
asset_content_type: application/octet-stream
- name: Upload DEB package
- name: Upload Debian package
id: upload-release-asset-install-package-deb
uses: actions/upload-release-asset@v1
env:

View file

@ -1,35 +1,12 @@
output: build/
output: dist/
releases:
- name: prod
- name: dev
jobs:
- name: release-prod-linux-deb
- name: release-dev-linux-deb
package:
platform: linux
target: deb
- name: release-prod-linux-rpm
- name: release-dev-linux-rpm
package:
platform: linux
target: rpm
- name: release-prod-linux-appimage
package:
platform: linux
target: appimage
- name: release-prod-linux-zip
package:
platform: linux
target: zip
# Because the flutter_distribute plugin does not support the deep code-signing for macos, we need to manually sign the app.
# So we don't use the flutter_distribute plugin to distribute the macos app.
# - name: release-prod-macos-dmg
# package:
# platform: macos
# target: dmg
# - name: release-prod-macos-pkg
# package:
# platform: macos
# target: pkg
- name: release-prod-macos-zip
package:
platform: macos
target: zip

View file

@ -10,6 +10,7 @@ import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:open_filex/open_filex.dart';
import 'package:string_validator/string_validator.dart';
import 'package:universal_platform/universal_platform.dart';
import 'package:url_launcher/url_launcher.dart' as launcher;
typedef OnFailureCallback = void Function(Uri uri);
@ -38,6 +39,11 @@ Future<bool> afLaunchUri(
);
}
// on Linux, add http scheme to the url if it is not present
if (UniversalPlatform.isLinux && !isURL(url, {'require_protocol': true})) {
uri = Uri.parse('https://$url');
}
// try to launch the uri directly
bool result;
try {

View file

@ -108,6 +108,12 @@ class _DraggableOptionButtonState extends State<DraggableOptionButton> {
}
}
// return simple table block if the target node is in a simple table block
final parentSimpleTableNode = targetNode.parentTableNode;
if (parentSimpleTableNode != null) {
return parentSimpleTableNode;
}
return targetNode;
},
builder: (context, data) {
@ -160,9 +166,16 @@ class _DraggableOptionButtonState extends State<DraggableOptionButton> {
}
}
// return simple table block if the target node is in a simple table block
final parentSimpleTableNode = targetNode.parentTableNode;
if (parentSimpleTableNode != null) {
return parentSimpleTableNode;
}
return targetNode;
},
);
dragToMoveNode(
context,
node: widget.blockComponentContext.node,

View file

@ -36,6 +36,15 @@ Future<void> dragToMoveNode(
return;
}
if (shouldIgnoreDragTarget(
editorState: editorState,
dragNode: node,
targetPath: acceptedPath,
)) {
Log.info('Drop ignored: node($node, ${node.path}), path($acceptedPath)');
return;
}
final position = getDragAreaPosition(context, targetNode, dragOffset);
if (position == null) {
Log.info('position is null');
@ -182,6 +191,7 @@ Future<void> dragToMoveNode(
Node dragTargetNode,
Offset dragOffset,
) {
debugPrint('getDragAreaPosition - dragTargetNode: ${dragTargetNode.type}');
final selectable = dragTargetNode.selectable;
final renderBox = selectable?.context.findRenderObject() as RenderBox?;
if (selectable == null || renderBox == null) {

View file

@ -263,10 +263,13 @@ class OutlineItemWidget extends StatelessWidget {
textDirection: textDirection,
children: [
HSpace(node.leftIndent),
Text(
node.outlineItemText,
textDirection: textDirection,
style: style,
Flexible(
child: Text(
node.outlineItemText,
textDirection: textDirection,
style: style,
overflow: TextOverflow.ellipsis,
),
),
],
),

View file

@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.10)
project(runner LANGUAGES CXX)
set(BINARY_NAME "appflowy")
set(BINARY_NAME "AppFlowy")
set(APPLICATION_ID "io.appflowy.appflowy")
cmake_policy(SET CMP0063 NEW)

View file

@ -1,22 +0,0 @@
display_name: AppFlowy
icon: linux/packaging/assets/logo.png
keywords:
- AppFlowy
- Office
- Document
- Database
- Note
- Kanban
- Note
generic_name: AppFlowy
categories:
- Office
startup_notify: true
supported_mime_type:
- x-scheme-handler/appflowy-flutter

View file

@ -29,8 +29,7 @@ essential: false
section: x11
priority: optional
supported_mime_type:
- x-scheme-handler/appflowy-flutter
supportedMimeType: x-scheme-handler/appflowy-flutter
dependencies:
- libnotify-bin

View file

@ -26,8 +26,7 @@ categories:
startup_notify: true
supported_mime_type:
- x-scheme-handler/appflowy-flutter
supportedMimeType: x-scheme-handler/appflowy-flutter
requires:
- libnotify

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View file

@ -1,26 +0,0 @@
{
"title": "AppFlowy",
"icon-size": 94,
"window": {
"size": {
"width": 600,
"height": 450
}
},
"background": "../../macos/packaging/assets/background.jpg",
"contents": [
{
"x": 141,
"y": 249,
"type": "file",
"path": "AppFlowy.app",
"name": "AppFlowy.app"
},
{
"x": 458,
"y": 249,
"type": "link",
"path": "/Applications"
}
]
}

View file

@ -1,17 +0,0 @@
title: "AppFlowy"
icon-size: 94
window:
size:
width: 600
height: 450
background: "../../../macos/packaging/assets/background.jpg"
contents:
- x: 141
y: 249
type: "file"
path: "AppFlowy.app"
name: "AppFlowy.app"
- x: 458
y: 249
type: "link"
path: "/Applications"

View file

@ -79,7 +79,7 @@ USER $user
WORKDIR /home/$user
COPY --from=builder /appflowy/frontend/appflowy_flutter/build/linux/x64/release/bundle .
RUN xdg-user-dirs-update && \
test -e ./appflowy && \
file ./appflowy
test -e ./AppFlowy && \
file ./AppFlowy
CMD ["./appflowy"]
CMD ["./AppFlowy"]

View file

@ -1,5 +1,5 @@
<node name="/io/appflowy/appflowy/Object">
<interface name="io.appflowy.appflowy">
<node name="/io/appflowy/AppFlowy/Object">
<interface name="io.appflowy.AppFlowy">
<method name="Activate">
<arg type="a{sv}" name="platform_data" direction="in" />
</method>
@ -13,4 +13,4 @@
<arg type="a{sv}" name="platform_data" direction="in" />
</method>
</interface>
</node>
</node>

View file

@ -1,8 +1,8 @@
[Desktop Entry]
Type=Application
Name=AppFlowy
Icon=io.appflowy.appflowy
Exec=appflowy %U
Icon=io.appflowy.AppFlowy
Exec=AppFlowy %U
Categories=Network;Productivity;
Keywords=Notes
DBusActivatable=true

View file

@ -1,46 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
<id>io.appflowy.appflowy</id>
<id>io.appflowy.AppFlowy</id>
<name>AppFlowy</name>
<summary>Open Source Notion Alternative</summary>
<summary>Open Source Notion Alternative</summary>
<metadata_license>CC-BY-4.0</metadata_license>
<project_license>AGPL-3.0-only</project_license>
<description>
<p>
# Built for teams that need more control and flexibility ## 100% data control You can host
AppFlowy wherever you want; no vendor lock-in.
# Built for teams that need more control and flexibility ## 100% data control You can host AppFlowy wherever you want; no vendor lock-in.
</p>
<p>
## Unlimited customizations Design and modify AppFlowy your way with an open core codebase.
</p>
<p>
## One codebase supporting multiple platforms AppFlowy is built with Flutter and Rust. What
does this mean? Faster development, better native experience, and more reliable performance.
## One codebase supporting multiple platforms AppFlowy is built with Flutter and Rust. What does this mean? Faster development, better native experience, and more reliable performance.
</p>
<p>
# Built for individuals who care about data security and mobile experience ## 100% control of
your data Download and install AppFlowy on your local machine. You own and control your
personal data.
# Built for individuals who care about data security and mobile experience ## 100% control of your data Download and install AppFlowy on your local machine. You own and control your personal data.
</p>
<p>
## Extensively extensible For those with no coding experience, AppFlowy enables you to create
apps that suit your needs. It&apos;s built on a community-driven toolbox, including templates,
plugins, themes, and more.
## Extensively extensible For those with no coding experience, AppFlowy enables you to create apps that suit your needs. It&apos;s built on a community-driven toolbox, including templates, plugins, themes, and more.
</p>
<p>
## Truly native experience Faster, more stable with support for offline mode. It&apos;s also
better integrated with different devices. Moreover, AppFlowy enables users to access features
and possibilities not available on the web.
## Truly native experience Faster, more stable with support for offline mode. It&apos;s also better integrated with different devices. Moreover, AppFlowy enables users to access features and possibilities not available on the web.
</p>
</description>
<launchable type="desktop-id">io.appflowy.appflowy.desktop</launchable>
<launchable type="desktop-id">io.appflowy.AppFlowy.desktop</launchable>
<screenshots>
<screenshot type="default">
<image>https://github.com/AppFlowy-IO/appflowy/raw/main/doc/imgs/welcome.png</image>
</screenshot>
</screenshots>
</component>
</component>

View file

@ -1,3 +1,3 @@
[D-BUS Service]
Name=io.appflowy.appflowy
Exec=appflowy
Name=io.appflowy.AppFlowy
Exec=AppFlowy

View file

@ -1,4 +1,4 @@
#!/usr/bin/env bash
gdbus call --session --dest io.appflowy.appflowy \
gdbus call --session --dest io.appflowy.AppFlowy \
--object-path /io/appflowy/AppFlowy/Object \
--method io.appflowy.appflowy.Open "['$1']" {}
--method io.appflowy.AppFlowy.Open "['$1']" {}

View file

@ -1,243 +0,0 @@
#!/bin/bash
# This Script is used to build the AppFlowy linux zip, deb, rpm or appimage
#
# Usage: ./scripts/flutter_release_build/build_linux.sh --build_type <type> --build_arch <arch> --version <version> [--skip-code-generation] [--skip-rebuild-core]
#
# Options:
# -h, --help Show this help message and exit
# --build_type The type of package to build. Must be one of:
# - all: Build all package types
# - zip: Build only zip package
# - tar.xz: Build only tar.xz package
# - deb: Build only deb package
# - rpm: Build only rpm package
# - appimage: Build only appimage package
# --build_arch The architecture to build. Must be one of:
# - x86_64: Build for x86_64 architecture
# - arm64: Build for arm64 architecture (not supported yet)
# --version The version number (e.g. 0.8.2)
# --skip-code-generation Skip the code generation step
# --skip-rebuild-core Skip the core rebuild step
show_help() {
echo "Usage: ./scripts/flutter_release_build/build_linux.sh --build_type <type> --build_arch <arch> --version <version> [--skip-code-generation] [--skip-rebuild-core]"
echo ""
echo "Options:"
echo " -h, --help Show this help message and exit"
echo ""
echo "Arguments:"
echo " --build_type The type of package to build. Must be one of:"
echo " - all: Build all package types"
echo " - zip: Build only zip package"
echo " - tar.xz: Build only tar.xz package"
echo " - deb: Build only deb package"
echo " - rpm: Build only rpm package"
echo " Please install the \033[33mrpm-build\033[0m and \033[33mpatchelf\033[0m before building the rpm and appimage package."
echo " For more information, please refer to the https://distributor.leanflutter.dev/makers/rpm/."
echo " - appimage: Build only appimage package"
echo " Please install the \033[33mlocate\033[0m and \033[33mappimagetool\033[0m before building the appimage package."
echo " For more information, please refer to the https://distributor.leanflutter.dev/makers/appimage/."
echo " --build_arch The architecture to build. Must be one of:"
echo " - x86_64: Build for x86_64 architecture"
echo " - arm64: Build for arm64 architecture (not supported yet)"
echo " --version The version number (e.g. 0.8.2)"
echo " --skip-code-generation Skip the code generation step. It may save time if you have already generated the code."
echo " --skip-rebuild-core Skip the core rebuild step. It may save time if you have already built the core."
exit 0
}
# Check for help flag
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
show_help
fi
# Parse named arguments
while [ $# -gt 0 ]; do
case "$1" in
--build_type)
BUILD_TYPE="$2"
shift 2
;;
--build_arch)
BUILD_ARCH="$2"
shift 2
;;
--version)
VERSION="$2"
shift 2
;;
--skip-code-generation)
SKIP_CODE_GENERATION=true
shift
;;
--skip-rebuild-core)
SKIP_REBUILD_CORE=true
shift
;;
*)
echo "Unknown parameter: $1"
show_help
exit 1
;;
esac
done
clear_cache() {
echo -e "Clearing the cache..."
rm -rf appflowy_flutter/build/$VERSION/
}
info() {
echo -e "🚀 \033[32m$1\033[0m"
}
error() {
echo -e "🚨 \033[31m$1\033[0m"
}
# Validate build type argument
if [ -z "$BUILD_TYPE" ]; then
error "Please specify build type with --build_type: all, zip, tar.xz, deb, rpm, appimage"
exit 1
fi
# Validate version argument
if [ -z "$VERSION" ]; then
error "Please specify version number with --version (e.g. 0.8.2)"
exit 1
fi
# Validate build arch argument
if [ -z "$BUILD_ARCH" ]; then
error "Please specify build arch with --build_arch: x86_64, arm64 or universal"
exit 1
fi
if [ "$BUILD_TYPE" != "all" ] && [ "$BUILD_TYPE" != "zip" ] && [ "$BUILD_TYPE" != "tar.xz" ] && [ "$BUILD_TYPE" != "deb" ] && [ "$BUILD_TYPE" != "rpm" ] && [ "$BUILD_TYPE" != "appimage" ]; then
error "Invalid build type. Must be one of: all, zip, tar.xz, deb, rpm, appimage"
exit 1
fi
has_built_core=false
has_generated_code=false
prepare_build() {
info "Preparing build..."
# Build the rust-lib with version
if [ "$SKIP_REBUILD_CORE" != "true" ] && [ "$has_built_core" != "true" ]; then
cargo make --env APP_VERSION=$VERSION --profile production-linux-$BUILD_ARCH appflowy-core-release
has_built_core=true
fi
if [ "$SKIP_CODE_GENERATION" != "true" ] && [ "$has_generated_code" != "true" ]; then
cargo make --env APP_VERSION=$VERSION --profile production-linux-$BUILD_ARCH code_generation
has_generated_code=true
fi
}
build_zip() {
info "Building zip package version $VERSION..."
prepare_build
cd appflowy_flutter
flutter_distributor release --name=prod --jobs=release-prod-linux-zip --skip-clean
cd ..
mv appflowy_flutter/build/$VERSION/appflowy-$VERSION+$VERSION-linux.zip appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64.zip
info "Zip package built successfully. The zip package is located at appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64.zip"
}
build_deb() {
info "Building deb package version $VERSION..."
prepare_build
cd appflowy_flutter
flutter_distributor release --name=prod --jobs=release-prod-linux-deb --skip-clean
cd ..
mv appflowy_flutter/build/$VERSION/appflowy-$VERSION+$VERSION-linux.deb appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64.deb
info "Deb package built successfully. The deb package is located at appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64.deb"
}
build_rpm() {
info "Building rpm package version $VERSION..."
prepare_build
cd appflowy_flutter
flutter_distributor release --name=prod --jobs=release-prod-linux-rpm --skip-clean
cd ..
mv appflowy_flutter/build/$VERSION/appflowy-$VERSION+$VERSION-linux.rpm appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64.rpm
info "RPM package built successfully. The RPM package is located at appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64.rpm"
}
# Function to build AppImage package
build_appimage() {
info "Building AppImage package version $VERSION..."
prepare_build
cd appflowy_flutter
flutter_distributor release --name=prod --jobs=release-prod-linux-appimage --skip-clean
cd ..
mv appflowy_flutter/build/$VERSION/appflowy-$VERSION+$VERSION-linux.AppImage appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64.AppImage
info "AppImage package built successfully. The AppImage package is located at appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64.AppImage"
}
build_tar_xz() {
info "Building tar.xz package version $VERSION..."
prepare_build
# step 1: check if the linux zip package is built, if not, build the zip package
if [ ! -f "appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64.zip" ]; then
info "Linux zip package is not built. Building the zip package..."
build_zip
fi
# step 2: unzip the zip package
unzip appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64.zip -d appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64
# check if the AppFlowy directory exists
if [ ! -d "appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64" ]; then
error "AppFlowy directory doesn't exist. Please check the zip package."
exit 1
fi
# step 3: build the tar.xz package
tar -cJvf appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64.tar.xz appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64/*
info "Tar.xz package built successfully. The tar.xz package is located at appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-linux-x86_64.tar.xz"
}
clear_cache
# Build packages based on build type
case $BUILD_TYPE in
"all")
build_zip
build_deb
build_rpm
build_appimage
;;
"zip")
build_zip
;;
"deb")
build_deb
;;
"rpm")
build_rpm
;;
"appimage")
build_appimage
;;
"tar.xz")
build_tar_xz
;;
esac

View file

@ -1,297 +0,0 @@
# This Script is used to build the AppFlowy macOS zip, dmg or pkg
#
# Usage: ./scripts/flutter_release_build/build_macos.sh --build_type <type> --build_arch <arch> --version <version> --apple-id <apple-id> --team-id <team-id> --password <password> [--skip-code-generation] [--skip-rebuild-core]
#
# Options:
# -h, --help Show this help message and exit
# --build_type The type of package to build. Must be one of:
# - all: Build all package types
# - zip: Build only zip package
# - dmg: Build only dmg package
# - tar.xz: Build only tar.xz package
# --build_arch The architecture to build. Must be one of:
# - x86_64: Build for x86_64 architecture
# - arm64: Build for arm64 architecture
# - universal: Build for universal architecture
# --version The version number (e.g. 0.8.2)
# --skip-code-generation Skip the code generation step
# --skip-rebuild-core Skip the core rebuild step
# --apple-id The apple id to use for the notary service
# --team-id The team id to use for the notary service
# --password The password to use for the notary service
show_help() {
echo "Usage: ./scripts/flutter_release_build/build_macos.sh --build_type <type> --build_arch <arch> --version <version> --apple-id <apple-id> --team-id <team-id> --password <password> [--skip-code-generation] [--skip-rebuild-core]"
echo ""
echo "Options:"
echo " -h, --help Show this help message and exit"
echo ""
echo "Arguments:"
echo " --build_type The type of package to build. Must be one of:"
echo " - all: Build all package types"
echo " - zip: Build only zip package"
echo " Please install the \033[33mp7zip\033[0m before building the zip package."
echo " For more information, please refer to the https://distributor.leanflutter.dev/makers/zip/."
echo " - tar.xz: Build only tar.xz package"
echo " - dmg: Build only dmg package"
echo " Please install the \033[33mappdmg\033[0m before building the dmg package."
echo " For more information, please refer to the https://distributor.leanflutter.dev/makers/dmg/."
echo " --build_arch The architecture to build. Must be one of:"
echo " - x86_64: Build for x86_64 architecture"
echo " - arm64: Build for arm64 architecture"
echo " - universal: Build for universal architecture"
echo " --version The version number (e.g. 0.8.2)"
echo " --skip-code-generation Skip the code generation step. It may save time if you have already generated the code."
echo " --skip-rebuild-core Skip the core rebuild step. It may save time if you have already built the core."
echo " --apple-id The apple id to use for the notary service"
echo " --team-id The team id to use for the notary service"
echo " --password The password to use for the notary service"
exit 0
}
# Check for help flag
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
show_help
fi
# Parse named arguments
while [ $# -gt 0 ]; do
case "$1" in
--build_type)
BUILD_TYPE="$2"
shift 2
;;
--build_arch)
BUILD_ARCH="$2"
shift 2
;;
--version)
VERSION="$2"
shift 2
;;
--skip-code-generation)
SKIP_CODE_GENERATION=true
shift
;;
--skip-rebuild-core)
SKIP_REBUILD_CORE=true
shift
;;
--apple-id)
APPLE_ID="$2"
shift 2
;;
--team-id)
TEAM_ID="$2"
shift 2
;;
--password)
PASSWORD="$2"
shift 2
;;
*)
echo "Unknown parameter: $1"
show_help
exit 1
;;
esac
done
clear_cache() {
echo "Clearing the cache..."
rm -rf appflowy_flutter/build/$VERSION/
}
info() {
echo "🚀 \033[32m$1\033[0m"
}
error() {
echo "🚨 \033[31m$1\033[0m"
}
# Validate build type argument
if [ -z "$BUILD_TYPE" ]; then
error "Please specify build type with --build_type: all, zip, dmg, tar.xz"
exit 1
fi
# Validate version argument
if [ -z "$VERSION" ]; then
error "Please specify version number with --version (e.g. 0.8.2)"
exit 1
fi
# Validate build arch argument
if [ -z "$BUILD_ARCH" ]; then
error "Please specify build arch with --build_arch: x86_64, arm64 or universal"
exit 1
fi
if [ "$BUILD_TYPE" != "all" ] && [ "$BUILD_TYPE" != "zip" ] && [ "$BUILD_TYPE" != "dmg" ] && [ "$BUILD_TYPE" != "tar.xz" ]; then
error "Invalid build type. Must be one of: all, zip, dmg, tar.xz"
exit 1
fi
prepare_build() {
info "Preparing build..."
# step 1: build the appflowy-core (rust-lib) based on the build arch
if [ "$SKIP_REBUILD_CORE" != "true" ]; then
if [ "$BUILD_ARCH" = "x86_64" ] || [ "$BUILD_ARCH" = "universal" ]; then
info "Building appflowy-core for x86_64...(This may take a while)"
cargo make --profile production-mac-x86_64 appflowy-core-release
fi
if [ "$BUILD_ARCH" = "arm64" ] || [ "$BUILD_ARCH" = "universal" ]; then
info "Building appflowy-core for arm64...(This may take a while)"
cargo make --profile production-mac-arm64 appflowy-core-release
fi
# step 2 (optional): combine these two libdart_ffi.a into one libdart_ffi.a if the build arch is universal
if [ "$BUILD_ARCH" = "universal" ]; then
info "Combining libdart_ffi.a for universal..."
lipo -create \
rust-lib/target/x86_64-apple-darwin/release/libdart_ffi.a \
rust-lib/target/aarch64-apple-darwin/release/libdart_ffi.a \
-output rust-lib/target/libdart_ffi.a
info "Checking the libdart_ffi.a for universal..."
lipo -archs rust-lib/target/libdart_ffi.a
cp -rf rust-lib/target/libdart_ffi.a \
appflowy_flutter/packages/appflowy_backend/macos/
fi
fi
# step 3 (optional): generate the flutter code: languages, icons and freezed files.
if [ "$SKIP_CODE_GENERATION" != "true" ]; then
info "Generating the flutter code...(This may take a while)"
cargo make code_generation
fi
# step 4: build the zip package
info "Building the zip package..."
cd appflowy_flutter
flutter_distributor release --name=prod --jobs=release-prod-macos-zip --skip-clean
cd ..
}
build_zip() {
info "Building zip package version $VERSION..."
# step 1: check if the macos zip package is built, if not, build the zip package
if [ ! -f "appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.zip" ]; then
info "macOS zip package is not built. Building the zip package..."
prepare_build
# step 1.1: move the zip package to the build directory
mv appflowy_flutter/build/$VERSION/appflowy-$VERSION+$VERSION-macos.zip appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.zip
fi
# step 2: unzip the zip package and codesign the app
unzip -o appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.zip
# step 3: codesign the app
# note: You must install the certificate to the system before codesigning
sudo /usr/bin/codesign --force --options runtime --deep --sign "Developer ID Application: APPFLOWY PTE. LTD" --deep --verbose AppFlowy.app -v
# step 4: zip the app again
7z a appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.zip AppFlowy.app
info "Zip package built successfully"
}
build_dmg() {
info "Building DMG package version $VERSION..."
# step 1: check if the macos zip package is built, if not, build the zip package
if [ ! -f "appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.zip" ]; then
info "macOS zip package is not built. Building the zip package..."
build_zip
fi
# step 2: unzip the zip package and copy the make_config.json file to the build directory
unzip appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.zip -d appflowy_flutter/build/$VERSION/
cp appflowy_flutter/macos/packaging/dmg/make_config.json appflowy_flutter/build/$VERSION/
# check if the AppFlowy.app doesn't exist, exit the script
if [ ! -d "appflowy_flutter/build/$VERSION/AppFlowy.app" ]; then
error "AppFlowy.app doesn't exist. Please check the zip package."
exit 1
fi
# check if the appdmg has been installed
if ! command -v appdmg &>/dev/null; then
info "appdmg is not installed. Installing appdmg..."
npm install -g appdmg
fi
# step 3: build the dmg package using appdmg
# note: You must install the appdmg to the system before building the dmg package
appdmg appflowy_flutter/build/$VERSION/make_config.json appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.dmg
# step 4: clear the temp files
rm -rf appflowy_flutter/build/$VERSION/AppFlowy.app
rm -rf appflowy_flutter/build/$VERSION/make_config.json
# check if the dmg package is built
if [ ! -f "appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.dmg" ]; then
error "DMG package is not built. Please check the build process."
exit 1
fi
info "DMG package built successfully. The dmg package is located at appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.dmg"
if [ -z "$APPLE_ID" ] || [ -z "$TEAM_ID" ] || [ -z "$PASSWORD" ]; then
error "The apple id, team id and password are not specified. Please notarize the dmg package manually."
error "xcrun notarytool submit appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.dmg --apple-id <your-apple-id> --team-id <your-team-id> --password <your-password> -v -f \"json\" --wait"
else
xcrun notarytool submit appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.dmg --apple-id $APPLE_ID --team-id $TEAM_ID --password $PASSWORD -v -f "json" --wait
info "Notarization is completed. Please check the notarization status"
fi
}
build_tar_xz() {
info "Building tar.xz package version $VERSION..."
# step 1: check if the macos zip package is built, if not, build the zip package
if [ ! -f "appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.zip" ]; then
info "macOS zip package is not built. Building the zip package..."
build_zip
fi
# step 2: unzip the zip package and copy the make_config.json file to the build directory
unzip appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.zip -d appflowy_flutter/build/$VERSION/
# check if the AppFlowy.app doesn't exist, exit the script
if [ ! -d "appflowy_flutter/build/$VERSION/AppFlowy.app" ]; then
error "AppFlowy.app doesn't exist. Please check the zip package."
exit 1
fi
# step 3: build the tar.xz package
tar -cJvf appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.tar.xz appflowy_flutter/build/$VERSION/AppFlowy.app
info "Tar.xz package built successfully. The tar.xz package is located at appflowy_flutter/build/$VERSION/AppFlowy-$VERSION-macos-$BUILD_ARCH.tar.xz"
}
clear_cache
# Build packages based on build type
case $BUILD_TYPE in
"all")
build_zip
build_dmg
build_tar_xz
;;
"zip")
build_zip
;;
"dmg")
build_dmg
;;
"tar.xz")
build_tar_xz
;;
esac

View file

@ -11,11 +11,11 @@ script:
AppDir:
path: ./AppDir
app_info:
id: io.appflowy.appflowy
id: io.appflowy.AppFlowy
name: AppFlowy
icon: appflowy.svg
version: [CHANGE_THIS]
exec: appflowy
exec: AppFlowy
exec_args: $@
apt:
arch:

View file

@ -2,7 +2,7 @@
Type=Application
Name=AppFlowy
Icon=/usr/share/icons/hicolor/scalable/apps/appflowy.svg
Exec=/usr/bin/appflowy %U
Exec=/usr/bin/AppFlowy %U
Categories=Network;Productivity;
Keywords=Notes
Terminal=false

View file

@ -1,8 +1,8 @@
#!/usr/bin/env bash
if [ -e /usr/bin/appflowy ]; then
if [ -e /usr/bin/AppFlowy ]; then
echo "Symlink already exists, skipping."
else
echo "Creating Symlink in /usr/bin/appflowy"
ln -s /usr/lib/appflowy/appflowy /usr/bin/appflowy
ln -s /usr/lib/AppFlowy/AppFlowy /usr/bin/AppFlowy
ln -s /usr/lib/AppFlowy/launcher.sh /usr/bin/AppFlowyLauncher.sh
fi

View file

@ -1,5 +1,5 @@
#!/usr/bin/env bash
if [ -e /usr/bin/appflowy ]; then
rm /usr/bin/appflowy
if [ -e /usr/bin/AppFlowy ]; then
rm /usr/bin/AppFlowy
rm /usr/bin/AppFlowyLauncher.sh
fi

View file

@ -25,9 +25,9 @@ chmod 0755 $DEBIAN/postinst
chmod 0755 $DEBIAN/postrm
grep -rl "\[CHANGE_THIS\]" $DEBIAN/control | xargs sed -i "s/\[CHANGE_THIS\]/$VERSION/"
cp -fR $LINUX_RELEASE_PRODUCTION/appflowy $LIB
cp ./scripts/linux_distribution/deb/appflowy.desktop $APPLICATIONS
cp ./scripts/linux_distribution/packaging/io.appflowy.appflowy.metainfo.xml $METAINFO
cp -fR $LINUX_RELEASE_PRODUCTION/AppFlowy $LIB
cp ./scripts/linux_distribution/deb/AppFlowy.desktop $APPLICATIONS
cp ./scripts/linux_distribution/packaging/io.appflowy.AppFlowy.metainfo.xml $METAINFO
cp ./scripts/linux_distribution/packaging/appflowy.svg $ICONS
# Build the package

View file

@ -1 +1 @@
Please refer to https://github.com/flathub/io.appflowy.appflowy repo.
Please refer to https://github.com/flathub/io.appflowy.AppFlowy repo.

View file

@ -1,46 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
<id>io.appflowy.appflowy</id>
<id>io.appflowy.AppFlowy</id>
<name>AppFlowy</name>
<summary>Open Source Notion Alternative</summary>
<summary>Open Source Notion Alternative</summary>
<metadata_license>CC-BY-4.0</metadata_license>
<project_license>AGPL-3.0-only</project_license>
<description>
<p>
# Built for teams that need more control and flexibility ## 100% data control You can host
AppFlowy wherever you want; no vendor lock-in.
# Built for teams that need more control and flexibility ## 100% data control You can host AppFlowy wherever you want; no vendor lock-in.
</p>
<p>
## Unlimited customizations Design and modify AppFlowy your way with an open core codebase.
</p>
<p>
## One codebase supporting multiple platforms AppFlowy is built with Flutter and Rust. What
does this mean? Faster development, better native experience, and more reliable performance.
## One codebase supporting multiple platforms AppFlowy is built with Flutter and Rust. What does this mean? Faster development, better native experience, and more reliable performance.
</p>
<p>
# Built for individuals who care about data security and mobile experience ## 100% control of
your data Download and install AppFlowy on your local machine. You own and control your
personal data.
# Built for individuals who care about data security and mobile experience ## 100% control of your data Download and install AppFlowy on your local machine. You own and control your personal data.
</p>
<p>
## Extensively extensible For those with no coding experience, AppFlowy enables you to create
apps that suit your needs. It&apos;s built on a community-driven toolbox, including templates,
plugins, themes, and more.
## Extensively extensible For those with no coding experience, AppFlowy enables you to create apps that suit your needs. It&apos;s built on a community-driven toolbox, including templates, plugins, themes, and more.
</p>
<p>
## Truly native experience Faster, more stable with support for offline mode. It&apos;s also
better integrated with different devices. Moreover, AppFlowy enables users to access features
and possibilities not available on the web.
## Truly native experience Faster, more stable with support for offline mode. It&apos;s also better integrated with different devices. Moreover, AppFlowy enables users to access features and possibilities not available on the web.
</p>
</description>
<launchable type="desktop-id">io.appflowy.appflowy.desktop</launchable>
<launchable type="desktop-id">io.appflowy.AppFlowy.desktop</launchable>
<screenshots>
<screenshot type="default">
<image>https://github.com/AppFlowy-IO/appflowy/raw/main/doc/imgs/welcome.png</image>
</screenshot>
</screenshots>
</component>
</component>

View file

@ -1,3 +1,3 @@
[D-BUS Service]
Name=io.appflowy.appflowy
Name=io.appflowy.AppFlowy
Exec=AppFlowy

View file

@ -1,4 +1,4 @@
#!/usr/bin/env bash
gdbus call --session --dest io.appflowy.appflowy \
--object-path /io/appflowy/appflowy/Object \
--method io.appflowy.appflowy.Open "['$1']" {}
gdbus call --session --dest io.appflowy.AppFlowy \
--object-path /io/appflowy/AppFlowy/Object \
--method io.appflowy.AppFlowy.Open "['$1']" {}

View file

@ -1,7 +1,7 @@
#!/usr/bin/env bash
if [ -e /usr/local/bin/appflowy ]; then
if [ -e /usr/local/bin/AppFlowy ]; then
echo "Symlink already exists, skipping."
else
echo "Creating Symlink in /usr/local/bin/appflowy"
ln -s /opt/appflowy/appflowy /usr/local/bin/appflowy
ln -s /opt/AppFlowy/AppFlowy /usr/local/bin/AppFlowy
fi