## FmFileInfo FmFileInfo — File information cache for libfm. |

## Synopsis

    #define             FM_FILE_INFO                        (ptr)
                        FmFileInfo;
    gboolean            fm_file_info_can_set_hidden         (FmFileInfo *fi);
    gboolean            fm_file_info_can_set_icon           (FmFileInfo *fi);
    gboolean            fm_file_info_can_set_name           (FmFileInfo *fi);
    gboolean            fm_file_info_can_thumbnail          (FmFileInfo *fi);
    time_t              fm_file_info_get_atime              (FmFileInfo *fi);
    goffset             fm_file_info_get_blocks             (FmFileInfo *fi);
    const char *        fm_file_info_get_collate_key        (FmFileInfo *fi);
    const char *        fm_file_info_get_collate_key_nocasefold
                                                            (FmFileInfo *fi);
    time_t              fm_file_info_get_ctime              (FmFileInfo *fi);
    const char *        fm_file_info_get_desc               (FmFileInfo *fi);
    dev_t               fm_file_info_get_dev                (FmFileInfo *fi);
    const char *        fm_file_info_get_disp_group         (FmFileInfo *fi);
    const char *        fm_file_info_get_disp_mtime         (FmFileInfo *fi);
    const char *        fm_file_info_get_disp_name          (FmFileInfo *fi);
    const char *        fm_file_info_get_disp_owner         (FmFileInfo *fi);
    const char *        fm_file_info_get_disp_size          (FmFileInfo *fi);
    const char *        fm_file_info_get_fs_id              (FmFileInfo *fi);
    gid_t               fm_file_info_get_gid                (FmFileInfo *fi);
    FmIcon *            fm_file_info_get_icon               (FmFileInfo *fi);
    FmMimeType *        fm_file_info_get_mime_type          (FmFileInfo *fi);
    mode_t              fm_file_info_get_mode               (FmFileInfo *fi);
    time_t              fm_file_info_get_mtime              (FmFileInfo *fi);
    const char *        fm_file_info_get_name               (FmFileInfo *fi);
    FmPath *            fm_file_info_get_path               (FmFileInfo *fi);
    goffset             fm_file_info_get_size               (FmFileInfo *fi);
    const char *        fm_file_info_get_target             (FmFileInfo *fi);
    uid_t               fm_file_info_get_uid                (FmFileInfo *fi);
    gboolean            fm_file_info_is_accessible          (FmFileInfo *fi);
    gboolean            fm_file_info_is_backup              (FmFileInfo *fi);
    gboolean            fm_file_info_is_desktop_entry       (FmFileInfo *fi);
    gboolean            fm_file_info_is_dir                 (FmFileInfo *fi);
    gboolean            fm_file_info_is_executable_type     (FmFileInfo *fi);
    gboolean            fm_file_info_is_hidden              (FmFileInfo *fi);
    gboolean            fm_file_info_is_image               (FmFileInfo *fi);
    gboolean            fm_file_info_is_mountable           (FmFileInfo *fi);
    gboolean            fm_file_info_is_native              (FmFileInfo *fi);
    gboolean            fm_file_info_is_shortcut            (FmFileInfo *fi);
    gboolean            fm_file_info_is_symlink             (FmFileInfo *fi);
    gboolean            fm_file_info_is_text                (FmFileInfo *fi);
    gboolean            fm_file_info_is_unknown_type        (FmFileInfo *fi);
    gboolean            fm_file_info_is_writable_directory  (FmFileInfo *fi);
    gboolean            fm_file_info_list_is_same_fs        (FmFileInfoList *list);
    gboolean            fm_file_info_list_is_same_type      (FmFileInfoList *list);
    FmFileInfoList *    fm_file_info_list_new               ();
    FmFileInfo *        fm_file_info_new                    ();
    FmFileInfo *        fm_file_info_new_from_g_file_data   (GFile *gf,
                                                             GFileInfo *inf,
                                                             FmPath *path);
    FmFileInfo *        fm_file_info_new_from_gfileinfo     (FmPath *path,
                                                             GFileInfo *inf);
    FmFileInfo *        fm_file_info_new_from_menu_cache_item
                                                            (FmPath *path,
                                                             struct _MenuCacheItem *item);
    FmFileInfo *        fm_file_info_new_from_native_file   (FmPath *path,
                                                             const char *path_str,
                                                             GError **err);
    FmFileInfo *        fm_file_info_ref                    (FmFileInfo *fi);
    void                fm_file_info_set_disp_name          (FmFileInfo *fi,
                                                             const char *name);
    void                fm_file_info_set_from_g_file_data   (FmFileInfo *fi,
                                                             GFile *gf,
                                                             GFileInfo *inf);
    void                fm_file_info_set_from_gfileinfo     (FmFileInfo *fi,
                                                             GFileInfo *inf);
    void                fm_file_info_set_from_menu_cache_item
                                                            (FmFileInfo *fi,
                                                             struct _MenuCacheItem *item);
    gboolean            fm_file_info_set_from_native_file   (FmFileInfo *fi,
                                                             const char *path,
                                                             GError **err);
    void                fm_file_info_set_icon               (FmFileInfo *fi,
                                                             GIcon *icon);
    void                fm_file_info_set_path               (FmFileInfo *fi,
                                                             FmPath *path);
    void                fm_file_info_unref                  (FmFileInfo *fi);
    void                fm_file_info_update                 (FmFileInfo *fi,
                                                             FmFileInfo *src);

