[SailfishDevel] Update 1.0.3.8 changes LocalStorage location?
Thomas Perl
th.perl at gmail.com
Sat Feb 1 15:00:32 UTC 2014
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
More information about the Devel
mailing list