Hi,

On 2014-01-31 23:59, Mikael Hermansson wrote:

now can we instead be constructive and discuss what IS correct places to store data?

Now question is does those changes follow some Linux directory standards?


Yes, the directory "standard" that is followed is the XDG Base Directory Specification:
http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

Harbour FAQ has an entry how we use this in Sailfish OS and extend it (by mandating using $APPNAME as subfolder in the XDG directories) to make sure we can have per-application data directories (we need this for various reasons down the road, one is figuring out how much data an app is storing and showing that to the user, another is clearing that data when the app is uninstalled or clearing caches when space runs low, automatic integration into the backup application, etc...):

"Where should I store application configuration, application data and cache files?"
https://harbour.jolla.com/faq#2.13.0

If you are using Qt 5, see here:
https://github.com/sailfish-sdk/xdg-helper/blob/master/README.qt5

If you are using GLib, see here:
https://github.com/sailfish-sdk/xdg-helper/blob/master/README.glib

If you are using something else (e.g. wayland-egl directly or SDL2), we have a drop-in library for you that implements Harbour-conformant directories:
https://github.com/sailfish-sdk/xdg-helper

I have an AppInfo class that I use in my apps and share in QML


Yes, you can actually just use:

for data: QStandardPaths::writableLocation(QStandardPaths::DataLocation)
for cache: QStandardPaths::writableLocation(QStandardPaths::CacheLocation)
for config: QDir(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)).filePath(QCoreApplication::applicationName())

With the new libsailfishapp, QCoreApplication::applicationName() will always contain your $APPNAME, which is nice for C++ applications, but even more important, it now also works for QML-only (i.e. "sailfish-qml" launcher-based) apps.

The meaning and difference of data, cache and config can be found in Harbour FAQ:
https://harbour.jolla.com/faq#2.13.0

I.e. the config folder is something that when erased should only remove preferences/settings (e.g. view options, sorting options, etc..), but not user data. The data folder can contain user data (erasing the data folder would remove user data). And the cache directory would store derived data that can be re-generated (e.g. from the data folder of by fetching something from the web).

For a simple game, the usage would be as follows:
 - config: Sound on/off preferences, input settings, etc...
 - data: Highscores, user progress and user-generated levels
 - cache: Image thumbnail previews of user-generated levels

If the config is cleared, the user will still keep their highscore and user-generated levels. If the cache is cleared, the user will also keep their data, but the next startup might be slower, as the application might have to re-generate thumbnail previews of user-generated levels.

And when I use SQL Db:s in QML I do:

db=LocalStorage.openDatabaseSync("harbour-uradio","1.0","StorageDatabase",100000);

Correct?


Yes, in LocalStorage, you can even have different databases with different names. Local Storage uses QQmlEngine's offlineStoragePath to figure out where to store such files:
http://qt-project.org/doc/qt-5.0/qtqml/qqmlengine.html#offlineStoragePath-prop


HTH :)
Thomas
_______________________________________________
SailfishOS.org Devel mailing list

Reply via email to