This is a low-level module, it is meant to be wrapped by higher level services.
For more information, refer to the documentation of the libxdg-basedir
project or the official specification at:
http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
core :: union_find
union–find algorithm using an efficient disjoint-set data structure
# Services for using the XDG Base Directory specification
#
# This is a low-level module, it is meant to be wrapped by higher level services.
#
# For more information, refer to the documentation of the `libxdg-basedir`
# project or the official specification at:
# http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
module xdg_basedir is pkgconfig("libxdg-basedir")
in "C Header" `{
#include <basedir.h>
`}
# Handle to a local cache of XDG base directories
extern class XdgBasedir `{ xdgHandle* `}
# Initialize a handle to an XDG data cache and initialize the cache.
new `{ return xdgInitHandle(NULL); `}
# Has this instance been correctly initialized?
fun is_valid: Bool do return not address_is_null
# Wipe handle of XDG data cache.
fun destroy `{ xdgWipeHandle(self); `}
# Update the data cache.
#
# This should not be done frequently as it reallocates the cache.
# Even if updating the cache fails the handle remains valid and can
# be used to access XDG data as it was before `update` was called.
#
# Returns `true` if the update was successful.
fun update: Bool `{ return xdgUpdateData(self); `}
# Base directory for user specific data files.
fun data_home: String import CString.to_s `{
return CString_to_s((char*)xdgDataHome(self));
`}
# Base directory for user specific configuration files.
fun config_home: String import CString.to_s `{
return CString_to_s((char*)xdgConfigHome(self));
`}
# Base directory for user specific non-essential data files.
fun cache_home: String import CString.to_s `{
return CString_to_s((char*)xdgCacheHome(self));
`}
# Preference-ordered set of base directories to search for data files
# in addition to the $XDG_DATA_HOME base directory.
fun data_dirs: Array[String] do return native_data_dirs.to_string_array
private fun native_data_dirs: ConstPointer `{
return xdgDataDirectories(self);
`}
# Preference-ordered set of base directories to search for data files
# with $XDG_DATA_HOME prepended.
#
# The base directory defined by $XDG_DATA_HOME is considered more
# important than any of the base directories defined by $XDG_DATA_DIRS.
fun searchable_data_dirs: Array[String]
do
return native_searchable_data_dirs.to_string_array
end
private fun native_searchable_data_dirs: ConstPointer `{
return xdgSearchableDataDirectories(self);
`}
# Preference-ordered set of base directories to search for configuration
# files in addition to the $XDG_CONFIG_HOME base directory.
fun config_dirs: Array[String] do return native_config_dirs.to_string_array
private fun native_config_dirs: ConstPointer `{
return xdgConfigDirectories(self);
`}
# Preference-ordered set of base directories to search for configuration
# files with $XDG_CONFIG_HOME prepended.
#
# The base directory defined by $XDG_CONFIG_HOME is considered more
# important than any of the base directories defined by $XDG_CONFIG_DIRS.
fun searchable_config_dirs: Array[String]
do
return native_searchable_config_dirs.to_string_array
end
private fun native_searchable_config_dirs: ConstPointer `{
return xdgSearchableConfigDirectories(self);
`}
end
private extern class ConstPointer `{ const void * `}
# Convert a C `char **` to a Nit `Array[String]`
fun to_string_array: Array[String]
import Array[String], Array[String].add, CString.to_s `{
char **strings = (char**)self;
Array_of_String aos = new_Array_of_String();
int p = 0;
while (strings[p] != NULL) {
Array_of_String_add(aos, CString_to_s((char*)strings[p]));
p ++;
}
return aos;
`}
end
# Version of XDG Base Directory specification implemented in this library.
fun xdg_basedir_spec: Float `{ return XDG_BASEDIR_SPEC; `}
# Get an instance of XdgBasedir
fun xdg_basedir: XdgBasedir do return once new XdgBasedir
lib/xdg_basedir/xdg_basedir.nit:17,1--132,57