Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
marcelklehr committed Feb 5, 2025
2 parents 528e9af + 4e4f69b commit 2007bde
Show file tree
Hide file tree
Showing 45 changed files with 4,979 additions and 7,245 deletions.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,4 @@ body:
required: false
- type: markdown
attributes:
value: "Please note: To continue development and maintenance of this project in a sustainable way, it is expected that you donate to the project when opening a ticket, if you're not a donor already. You can find donation options at <https://floccus.org/donate/>. Thank you!"
value: "Please note: To continue development and maintenance of this project in a sustainable way, I ask that you donate to the project when opening a ticket (or at least once your issue is resolved), if you're not a donor already. You can find donation options at <https://floccus.org/donate/>. Thank you!"
5 changes: 3 additions & 2 deletions .github/workflows/issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,9 @@ jobs:
Thus, if you can, you could also have a look at other issues to see whether you can help other people with your knowledge
and experience. If you have coding experience it would also be awesome if you could step up to dive into the code and
try to fix the odd bug yourself. Everyone will be thankful for extra helping hands!
To continue the development and maintenance of this project in a sustainable way it is expected that you donate to the project when opening a ticket,
if you're not a donor already. You can find donation options at <https://floccus.org/donate/>. Thank you!
To continue the development and maintenance of this project in a sustainable way I ask that you donate to the project when opening an issue
(or at least once your issue is solved), if you're not a donor already.
You can find donation options at <https://floccus.org/donate/>. Thank you!
One last word: If you feel, at any point, like you need to vent, this is not the place for it; you can go to the Nextcloud forum,
to twitter or somewhere else. But this is a technical issue tracker, so please make sure to
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ jobs:
mkdir __fixtures__
cd __fixtures__
git init --bare test.git -b main
npm i git-http-server
npx git-http-server &
npx htpasswd -cb test.git/.htpasswd admin admin
if: matrix.floccus-adapter == 'git-xbel' || matrix.floccus-adapter == 'git-html'
Expand Down
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,29 @@
# Changelog

## [5.4.4]

