[gnome-commander] Add function for setup a GnomeCmdFile instance with a GFile object.
- From: Uwe Scholz <uwescholz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-commander] Add function for setup a GnomeCmdFile instance with a GFile object.
- Date: Thu, 6 Jan 2022 22:27:53 +0000 (UTC)
commit 0715b127b3f8239d6be5937b32e89507ca7855a3
Author: Uwe Scholz <u scholz83 gmx de>
Date: Wed Jan 5 15:24:15 2022 +0100
Add function for setup a GnomeCmdFile instance with a GFile object.
This function is then used for setting up a GnomeCmdDir object.
src/gnome-cmd-dir.cc | 38 +++++++++++++++++---------------------
src/gnome-cmd-file.cc | 34 ++++++++++++++++++++++++++++++++++
src/gnome-cmd-file.h | 2 +-
3 files changed, 52 insertions(+), 22 deletions(-)
---
diff --git a/src/gnome-cmd-dir.cc b/src/gnome-cmd-dir.cc
index efa303c4..d5fc314d 100644
--- a/src/gnome-cmd-dir.cc
+++ b/src/gnome-cmd-dir.cc
@@ -337,43 +337,39 @@ GnomeCmdDir *gnome_cmd_dir_new (GnomeCmdCon *con, GnomeCmdPath *path, gboolean i
GError *error = nullptr;
auto gFile = gnome_cmd_con_create_gfile (con, path);
- if (!gFile) return nullptr;
+ if (!gFile)
+ {
+ return nullptr;
+ }
auto uriString = g_file_get_uri (gFile);
- g_object_unref (gFile);
- GnomeCmdDir *dir = gnome_cmd_con_cache_lookup (con, uriString);
- if (dir)
+ auto gnomeCmdDir = gnome_cmd_con_cache_lookup (con, uriString);
+ if (gnomeCmdDir) // GnomeCmdDir instance is set up already
{
g_free (uriString);
- return dir;
+ g_object_unref (gFile);
+ return gnomeCmdDir;
}
- auto gFileTmp = g_file_new_for_path(path->get_path());
- auto gFileInfo = g_file_query_info(gFileTmp, "*", G_FILE_QUERY_INFO_NONE, nullptr, &error);
- g_object_unref(gFileTmp);
-
- if (error)
+ gnomeCmdDir = static_cast<GnomeCmdDir*> (g_object_new (GNOME_CMD_TYPE_DIR, nullptr));
+ if (!gnome_cmd_file_setup (G_OBJECT (gnomeCmdDir), gFile, error))
{
- if (!isStartup)
+ if (error && !isStartup)
{
gnome_cmd_show_message (*main_win, path->get_display_path(), error->message);
g_error_free(error);
}
+ g_object_unref(gFile);
g_free (uriString);
return nullptr;
}
+ gnome_cmd_dir_set_path (gnomeCmdDir, path);
+ gnomeCmdDir->priv->con = con;
+ gnomeCmdDir->priv->needs_mtime_update = FALSE;
+ gnome_cmd_con_add_to_cache (con, gnomeCmdDir, uriString);
- dir = static_cast<GnomeCmdDir*> (g_object_new (GNOME_CMD_TYPE_DIR, nullptr));
- gnome_cmd_dir_set_path (dir, path);
- gnome_cmd_file_setup (G_OBJECT (dir), gFileInfo, nullptr);
-
- dir->priv->con = con;
- dir->priv->needs_mtime_update = FALSE;
-
- gnome_cmd_con_add_to_cache (con, dir, uriString);
-
- return dir;
+ return gnomeCmdDir;
}
diff --git a/src/gnome-cmd-file.cc b/src/gnome-cmd-file.cc
index 19f9625f..d5f64f9e 100644
--- a/src/gnome-cmd-file.cc
+++ b/src/gnome-cmd-file.cc
@@ -210,6 +210,40 @@ void GnomeCmdFile::invalidate_metadata()
}
+gboolean gnome_cmd_file_setup (GObject *gObject, GFile *gFile, GError *error)
+{
+ g_return_val_if_fail (gObject != nullptr, FALSE);
+ g_return_val_if_fail (GNOME_CMD_IS_FILE(gObject), FALSE);
+ g_return_val_if_fail (gFile != nullptr, FALSE);
+
+ GError *errorTmp = nullptr;
+ auto gnomeCmdFile = (GnomeCmdFile*) gObject;
+
+ gnomeCmdFile->gFileInfo = g_file_query_info(gFile, "*", G_FILE_QUERY_INFO_NONE, nullptr, &errorTmp);
+ if (errorTmp)
+ {
+ g_propagate_error(&error, errorTmp);
+ return FALSE;
+ }
+
+ auto filename = g_file_info_get_attribute_string (gnomeCmdFile->gFileInfo,
G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME);
+
+ // check if file is '..'
+ gnomeCmdFile->is_dotdot = g_file_info_get_attribute_uint32 (gnomeCmdFile->gFileInfo,
G_FILE_ATTRIBUTE_STANDARD_TYPE) == G_FILE_TYPE_DIRECTORY
+ && g_strcmp0(filename, "..") == 0;
+
+ auto utf8Name = gnome_cmd_data.options.case_sens_sort
+ ? g_strdup(filename)
+ : g_utf8_casefold (filename, -1);
+ gnomeCmdFile->collate_key = g_utf8_collate_key_for_filename (utf8Name, -1);
+ g_free (utf8Name);
+
+ GNOME_CMD_FILE_BASE (gnomeCmdFile)->gFile = gFile;
+ gnomeCmdFile->gFile = GNOME_CMD_FILE_BASE (gnomeCmdFile)->gFile;
+ return TRUE;
+}
+
+
void gnome_cmd_file_setup (GObject *gObject, GFileInfo *gFileInfo, GnomeCmdDir *parentDir)
{
g_return_if_fail (gObject != nullptr);
diff --git a/src/gnome-cmd-file.h b/src/gnome-cmd-file.h
index 627031a4..a349890d 100644
--- a/src/gnome-cmd-file.h
+++ b/src/gnome-cmd-file.h
@@ -131,7 +131,7 @@ GnomeCmdFile *gnome_cmd_file_new_from_gfile (GFile *gFile);
GnomeCmdFile *gnome_cmd_file_new (const gchar *local_full_path);
GnomeCmdFile *gnome_cmd_file_new (GFileInfo *gFileInfo, GnomeCmdDir *dir);
void gnome_cmd_file_setup (GObject *gObject, GFileInfo *gFileInfo, GnomeCmdDir *dir);
-
+gboolean gnome_cmd_file_setup (GObject *gObject, GFile *gFile, GError *error);
inline GnomeCmdFile *gnome_cmd_file_ref (GnomeCmdFile *f)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]