## Description

`include`: libfm/fm.h

## Details

### FM_FILE_INFO()

    #define FM_FILE_INFO(ptr)    ((FmFileInfo*)ptr)

### FmFileInfo

    typedef struct _FmFileInfo FmFileInfo;

### fm_file_info_can_set_hidden ()

    gboolean            fm_file_info_can_set_hidden         (FmFileInfo *fi);

Checks if file system supports "hidden" attribute change for `fi`. Returned value `TRUE` is just a potential possibility, the attribute still may be unable to change due to access reasons for example.

`fi` : | a FmFileInfo to inspect
Returns : | `TRUE` if change is supported for `fi`.

Since 1.2.0

### fm_file_info_can_set_icon ()

    gboolean            fm_file_info_can_set_icon           (FmFileInfo *fi);

Checks if file system supports icon change for `fi`. Returned value `TRUE` is just a potential possibility, icon still may be unable to change due to access reasons for example.

`fi` : | a FmFileInfo to inspect
Returns : | `TRUE` if change is supported for `fi`.

Since 1.2.0

### fm_file_info_can_set_name ()

    gboolean            fm_file_info_can_set_name           (FmFileInfo *fi);

Checks if file system supports name change for `fi`. Returned value `TRUE` is just a potential possibility, name still may be unable to change due to access reasons for example.

`fi` : | a FmFileInfo to inspect
Returns : | `TRUE` if change is supported for `fi`.

Since 1.2.0

### fm_file_info_can_thumbnail ()

    gboolean            fm_file_info_can_thumbnail          (FmFileInfo *fi);

### fm_file_info_get_atime ()

    time_t              fm_file_info_get_atime              (FmFileInfo *fi);

`fi` : | A FmFileInfo struct
Returns : | file access time.

### fm_file_info_get_blocks ()

    goffset             fm_file_info_get_blocks             (FmFileInfo *fi);

`fi` : | A FmFileInfo struct
Returns : | how many filesystem blocks used by the file.

### fm_file_info_get_collate_key ()

    const char *        fm_file_info_get_collate_key        (FmFileInfo *fi);

Get the collate key used for locale-dependent filename sorting. The keys of different files can be compared with `strcmp()` directly.

This API is not thread-safe and should be used only in default context.

`fi` : | A FmFileInfo struct
Returns : | a const string owned by FmFileInfo which should not be freed.

### fm_file_info_get_collate_key_nocasefold ()

    const char *        fm_file_info_get_collate_key_nocasefold
                                                            (FmFileInfo *fi);