### Fixed
* fix(SyncProcess): When creating dummy bookmarks representing separators, make sure to use vertical lines on the Toolbar, and horizontal lines otherwise. (thanks to @macrogreg)
* fix(Xbel): Don't parse tag values
* fix: Throw nice error for when gdrive search fails
* fix: Clean up dependencies (#1851)
* fix(messages): Specify that the file path doesn't matter for Google Drive

## [5.4.3]

### Fixed

* fix(OptionsLinkwarden): Allow changing server folder
* fix(Storage): Don't give up when storage entry can not be parsed
* refactor(Account#setData): Accept partial data and use lock to set data (fixes hanging sync on iOS)
* fix(README): Add APK cert fingerprint
* fix(GoogleDrive|WebDAV): Try to catch more errors when file is encrypted
* enh(AutoSync): Add an explantion in settings
* [native] Try to find a valid URL when an app shares title+URL stuffed together (thanks to Andy Balaam)
* [native] Check that a URL is valid as soon as we load the Add Bookmark dialog (thanks to Andy Balaam)
* [native] Prevent saving a newly-added bookmark if the URL is bad (thanks to Andy Balaam)
* [native] Catch and log any errors we encounter when parsing a URL to display its hostname (thanks to Andy Balaam)

## [5.4.2]

(aka 5.4.2.1)
Expand Down
62 changes: 62 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@

[![Download now](https://img.shields.io/badge/Download-now-limegreen.svg?&style=for-the-badge)](https://floccus.org/download)

This is the SHA-256 fingerprint of the certificate used to sign the floccus APKs:

```
ffed2778ff07371e6367b6dcf5d7c1327c57ff7158b8444029182a9aa2dd7085
```


If you'd like to support the creation and maintenance of this software, please consider donating. :)
Expand Down Expand Up @@ -124,6 +129,63 @@ Run the following to automatically compile changes as you make them:

- `npm run build-release`

#### Windows-specific considerations

Follow the above general guidance on setting up a dev environment.
There are Windows-specific versions of some npm scripts:
- build: `npm run build-win`
- build-release: `npm run build-release-win`
- watch: `watch-win`

When building for the first time you may get an error about `gulp` not being found.
You can install gulp globally on your system by executing `npm install -g gulp` from your repo root.
It is recommended that you do this proactively after executing `npm install` in the repo root for the first time.

#### Running the browser extension and corresponding tests locally

- Build the browser extension:
`npm run build-release`
(`npm run build-release-win` if you use Windows)

- After a successful build, the extension package will be found in:
`RepoRoot/builds/`

- The following steps use _Firefox_ as an example; other browsers work similarly.
The Firefox extension package is a file with an `.xpi`-extension. It is a simple archive. To modify it, you can rename it to `.zip`, make the changes, and then rename it back to `.xpi`. Many archive-related tools know this and allow you to work with the `.xpi`-file directly (e.g. [Total Commander](https://www.ghisler.com/download.htm)).

- Enable the extension package for local testing:
By default, tests are not included into the release archive. To run tests in your local browser, copy the file
`RepoRoot/dist/js/test.js`
into the release package, so that it is located at
`FloccusPackage.xpi/dist/js/test.js`

- Open Firefox using a dedicated test-profile:
**If you use your main profile for testing, the test scripts will likely destroy your existing bookmarks and open tabs!**
To interact with profiles, go to this address:
`about:profiles`

- Load the extension:
In the a dedicated Firefox profile window, go to
`about:debugging`
Select "This Firefox", and then under "Temporary Extensions", select "Load Temporary Add-on...". Then select the `.xpi`-file you prepared earlier.
(Remember to unload the extension if you need to modify/rebuild the extension package.)

- The extension is now loaded. You can access it via the browser's extensions menu.

- Run tests:
After loading the extension, click on "Manifest URL". It will open a new tab with the URL
`moz-extension://SomeGuid/manifest.json`
Modify the URL to read
`moz-extension://SomeGuid/dist/html/test.html`
, keeping the same GUID and press enter. The test run should start automatically.

- Debug or pause tests:
Press `F12` to open developer tools.
On the "Debugger" tab, you can pause the execution, set breakpoints and step through the code.

Happy developing and thank you for your contributions!


## Backers

Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/floccus#backer)]
Expand Down
10 changes: 8 additions & 2 deletions _locales/en/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,9 @@
"Error039": {
"message": "E039: Failed to update the following bookmark on the server: {0}"
},
"Error040": {
"message": "E040: Could not search for your file name in your Google Drive"
},
"LabelWebdavurl": {
"message": "WebDAV URL"
},
Expand All @@ -132,13 +135,13 @@
"message": "Password"
},
"LabelBookmarksfile": {
"message": "Bookmarks file path"
"message": "Bookmarks file"
},
"DescriptionBookmarksfile": {
"message": "a path to the bookmarks file relative to your WebDAV URL (all folders in the path must already exist). e.g. personal_stuff/bookmarks.xbel"
},
"DescriptionBookmarksfilegoogle": {
"message": "the file name of the bookmarks file that will reside in your Google Drive (make sure this name is unique in your Drive)"
"message": "the file name of the bookmarks file that will reside in your Google Drive. Do not enter the full file path, only the file name. Make sure this name is unique in your Drive."
},
"DescriptionBookmarksfilegit": {
"message": "a path to the bookmarks file relative to your Git repository root (all folders in the path must already exist). e.g. personal_stuff/bookmarks.xbel"
Expand Down Expand Up @@ -812,5 +815,8 @@
},
"DescriptionScheduledforcesync": {
"message": "Do you really want to force sync? Syncing with two devices at the same time can have unforeseen consequences including corruption of your data. Make sure that no other device is syncing at the moment before confirming."
},
"DescriptionAutosync": {
"message": "Turning on automatic sync will make sure a sync run is triggered regularly within a certain configurable interval as well as on demand a few seconds after you make changes. If you don't turn on automatic sync you will need to trigger sync runs manually by pressing the sync button."
}
}
10 changes: 8 additions & 2 deletions _locales/gl/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,9 @@
"Error039": {
"message": "E035: Produciuse un fallo ao actualizar o seguinte marcador no servidor: {0}"
},
"Error040": {
"message": "E040: non foi posíbel buscar o nome de ficheiro en Google Drive"
},
"LabelWebdavurl": {
"message": "URL de WebDAV"
},
Expand All @@ -132,13 +135,13 @@
"message": "Contrasinal"
},
"LabelBookmarksfile": {
"message": "Ruta do ficheiro de marcadores"
"message": "Ficheiro de marcadores"
},
"DescriptionBookmarksfile": {
"message": "unha ruta ao ficheiro de marcadores relativa ao URL de WebDAV (xa deben existir todos os cartafoles da ruta). p. ex. cousas_persoais/bookmarks.xbel"
},
"DescriptionBookmarksfilegoogle": {
"message": "o nome do ficheiro de marcadores que residirá no seu Google Drive (asegúrese de que este nome é único no seu Drive)"
"message": "o nome do ficheiro de marcadores que residirá no seu Google Drive. Non introduza a ruta completa do ficheiro, só o nome do ficheiro. Asegúrese de que este nome é único no seu Drive."
},
"DescriptionBookmarksfilegit": {
"message": "unha ruta ao ficheiro de marcadores relativa á raíz do repositorio de Git (xa deben existir todos os cartafoles da ruta). p. ex. cousas_persoais/bookmarks.xbel"
Expand Down Expand Up @@ -812,5 +815,8 @@
},
"DescriptionScheduledforcesync": {
"message": "Confirma que quere forzar a sincronización? A sincronización con dous dispositivos ao mesmo tempo pode ter consecuencias imprevistas, incluíndo o estragado dos datos. Asegúrese de que ningún outro dispositivo estea a sincronizar neste intre antes de confirmar."
},
"DescriptionAutosync": {
"message": "Ao activar a sincronización automática asegurarase de que unha execución de sincronización se active regularmente dentro dun determinado intervalo configurábel, así como baixo demanda uns segundos após facer cambios. Se non activa a sincronización automática, terá que activar a sincronización manualmente premendo o botón de sincronización."
}
}
3 changes: 3 additions & 0 deletions _locales/tr/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -812,5 +812,8 @@
},
"DescriptionScheduledforcesync": {
"message": "Gerçekten senkronizasyona zorlamak istiyor musunuz? Aynı anda iki cihazla senkronizasyon yapılması, verilerinizin bozulması dahil öngörülemeyen sonuçlara yol açabilir. Onaylamadan önce şu anda başka hiçbir cihazın senkronize edilmediğinden emin olun."
},
"DescriptionAutosync": {
"message": "Otomatik senkronizasyonun açılması, bir senkronizasyon çalıştırmalarını belirli bir aralıkta düzenli olarak ve ayrıca değişiklik yaptıktan birkaç saniye sonra isteğe bağlı olarak tetiklenmesini sağlar. Otomatik senkronizasyonu açmazsanız, senkronizasyon düğmesine basarak senkronizasyon çalıştırmalarını manuel olarak tetiklemeniz gerekecektir."
}
}
10 changes: 8 additions & 2 deletions _locales/zh_CN/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,9 @@
"Error039": {
"message": "E039: 未能在服务器上更新下列书签: {0}"
},
"Error040": {
"message": "E040: 无法在你的 Google 云盘中搜索你的文件名"
},
"LabelWebdavurl": {
"message": "WebDAV URL"
},
Expand All @@ -132,13 +135,13 @@
"message": "密码"
},
"LabelBookmarksfile": {
"message": "书签路径"
"message": "书签文件"
},
"DescriptionBookmarksfile": {
"message": "相对于WebDAV URL的书签路径(所有路径必须已经存在).例如:personal_stuff/bookmarks.xbel "
},
"DescriptionBookmarksfilegoogle": {
"message": "书签文件的文件名,该文件将存放在 Google Drive 中(确保该名称在 Google Drive 中是唯一的)"
"message": " Google 云盘内保存的书签文件的名称。不要输入完整的文件路径,只输入文件名即可。请确保该名称在你的 Google 云盘内是唯一的"
},
"DescriptionBookmarksfilegit": {
"message": "相对于你的 Git 存储库根目录的书签文件路径 (路径中的所有文件夹必须都已存在)。如,personal_stuff/bookmarks.xbel"
Expand Down Expand Up @@ -812,5 +815,8 @@
},
"DescriptionScheduledforcesync": {
"message": "你真要强制同步吗?同时和两台设备同步可能会有预想不到的后果,包括数据损坏。在确认前,请确保此刻没有其他设备正在同步。"
},
"DescriptionAutosync": {
"message": "打开自动更新会确保同步运行在某一可配置间隔内被定期触发,以及在你做出更改数秒后按需触发。如果不打开自动同步,你需要按下同步按钮手动触发同步。"
}
}
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ android {
applicationId "org.handmadeideas.floccus"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 5004002
versionName "5.4.2"
versionCode 5004004
versionName "5.4.4"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
Expand Down
26 changes: 11 additions & 15 deletions gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,14 @@ try {
const VERSION = require('./package.json').version
const paths = {
zip: [
'./**',
(process.env['CI'] ? './' : '!') + 'dist/js/test.js',
'!builds/**',
'!src/**',
'!node_modules/**',
'!img/**',
'!ISSUE_TEMPLATE.md',
'!gulpfile.js',
'!key.pem',
'!android/**',
'!ios/**',
'!manifest*.json'
(process.env['CI'] ? './' : '!') + './dist/js/test.js',
'./dist/**',
'./icons/**',
'./lib/**',
'./_locales/**',
'LICENSE.txt',
'PRIVACY_POLICY.md',
'README.md',
],
views: './html/*.html',
nativeHTML: './html/index.html',
Expand Down Expand Up @@ -193,7 +189,7 @@ const main = gulp.series(build, native)

const chromeZip = function() {
return gulp
.src(paths.chromeZip, { buffer: false })
.src(paths.chromeZip, { buffer: false, base: './' })
.pipe(rename((path) => {
if (path.basename.startsWith('manifest') && path.extname === '.json') {
path.basename = 'manifest'
Expand All @@ -205,7 +201,7 @@ const chromeZip = function() {

const firefoxZip = function() {
return gulp
.src(paths.firefoxZip, { buffer: false })
.src(paths.firefoxZip, { buffer: false, base: './' })
.pipe(rename((path) => {
if (path.basename.startsWith('manifest') && path.extname === '.json') {
path.basename = 'manifest'
Expand All @@ -217,7 +213,7 @@ const firefoxZip = function() {

const xpi = function() {
return gulp
.src(paths.firefoxZip, { buffer: false })
.src(paths.firefoxZip, { buffer: false, base: './' })
.pipe(rename((path) => {
if (path.basename.startsWith('manifest') && path.extname === '.json') {
path.basename = 'manifest'
Expand Down
12 changes: 6 additions & 6 deletions ios/App/App.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 5.4.0;
MARKETING_VERSION = 5.4.1;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "org.handmadeideas.floccus.new-bookmark";
Expand Down Expand Up @@ -397,7 +397,7 @@
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 5.4.0;
MARKETING_VERSION = 5.4.1;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "org.handmadeideas.floccus.new-bookmark";
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -459,7 +459,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MARKETING_VERSION = 5.4.0;
MARKETING_VERSION = 5.4.1;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
Expand Down Expand Up @@ -511,7 +511,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
MARKETING_VERSION = 5.4.0;
MARKETING_VERSION = 5.4.1;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
Expand All @@ -537,7 +537,7 @@
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 5.4.0;
MARKETING_VERSION = 5.4.1;
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
PRODUCT_BUNDLE_IDENTIFIER = org.handmadeideas.floccus;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -567,7 +567,7 @@
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.productivity";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 5.4.0;
MARKETING_VERSION = 5.4.1;
PRODUCT_BUNDLE_IDENTIFIER = org.handmadeideas.floccus;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
Expand Down
2 changes: 1 addition & 1 deletion ios/App/App/capacitor.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,6 @@
"PreferencesPlugin",
"SharePlugin",
"SplashScreenPlugin",
"SendIntent"
"SendIntentPlugin"
]
}
17 changes: 17 additions & 0 deletions ios/App/PrivacyInfo.xcprivacy
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>
Loading

0 comments on commit 2007bde

Please sign in to comment.