ferdium / ferdium-app

All your services in one place, built by the community
https://ferdium.org
Apache License 2.0
2.92k stars 176 forks source link

Services do not load when started without network connectivity #1842

Open deadmeu opened 4 months ago

deadmeu commented 4 months ago

Avoid duplicates

Ferdium Version

6.7.4

What Operating System are you using?

Other Linux

Operating System Version

Archlinux

What arch are you using?

x64

Last Known Working Ferdium version

No response

Expected Behavior

Using a local account, services should never fail to be loaded even when there is no network connectivity.

Actual Behavior

Services do not load on start up and will never load until you manually either restart Ferdium or refresh with ctrl+shift+r.

Steps to reproduce

  1. Configure Ferdium to use a local, offline account.
  2. Add some services to Ferdium.
  3. Disconnect your device from all networks.
  4. Start Ferdium.
  5. Observe that Ferdium is unable to load the services.
  6. Connect back to the network with internet connectivity.
  7. Observe that Ferdium does not retry to load the services.

Debug link

No response

Screenshots

No response

Additional information

No response

deadmeu commented 4 months ago

Looking through issues further it seems like this might be a duplicate of #83 but I thought we already had a local server?

vraravam commented 4 months ago

I'm not sure Ferdium would be useful in this case. All Ferdium does is render web pages on chromium tabs. If there's no internet connectivity, even if we solve this ticket, and services come back up, how is that going to solve the issue that each service will show the 'no internet connection' default page from chromium? I'm not sure if we need to spend time on fixing this. @deadmeu : Please add more information on how this issue (if resolved) will unblock a user from using Ferdium?

deadmeu commented 4 months ago

I'm not sure Ferdium would be useful in this case. All Ferdium does is render web pages on chromium tabs. If there's no internet connectivity, even if we solve this ticket, and services come back up, how is that going to solve the issue that each service will show the 'no internet connection' default page from chromium? I'm not sure if we need to spend time on fixing this. @deadmeu : Please add more information on how this issue (if resolved) will unblock a user from using Ferdium?

I think there are multiple issues here:

  1. Ferdium's UI is confusing when services cannot be loaded as everything is hidden away from the user. You have no access to your local services or workspaces so you cannot configure them or do anything that would not require any internet connectivity.
  2. Services do not automatically come online when internet connectivity is restored. You have to manually restart/refresh Ferdium. This is an issue for me at the moment because by default on Archlinux with KDE the wifi password is stored in the wallet, and if you have automatic login enabled the wallet will not be unlocked, and so there is a period of time where the device cannot reach the internet until the user unlocks the wallet which breaks Ferdium on startup.
  3. There are ways around my issue but this is still a bug because the "Try again" button does not work when you are reconnected to the network and click it. Also, it looks like there is some retry logic being performed (which should resolve the above issue) as I can see the "Try again" button render a spinner icon periodically, but that is also not working.
SpecialAro commented 3 months ago

Hello @deadmeu

Having read your points I still don't quite understand what you would expect to happen when you don't have internet connection.

I agree that maybe UI wise it could be more informative (something like, please connect back to the internet to use Ferdium). Also, If the "try again" button is not working properly (or even the logic behind it) then it is a bug indeed that we should take a look at.

Nevertheless, I don't think that given the fact that Ferdium is used to render websites, it would be useful to allow the user to change anything when there isn't internet connection. The question being: why would you want to add/remove services or even edit configurations inside Ferdium if you can't connect to the internet to make use of Ferdium (services)?

From a developer point of view (and knowing the code as it is) I would argue if there is any benefit on allowing the user to change anything settings/services related if there is no internet connection, give the cost it would take to code and refactor everything. I would simply add a screen overlay that won't enable any app interaction as long as the user doesn't connect to the internet. That would be my suggestion, but let me know your thoughts on this @vraravam and @deadmeu

deadmeu commented 3 months ago

Hi @SpecialAro basically, I would expect the same thing that happens when you try to use a web browser without an internet connection. When you attempt to visit a website, some sort of "Cannot connect to site" page could be displayed. Everything else in the browser is still accessible and configurable, and as soon as connectivity is restored, a simple page refresh reloads the page just fine, without having to close/reopen the entire browser.

I'm not familiar with the codebase, but I don't use any account features of Ferdium, I want everything to be local and offline as much as possible, so the fact that everything is completely disabled when just my internet connectivity is unavailable seems strange to me. All the data should still be on my system, it doesn't bother me that the services won't load properly, but at least I will be able to tell the difference between "my services aren't loading because I have no internet connection" vs "all of my services are missing and it looks like all of my configuration has been deleted" (the latter being how I have previously reacted to seeing Ferdium fail to load anything - I have even started trying to add the services back again - these days I know it's just a connectivity issue).

When Ferdium is in use, and the internet connection is lost, Ferdium does not "shut down" and hide everything and block access to all settings. Instead, the state is preserved and everything can still be used (and some web pages will even detect the lack of network access and will display some sort of "cannot connect" message or banner, which I think would be another feature that Ferdium should display in this scenario). Many of these websites are actually PWAs these days, and should even work without internet access, so that is another reason why Ferdium should try a best-effort approach towards loading services even with network connectivity problems (#1826).

SpecialAro commented 3 months ago

Thank you for your reply!

The fact that Ferdium doesn't load any service information if you have no internet connection on startup is highly related on how Ferdium works locally.

Even though you are using Ferdium locally, what you are doing in the background is simply running the ferdium-server (a minor version of it) in your system and connecting the Ferdium client to it. At startup you need internet connection to allow the server to download information from the web (on the top of my head some of them are: the list of featured services, the available services to 'install', the icons on the services, etc). If you don't have internet connection, the request from the client to the local server (that is made once at startup) fails because the server cannot retrive such informations and therefore you are not able to use the app.

I can understand that using Ferdium locally you expect to be able to change settings whilst being offline but, and taking into account the use case of Ferdium (to access web apps whilst online - 99% of the time), and that plenty other things rely on internet connection (e.g. adding recipes needs you to download information from GitHub) I dont see that there is a cost-benefit worth taking on implementing this feature. Implementing such feature would need a significant re-write of the codebase just so that a user is able to change some settings on their side.

Also, and looking at the users that have in fact connection to ferdium-server (or self hosted options), this would imply that we would necessarily need a way to handle sync with the server - something that we don't support as of now.

Nevertheless, we are always open to new contributions on any feature that can positively impact Ferdium, so you or someone are welcomed to contribute 😁

Though, I still think that this issue is important and we should at least prevent users from trying to access the app with an overlay that asks them to connect to the internet (such as several mobile apps do)

SpecialAro commented 3 months ago

I still haven't commented on the PWAs issue, but even though I think it should be implemented (and maybe if so, in the future so should this issue be addressed fully), I think that we are lacking more pressing matters unfortunately...

Adonisjs dependency isn't still updated at the client side (which is a major dependency we rely on), several users are reporting issues regarding OAuth in different services, chrome extensions are also something several people request....

Realistically speaking, unless someone is willing to step forward and contributes to PWA, I don't think it would be a priority for now, unfortunately.

But then again, I'm just one of the devs and maintainers, others might thing otherwise! 😁