Get the collate key used for locale-dependent filename sorting but in case-sensitive manner. The keys of different files can be compared with `strcmp()` directly. Returned data are owned by FmFileInfo and should be not freed by caller.

This API is not thread-safe and should be used only in default context.

See also: `fm_file_info_get_collate_key()`.

`fi` : | a FmFileInfo struct
Returns : | collate string.

Since 1.0.2

### fm_file_info_get_ctime ()

    time_t              fm_file_info_get_ctime              (FmFileInfo *fi);

Retrieves time when access right were changed last time for file `fi`.

`fi` : | a file info to inspect
Returns : | file access change time.

Since 1.2.0

### fm_file_info_get_desc ()

    const char *        fm_file_info_get_desc               (FmFileInfo *fi);

Get a human-readable description for the file.

This API is not thread-safe and should be used only in default context.

`fi` : | A FmFileInfo struct
Returns : | a const string owned by FmFileInfo which should not be freed.

### fm_file_info_get_dev ()

    dev_t               fm_file_info_get_dev                (FmFileInfo *fi);

Get the filesystem device id (POSIX dev_t) This is only applicable when the file is native. e.g. `fm_file_info_is_native()` returns TRUE.

`fi` : | A FmFileInfo struct
Returns : | device id (POSIX dev_t, st_dev member of struct stat).

### fm_file_info_get_disp_group ()

    const char *        fm_file_info_get_disp_group         (FmFileInfo *fi);

Retrieves human-readable string value for group of `fi`. Returned value is either group name or numeric string if grop has no entry in the /etc/group file. Returned value is owned by `fi` and should be not altered by caller.

`fi` : | file info to inspect
Returns : | string value for file group. [transfer none]

Since 1.2.0

### fm_file_info_get_disp_mtime ()

    const char *        fm_file_info_get_disp_mtime         (FmFileInfo *fi);

Get a human-readable string for showing file modification time in the UI.

This API is not thread-safe and should be used only in default context.

`fi` : | A FmFileInfo struct
Returns : | a const string owned by FmFileInfo which should not be freed.

### fm_file_info_get_disp_name ()

    const char *        fm_file_info_get_disp_name          (FmFileInfo *fi);

Get the display name used to show the file in the file manager UI. The display name is guaranteed to be UTF-8 and may be different from the real file name on the filesystem.

This API is not thread-safe and should be used only in default context.

`fi` : | A FmFileInfo struct
Returns : | a const strin owned by FmFileInfo which should not be freed.

### fm_file_info_get_disp_owner ()

    const char *        fm_file_info_get_disp_owner         (FmFileInfo *fi);

Retrieves human-readable string value for owner of `fi`. Returned value is either owner login name or numeric string if owner has no entry in /etc/passwd file. Returned value is owned by `fi` and should be not altered by caller.

`fi` : | file info to inspect
Returns : | string value for owner. [transfer none]

Since 1.2.0

### fm_file_info_get_disp_size ()

    const char *        fm_file_info_get_disp_size          (FmFileInfo *fi);

Get the size of the file as a human-readable string. It's convinient for show the file size to the user.

This API is not thread-safe and should be used only in default context.

`fi` : | A FmFileInfo struct
Returns : | a const string owned by FmFileInfo which should not be freed. (non-NULL)

### fm_file_info_get_fs_id ()

    const char *        fm_file_info_get_fs_id              (FmFileInfo *fi);

Get the filesystem id string This is only applicable when the file is on a remote filesystem. e.g. `fm_file_info_is_native()` returns FALSE.

This API is not thread-safe and should be used only in default context.

`fi` : | A FmFileInfo struct
Returns : | a const string owned by FmFileInfo which should not be freed.

### fm_file_info_get_gid ()

    gid_t               fm_file_info_get_gid                (FmFileInfo *fi);

`fi` : | A FmFileInfo struct
Returns : | group id (gid) of the file owner.

### fm_file_info_get_icon ()

    FmIcon *            fm_file_info_get_icon               (FmFileInfo *fi);

