Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

XDG - make remmina user data dir global #738

Merged
merged 4 commits into from
Jan 25, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion remmina-plugins/tool_hello_world/plugin.c
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,6 @@ static RemminaProtocolPlugin remmina_plugin = {
NULL, // Send a keystroke */
};


G_MODULE_EXPORT gboolean remmina_plugin_entry(RemminaPluginService *service)
{
TRACE_CALL("remmina_plugin_entry");
Expand Down
2 changes: 2 additions & 0 deletions remmina/include/remmina/plugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,8 @@ typedef struct _RemminaPluginService
void (* protocol_plugin_chat_receive) (RemminaProtocolWidget *gp, const gchar *text);
void (* protocol_plugin_send_keys_signals) (GtkWidget *widget, const guint *keyvals, int length, GdkEventType action);

gchar* (* file_get_user_datadir) (void);

RemminaFile* (* file_new) (void);
const gchar* (* file_get_path) (RemminaFile *remminafile);
void (* file_set_string) (RemminaFile *remminafile, const gchar *setting, const gchar *value);
Expand Down
17 changes: 6 additions & 11 deletions remmina/src/remmina_applet_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,16 @@
*
*/

#include "config.h"

#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <string.h>
#include "config.h"

#include "remmina_public.h"
#include "remmina_applet_menu_item.h"
#include "remmina_applet_menu.h"
#include "remmina_file_manager.h"
#include "remmina/remmina_trace_calls.h"

G_DEFINE_TYPE( RemminaAppletMenu, remmina_applet_menu, GTK_TYPE_MENU)
Expand Down Expand Up @@ -266,27 +269,19 @@ void remmina_applet_menu_populate(RemminaAppletMenu *menu)
{
TRACE_CALL("remmina_applet_menu_populate");
GtkWidget *menuitem;
gchar dirname[MAX_PATH_LEN];
gchar filename[MAX_PATH_LEN];
GDir *old;
GDir *dir;
const gchar *name;

/* If the old .remmina exists, use it. */
g_snprintf(dirname, sizeof(dirname), "%s/.%s", g_get_home_dir(), remmina);
old = g_dir_open(dirname, 0, NULL);
if (old == NULL)
/* If the XDG directories exist, use them. */
g_snprintf(dirname, sizeof(dirname), "%s/%s", g_get_user_data_dir(), remmina);
dir = g_dir_open(dirname, 0, NULL);
dir = g_dir_open(remmina_file_get_user_datadir(), 0, NULL);
if (dir != NULL)
{
/* Iterate all remote desktop profiles */
while ((name = g_dir_read_name(dir)) != NULL)
{
if (!g_str_has_suffix(name, ".remmina"))
continue;
g_snprintf(filename, sizeof(filename), "%s/%s", dirname, name);
g_snprintf(filename, sizeof(filename), "%s/%s", remmina_file_get_user_datadir(), name);

menuitem = remmina_applet_menu_item_new(REMMINA_APPLET_MENU_ITEM_FILE, filename);
if (menuitem != NULL)
Expand Down
23 changes: 7 additions & 16 deletions remmina/src/remmina_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,18 @@
*
*/

#include "config.h"

#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
#include <stdlib.h>
#include "config.h"

#include "remmina_public.h"
#include "remmina_pref.h"
#include "remmina_crypt.h"
#include "remmina_file_manager.h"
#include "remmina_plugin_manager.h"
#include "remmina_file.h"
#include "remmina_pref.h"
#include "remmina_masterthread_exec.h"
#include "remmina/remmina_trace_calls.h"

Expand Down Expand Up @@ -79,7 +81,6 @@ const RemminaSetting remmina_system_settings[] =
{ NULL, 0, FALSE }
};


static RemminaSettingGroup remmina_setting_get_group(const gchar *setting, gboolean *encrypted)
{
TRACE_CALL("remmina_setting_get_group");
Expand Down Expand Up @@ -136,24 +137,14 @@ void remmina_file_generate_filename(RemminaFile *remminafile)
{
TRACE_CALL("remmina_file_generate_filename");
GTimeVal gtime;
gchar dirname[MAX_PATH_LEN];
GDir *old;
GDir *dir;

g_free(remminafile->filename);
g_get_current_time(&gtime);

/* If the old .remmina exists, use it. */
g_snprintf(dirname, sizeof(dirname), "%s/.%s", g_get_home_dir(), remmina);
old = g_dir_open(dirname, 0, NULL);
if (old == NULL)
g_snprintf(dirname, sizeof(dirname), "%s/%s", g_get_user_data_dir(), remmina);
g_dir_close(old);

/* If the XDG directories exist, use them. */
dir = g_dir_open(dirname, 0, NULL);
dir = g_dir_open(remmina_file_get_user_datadir(), 0, NULL);
if (dir != NULL)
remminafile->filename = g_strdup_printf("%s/%li%03li.remmina", dirname, gtime.tv_sec,
remminafile->filename = g_strdup_printf("%s/%li%03li.remmina", remmina_file_get_user_datadir(), gtime.tv_sec,
gtime.tv_usec / 1000);
else
remminafile->filename = NULL;
Expand Down
70 changes: 23 additions & 47 deletions remmina/src/remmina_file_manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,62 +33,60 @@
*
*/

#include "config.h"

#include <gtk/gtk.h>
#include <string.h>
#include "config.h"

#include "remmina_public.h"
#include "remmina_string_array.h"
#include "remmina_plugin_manager.h"
#include "remmina_file_manager.h"
#include "remmina/remmina_trace_calls.h"

void remmina_file_manager_init(void)

gchar* remmina_file_get_user_datadir(void)
{
TRACE_CALL("remmina_file_manager_init");
gchar dirname[MAX_PATH_LEN];
gchar remminadir[MAX_PATH_LEN];
TRACE_CALL("remmina_file_get_user_datadir");
GDir *old;

/* If the old .remmina exists, use it. */
g_snprintf(dirname, sizeof(dirname), "%s/.%s", g_get_home_dir(), remmina);
old = g_dir_open(dirname, 0, NULL);
g_snprintf(remminadir, sizeof(remminadir), "%s/.%s", g_get_home_dir(), remmina);
old = g_dir_open(remminadir, 0, NULL);
if (old == NULL)
/* If the XDG directories exist, use them. */
g_snprintf(dirname, sizeof(dirname), "%s/%s", g_get_user_data_dir(), remmina);
g_snprintf(remminadir, sizeof(remminadir), "%s/%s", g_get_user_data_dir(), remmina);
else
g_dir_close(old);
return g_strdup(remminadir);
}

g_mkdir_with_parents(dirname, 0700);
void remmina_file_manager_init(void)
{
TRACE_CALL("remmina_file_manager_init");
g_mkdir_with_parents(remmina_file_get_user_datadir(), 0700);
}

gint remmina_file_manager_iterate(GFunc func, gpointer user_data)
{
TRACE_CALL("remmina_file_manager_iterate");
gchar dirname[MAX_PATH_LEN];
gchar filename[MAX_PATH_LEN];
GDir *old;
GDir* dir;
const gchar* name;
RemminaFile* remminafile;
gint items_count = 0;

/* If the old .remmina exists, use it. */
g_snprintf(dirname, sizeof(dirname), "%s/.%s", g_get_home_dir(), remmina);
old = g_dir_open(dirname, 0, NULL);
if (old == NULL)
{
/* If the XDG directories exist, use them. */
g_snprintf(dirname, sizeof(dirname), "%s/%s", g_get_user_data_dir(), remmina);
dir = g_dir_open(dirname, 0, NULL);
} else
dir = old;
dir = g_dir_open(remmina_file_get_user_datadir(), 0, NULL);

if (dir)
{
while ((name = g_dir_read_name(dir)) != NULL)
{
if (!g_str_has_suffix(name, ".remmina"))
continue;
g_snprintf(filename, MAX_PATH_LEN, "%s/%s", dirname, name);
g_snprintf(filename, MAX_PATH_LEN, "%s/%s",
remmina_file_get_user_datadir(), name);
remminafile = remmina_file_load(filename);
if (remminafile)
{
Expand All @@ -105,10 +103,8 @@ gint remmina_file_manager_iterate(GFunc func, gpointer user_data)
gchar* remmina_file_manager_get_groups(void)
{
TRACE_CALL("remmina_file_manager_get_groups");
gchar dirname[MAX_PATH_LEN];
gchar filename[MAX_PATH_LEN];
GDir* dir;
GDir* old;
const gchar* name;
RemminaFile* remminafile;
RemminaStringArray* array;
Expand All @@ -117,24 +113,15 @@ gchar* remmina_file_manager_get_groups(void)

array = remmina_string_array_new();

/* If the old .remmina exists, use it. */
g_snprintf(dirname, sizeof(dirname), "%s/.%s", g_get_home_dir(), remmina);
old = g_dir_open(dirname, 0, NULL);
if (old == NULL)
{
/* If the XDG directories exist, use them. */
g_snprintf(dirname, sizeof(dirname), "%s/%s", g_get_user_data_dir(), remmina);
dir = g_dir_open(dirname, 0, NULL);
} else
dir = old;
dir = g_dir_open(remmina_file_get_user_datadir(), 0, NULL);

if (dir == NULL)
return 0;
while ((name = g_dir_read_name(dir)) != NULL)
{
if (!g_str_has_suffix(name, ".remmina"))
continue;
g_snprintf(filename, MAX_PATH_LEN, "%s/%s", dirname, name);
g_snprintf(filename, MAX_PATH_LEN, "%s/%s", remmina_file_get_user_datadir(), name);
remminafile = remmina_file_load(filename);
group = remmina_file_get_string(remminafile, "group");
if (group && remmina_string_array_find(array, group) < 0)
Expand Down Expand Up @@ -217,35 +204,24 @@ static void remmina_file_manager_add_group(GNode* node, const gchar* group)
GNode* remmina_file_manager_get_group_tree(void)
{
TRACE_CALL("remmina_file_manager_get_group_tree");
gchar dirname[MAX_PATH_LEN];
gchar filename[MAX_PATH_LEN];
GDir* dir;
GDir* old;
const gchar* name;
RemminaFile* remminafile;
const gchar* group;
GNode* root;

root = g_node_new(NULL);

/* If the old .remmina exists, use it. */
g_snprintf(dirname, sizeof(dirname), "%s/.%s", g_get_home_dir(), remmina);
old = g_dir_open(dirname, 0, NULL);
if (old == NULL)
{
/* If the XDG directories exist, use them. */
g_snprintf(dirname, sizeof(dirname), "%s/%s", g_get_user_data_dir(), remmina);
dir = g_dir_open(dirname, 0, NULL);
} else
dir = old;
dir = g_dir_open(remmina_file_get_user_datadir(), 0, NULL);

if (dir == NULL)
return root;
while ((name = g_dir_read_name(dir)) != NULL)
{
if (!g_str_has_suffix(name, ".remmina"))
continue;
g_snprintf(filename, MAX_PATH_LEN, "%s/%s", dirname, name);
g_snprintf(filename, MAX_PATH_LEN, "%s/%s", remmina_file_get_user_datadir(), name);
remminafile = remmina_file_load(filename);
group = remmina_file_get_string(remminafile, "group");
remmina_file_manager_add_group(root, group);
Expand Down
1 change: 1 addition & 0 deletions remmina/src/remmina_file_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ typedef struct _RemminaGroupData
} RemminaGroupData;

/* Initialize */
gchar* remmina_file_get_user_datadir(void);
void remmina_file_manager_init(void);
/* Iterate all .remmina connections in the home directory */
gint remmina_file_manager_iterate(GFunc func, gpointer user_data);
Expand Down
6 changes: 5 additions & 1 deletion remmina/src/remmina_plugin_manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,13 @@
*/

#include "config.h"

#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <string.h>

#include "remmina_public.h"
#include "remmina_file.h"
#include "remmina_file_manager.h"
#include "remmina_pref.h"
#include "remmina_protocol_widget.h"
#include "remmina_log.h"
Expand Down Expand Up @@ -127,6 +129,8 @@ RemminaPluginService remmina_plugin_manager_service =
remmina_protocol_widget_chat_receive,
remmina_protocol_widget_send_keys_signals,

remmina_file_get_user_datadir,

remmina_file_new,
remmina_file_get_filename,
remmina_file_set_string,
Expand Down
Loading