Get the icon used to show the file in the file manager.

This API is not thread-safe and should be used only in default context.

`fi` : | A FmFileInfo struct
Returns : | a FmIcon struct. The returned FmIcon struct is owned by FmFileInfo and should not be freed. If you need to keep it, use `g_object_ref()` to obtain a reference.

### fm_file_info_get_mime_type ()

    FmMimeType *        fm_file_info_get_mime_type          (FmFileInfo *fi);

Get the mime-type of the file.

This API is not thread-safe and should be used only in default context.

`fi` : | A FmFileInfo struct
Returns : | a FmMimeType struct owned by FmFileInfo which should not be freed. If you need to keep it, use `fm_mime_type_ref()` to obtain a reference.

### fm_file_info_get_mode ()

    mode_t              fm_file_info_get_mode               (FmFileInfo *fi);

Get the mode of the file. For detail about the meaning of mode, see manpage of `stat()` and the st_mode struct field.

`fi` : | A FmFileInfo struct
Returns : | mode_t value of the file as defined in POSIX struct stat.

### fm_file_info_get_mtime ()

    time_t              fm_file_info_get_mtime              (FmFileInfo *fi);

`fi` : | A FmFileInfo struct
Returns : | file modification time.

### fm_file_info_get_name ()

    const char *        fm_file_info_get_name               (FmFileInfo *fi);

Get the base name of the file in filesystem encoding.

`fi` : | A FmFileInfo struct
Returns : | a const string owned by FmFileInfo which should not be freed.

### fm_file_info_get_path ()

    FmPath *            fm_file_info_get_path               (FmFileInfo *fi);

Get the path of the file

`fi` : | A FmFileInfo struct
Returns : | a FmPath struct. The returned FmPath struct is owned by FmFileInfo and should not be freed. If you need to keep it, use `fm_path_ref()` to obtain a reference.

### fm_file_info_get_size ()

    goffset             fm_file_info_get_size               (FmFileInfo *fi);

`fi` : | A FmFileInfo struct
Returns : | the size of the file in bytes.

### fm_file_info_get_target ()

    const char *        fm_file_info_get_target             (FmFileInfo *fi);

Get the target of a symlink or a shortcut.

This API is not thread-safe and should be used only in default context.

`fi` : | A FmFileInfo struct
Returns : | a const string owned by FmFileInfo which should not be freed. NULL if the file is not a symlink or shortcut.

### fm_file_info_get_uid ()

    uid_t               fm_file_info_get_uid                (FmFileInfo *fi);

`fi` : | A FmFileInfo struct
Returns : | user id (uid) of the file owner.

### fm_file_info_is_accessible ()

    gboolean            fm_file_info_is_accessible          (FmFileInfo *fi);

Checks if the user has read access to file or directory `fi`.

`fi` : | a file info descriptor
Returns : | `TRUE` if `fi` is accessible for user.

Since 1.0.1

### fm_file_info_is_backup ()

    gboolean            fm_file_info_is_backup              (FmFileInfo *fi);

Checks if file is backup. Native files are considered backup if they have ~ suffix.

`fi` : | A FmFileInfo struct
Returns : | `TRUE` if the file is a backup file.

Since 1.2.0

### fm_file_info_is_desktop_entry ()

    gboolean            fm_file_info_is_desktop_entry       (FmFileInfo *fi);

### fm_file_info_is_dir ()

    gboolean            fm_file_info_is_dir                 (FmFileInfo *fi);

### fm_file_info_is_executable_type ()

    gboolean            fm_file_info_is_executable_type     (FmFileInfo *fi);

### fm_file_info_is_hidden ()

    gboolean            fm_file_info_is_hidden              (FmFileInfo *fi);

### fm_file_info_is_image ()

    gboolean            fm_file_info_is_image               (FmFileInfo *fi);

### fm_file_info_is_mountable ()

    gboolean            fm_file_info_is_mountable           (FmFileInfo *fi);

Checks if `fi` is "inode/mount-point" type.

`fi` : | file info to inspect
Returns : | `TRUE` if `fi` is mountable type.

### fm_file_info_is_native ()

    gboolean            fm_file_info_is_native              (FmFileInfo *fi);

### fm_file_info_is_shortcut ()

    gboolean            fm_file_info_is_shortcut            (FmFileInfo *fi);

### fm_file_info_is_symlink ()

    gboolean            fm_file_info_is_symlink             (FmFileInfo *fi);

### fm_file_info_is_text ()

    gboolean            fm_file_info_is_text                (FmFileInfo *fi);

### fm_file_info_is_unknown_type ()

    gboolean            fm_file_info_is_unknown_type        (FmFileInfo *fi);

### fm_file_info_is_writable_directory ()

    gboolean            fm_file_info_is_writable_directory  (FmFileInfo *fi);

Checks if directory `fi` lies on writable file system. Returned value `TRUE` is just a potential possibility, it may still not allow write due to access reasons for example.

`fi` : | a FmFileInfo to inspect
Returns : | `TRUE` if `fi` may be writable.

Since 1.2.0

### fm_file_info_list_is_same_fs ()

    gboolean            fm_file_info_list_is_same_fs        (FmFileInfoList *list);

Checks if all files in the list are on the same file system.

`list` : | a FmFileInfoList
Returns : | `TRUE` if all files in the list are on the same fs.

### fm_file_info_list_is_same_type ()

    gboolean            fm_file_info_list_is_same_type      (FmFileInfoList *list);

Checks if all files in the list are of the same type.

`list` : | a FmFileInfoList
Returns : | `TRUE` if all files in the list are of the same type

### fm_file_info_list_new ()

    FmFileInfoList *    fm_file_info_list_new               ();

Creates a new FmFileInfoList.

Returns : | new FmFileInfoList object.

### fm_file_info_new ()

    FmFileInfo *        fm_file_info_new                    ();

Returns : | a new FmFileInfo struct which needs to be freed with `fm_file_info_unref()` when it's no more needed.

### fm_file_info_new_from_g_file_data ()

    FmFileInfo *        fm_file_info_new_from_g_file_data   (GFile *gf,
                                                             GFileInfo *inf,
                                                             FmPath *path);

Creates a new FmFileInfo for file pointed by `path` and `gf` based on information stored in the `inf`. Returned data should be freed with `fm_file_info_unref()` when no longer needed.

`gf` : | a GFile of a file
`inf` : | a GFileInfo object
`path` : | a FmPath of a file. [allow-none]
Returns : | a new FmFileInfo struct. [transfer full]

Since 1.2.0

### fm_file_info_new_from_gfileinfo ()

    FmFileInfo *        fm_file_info_new_from_gfileinfo     (FmPath *path,
                                                             GFileInfo *inf);

### Warning

`fm_file_info_new_from_gfileinfo` has been deprecated since version 1.2.0 and should not be used in newly-written code. Use `fm_file_info_new_from_g_file_data()` instead.

Create a new FmFileInfo for file pointed by `path` based on information stored in the GFileInfo object.

`path` : | FmPath of a file
`inf` : | a GFileInfo object
Returns : | A new FmFileInfo struct which should be freed with `fm_file_info_unref()` when no longer needed.

### fm_file_info_new_from_menu_cache_item ()

    FmFileInfo *        fm_file_info_new_from_menu_cache_item
                                                            (FmPath *path,
                                                             struct _MenuCacheItem *item);

Creates a new FmFileInfo for a file by `path` and fills it with info from a menu cache `item`. Returned data should be freed with `fm_file_info_unref()` when no longer needed.

`path` : | a file path
`item` : | a menu cache item
Returns : | a new FmFileInfo struct. [transfer full]

Since 0.1.1

### fm_file_info_new_from_native_file ()

    FmFileInfo *        fm_file_info_new_from_native_file   (FmPath *path,
                                                             const char *path_str,
                                                             GError **err);

Create a new FmFileInfo for file pointed by `path`. Returned data should be freed with `fm_file_info_unref()` after usage.

`path` : | path descriptor. [allow-none]
`path_str` : | full path to the file
`err` : | pointer to receive error. [allow-none][out]
Returns : | new file info or `NULL` in case of error. [transfer full]

Since 1.2.0

### fm_file_info_ref ()

    FmFileInfo *        fm_file_info_ref                    (FmFileInfo *fi);

Increase reference count of the FmFileInfo struct.

`fi` : | A FmFileInfo struct
Returns : | the FmFileInfo struct itself

### fm_file_info_set_disp_name ()

    void                fm_file_info_set_disp_name          (FmFileInfo *fi,
                                                             const char *name);

Set the display name used to show the file in the file manager UI. If NULL is passed for `name`, the original display will be freed and the real base name will be used for display.

`fi` : | A FmFileInfo struct
`name` : | A UTF-8 display name. (can be NULL).

### fm_file_info_set_from_g_file_data ()

    void                fm_file_info_set_from_g_file_data   (FmFileInfo *fi,
                                                             GFile *gf,
                                                             GFileInfo *inf);

Get file info from the GFile and GFileInfo objects and sets data in the FmFileInfo struct appropriately.

`fi` : | a FmFileInfo struct to update
`gf` : | a GFile object to inspect. [allow-none]
`inf` : | a GFileInfo object to inspect

Since 1.2.0

### fm_file_info_set_from_gfileinfo ()

    void                fm_file_info_set_from_gfileinfo     (FmFileInfo *fi,
                                                             GFileInfo *inf);

### Warning

`fm_file_info_set_from_gfileinfo` has been deprecated since version 1.2.0 and should not be used in newly-written code. Use `fm_file_info_set_from_g_file_data()` instead.

Get file info from the GFileInfo object and store it in the FmFileInfo struct.

`fi` : | A FmFileInfo struct
`inf` : | a GFileInfo object

### fm_file_info_set_from_menu_cache_item ()

    void                fm_file_info_set_from_menu_cache_item
                                                            (FmFileInfo *fi,
                                                             struct _MenuCacheItem *item);

### Warning

`fm_file_info_set_from_menu_cache_item` has been deprecated since version 1.2.0 and should not be used in newly-written code.

`fi` : | a file info to update
`item` : | a menu cache item

### fm_file_info_set_from_native_file ()

    gboolean            fm_file_info_set_from_native_file   (FmFileInfo *fi,
                                                             const char *path,
                                                             GError **err);

Get file info of the specified native file and store it in the FmFileInfo struct.

Prior to calling this function, the FmPath of FmFileInfo should have been set with `fm_file_info_set_path()`.

Note that this call does I/O and therefore can block.

`fi` : | A FmFileInfo struct
`path` : | full path of the file
`err` : | a GError** to retrive errors
Returns : | TRUE if no error happens.

### fm_file_info_set_icon ()

    void                fm_file_info_set_icon               (FmFileInfo *fi,
                                                             GIcon *icon);

Updates the icon used to show the file in the file manager UI.

`fi` : | a FmFileInfo
`icon` : | an icon to update

Since 1.2.0

### fm_file_info_set_path ()

    void                fm_file_info_set_path               (FmFileInfo *fi,
                                                             FmPath *path);

This API is not thread-safe and should be used only in default context.

Change the path of the FmFileInfo.

`fi` : | A FmFileInfo struct
`path` : | a FmPath struct

### fm_file_info_unref ()

    void                fm_file_info_unref                  (FmFileInfo *fi);

Decrease reference count of the FmFileInfo struct. When the last reference to the struct is released, the FmFileInfo struct is freed.

`fi` : | A FmFileInfo struct

### fm_file_info_update ()

    void                fm_file_info_update                 (FmFileInfo *fi,
                                                             FmFileInfo *src);

This API is not thread-safe and should be used only in default context.

Update the content of `fi` by copying file info stored in `src` to `fi`.

`fi` : | A FmFileInfo struct
`src` : | another FmFileInfo struct