Commit 0ec9008c authored by Davy Defaud's avatar Davy Defaud

Merge branch 'untranstext' into 'french_translation_update'

Untranstext

See merge request DevDef/Remmina!1
parents c691595b 27926e7a
---
image: ubuntu:16.04
image: ubuntu:18.04
stages:
- cross_environment
......@@ -27,25 +27,21 @@ ubuntu:devel:
before_script:
- apt-get update -qq
- apt-get install -y -qq software-properties-common
python-software-properties
python3-software-properties
- apt-add-repository $FREERDP_DAILY_PPA -y
- apt-get update -qq
- apt-get install -y -qq build-essential git-core cmake
libssl-dev libx11-dev libxext-dev libxinerama-dev
libxcursor-dev libxdamage-dev libxv-dev
libcups2-dev libxml2 libxml2-dev libxkbfile-dev
libasound2-dev libxrandr-dev libgstreamer0.10-dev
libgstreamer-plugins-base0.10-dev libgstreamer1.0-dev
libgstreamer-plugins-base1.0-dev libxi-dev
libavutil-dev libavcodec-dev libxtst-dev
libgtk-3-dev libgcrypt11-dev libssh-dev libpulse-dev
libvte-2.91-dev libxkbfile-dev libfreerdp-dev
libtelepathy-glib-dev libjpeg-dev libgnutls-dev
libgnome-keyring-dev libavahi-ui-gtk3-dev
libvncserver-dev libappindicator3-dev intltool
libsecret-1-dev libwebkit2gtk-3.0-dev libsoup2.4-dev
libjson-glib-dev libspice-protocol-dev
libspice-client-gtk-3.0-dev
- apt-get install -y -qq build-essential git-core cmake libssl-dev
libx11-dev libxext-dev libxinerama-dev libxcursor-dev libxdamage-dev
libxv-dev libxkbfile-dev libasound2-dev libcups2-dev libxml2 libxml2-dev
libxrandr-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
libxi-dev libavutil-dev libavcodec-dev libxtst-dev libgtk-3-dev
libgcrypt11-dev libssh-dev libpulse-dev libvte-2.91-dev libxkbfile-dev
libtelepathy-glib-dev libjpeg-dev libgnutls28-dev libgnome-keyring-dev
libavahi-ui-gtk3-dev libvncserver-dev libappindicator3-dev intltool
libsecret-1-dev libwebkit2gtk-4.0-dev libsystemd-dev libsoup2.4-dev
libjson-glib-dev libavresample-dev freerdp2-dev libspice-protocol-dev
libspice-client-gtk-3.0-dev
script:
- mkdir $BUILD_FOLDER
- cmake -B$BUILD_FOLDER -H. $CMAKE_BUILD_OPTIONS
......@@ -66,7 +62,7 @@ flatpak:test:
before_script:
- apt-get update -qq
- apt-get install -y -qq software-properties-common
python-software-properties
python3-software-properties
- add-apt-repository $FLATPAK_PPA -y
- apt-get update -qq
- apt-get install -y -qq flatpak-builder flatpak build-essential git-core
......
......@@ -38,7 +38,7 @@ Some exemples are:
Similarly, we have a quite important list of feature requests, that are labeled as [enhancement](https://gitlab.com/Remmina/Remmina/issues?label_name%5B%5D=enhancement&sort=created_date&state=opened), of which some that have a [bounty](https://gitlab.com/Remmina/Remmina/issues?scope=all&utf8=%E2%9C%93&state=opened&label_name[]=enhancement&label_name[]=bounty) for those that will be able to implement them.
* [#6](https://gitlab.com/Remmina/Remmina/issues/6) : New resolution setting “fit to window” [$250]
* ~~ [#6](https://gitlab.com/Remmina/Remmina/issues/6) : New resolution setting “fit to window” [$250] ~~ Implemented by @giox069
* [#323](https://gitlab.com/Remmina/Remmina/issues/323) : File transfer in RDP plugin [$25]
* [#476](https://gitlab.com/Remmina/Remmina/issues/476) : Favorite and recent connections [$5]
* [#815](https://gitlab.com/Remmina/Remmina/issues/815) : Feature request – Option – Floating Desktop Name [$5]
......@@ -57,6 +57,10 @@ Install it, use it and report back to us. Whatever you find that it doesn’
For bug and feature requests use [GitLab issues](https://gitlab.com/Remmina/Remmina/issues) For discussions you can use G+, reddit ad irc (we are not often connected, be patient)
## Translating
You can help translate Remmina, some basic instructions to get started are documented in the [How-to-translate-Remmina Wiki](https://gitlab.com/Remmina/Remmina/wikis/How-to-translate-Remmina)
## Documenting
We need much more user and developer guides. You can submit any (accessible) format you want for the user guides (screencasts, pdf, html, Open Document, gs, ps, LaTeX, gitlab wiki , etc).
......
......@@ -141,7 +141,7 @@ theraser <mail@hegerfeld.org>
weberho <jweberhofer@weberhofer.at>
</property>
<property name="documenters">Dario Cavedon &lt;dcavedon@gmail.com&gt;</property>
<property name="translator_credits" translatable="yes">Adolfo Jayme Barrientos &lt;fitojb@ubuntu.com&gt;
<property name="translator_credits" translatable="no">Adolfo Jayme Barrientos &lt;fitojb@ubuntu.com&gt;
Antenore Gatta &lt;antenore@simbiosi.org&gt;
AsciiWolf &lt;mail@asciiwolf.com&gt;
Balázs Meskó &lt;meskobalazs@gmail.com&gt;
......
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1
<!-- Generated with glade 3.22.1
Remmina Preferences Dialog -
Remmina Preferences Dialog -
Copyright (C) Antenore Gatta & Giovanni Panozzo 2014-2018
This program is free software; you can redistribute it and/or
......@@ -1233,7 +1233,7 @@ Author: Antenore Gatta
<object class="GtkEntry" id="entry_options_ssh_tcp_usrtimeout">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes" comments="http://man7.org/linux/man-pages/man7/tcp.7.html">it specifies the maximum amount of time in milliseconds that transmitted data may remain unacknowledged before TCP will forcibly close the corresponding connection.</property>
<property name="tooltip_text" translatable="yes" comments="http://man7.org/linux/man-pages/man7/tcp.7.html">it specifies the maximum amount of time in milliseconds that transmitted data may remain unacknowledged before TCP will forcibly close the corresponding connection.</property>
<property name="hexpand">True</property>
<property name="max_length">5</property>
<property name="input_purpose">number</property>
......
......@@ -43,7 +43,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">9</property>
<property name="label" translatable="yes">It seems that Remmina is running on your system as a SNAP package. To enable access to some important features, like password saving in your keyring and RDP printer sharing, please open your software center and give the appropriate permissions to Remmina. As an alternative you can to enter the following commands in a terminal window:</property>
<property name="label" translatable="yes">It seems that Remmina is running on your system as a SNAP package. To enable access to some important features, like password saving in your keyring and RDP printer sharing, please open your software center and give the appropriate permissions to Remmina. As an alternative you can to enter the following commands in a terminal window:</property>
<property name="wrap">True</property>
<property name="ellipsize">start</property>
<property name="max_width_chars">50</property>
......
......@@ -51,7 +51,7 @@
<object class="GtkLabel" id="label_pleasewait">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">PLEASE WAIT ...</property>
<property name="label" translatable="yes">PLEASE WAIT...</property>
</object>
<packing>
<property name="expand">False</property>
......
......@@ -256,8 +256,8 @@
"sources": [
{
"type": "archive",
"url": "https://www.libssh.org/files/0.8/libssh-0.8.5.tar.xz",
"sha256": "07d2c431240fc88f6b06bcb36ae267f9afeedce2e32f6c42f8844b205ab5a335"
"url": "https://www.libssh.org/files/0.8/libssh-0.8.6.tar.xz",
"sha256": "1046b95632a07fc00b1ea70ee683072d0c8a23f544f4535440b727812002fd01"
}
],
"modules": [
......
......@@ -38,6 +38,6 @@
#pragma once
#define PLUGIN_NAME "EXEC"
#define PLUGIN_DESCRIPTION "Execute a command"
#define PLUGIN_DESCRIPTION N_("Execute a command")
#define PLUGIN_VERSION "1.0"
#define PLUGIN_APPICON "remmina-tool-symbolic"
......@@ -332,7 +332,6 @@ static gboolean remmina_rdp_event_delayed_monitor_layout(RemminaProtocolWidget*
rfContext* rfi = GET_PLUGIN_DATA(gp);
RemminaPluginRdpEvent rdp_event = { 0 };
GtkAllocation a;
RemminaFile* remminafile;
gint desktopOrientation, desktopScaleFactor, deviceScaleFactor;
if (!rfi || !rfi->connected || rfi->is_reconnecting)
......@@ -351,7 +350,6 @@ static gboolean remmina_rdp_event_delayed_monitor_layout(RemminaProtocolWidget*
gpheight = a.height;
prevwidth = remmina_plugin_service->protocol_plugin_get_width(gp);
prevheight = remmina_plugin_service->protocol_plugin_get_height(gp);
remminafile = remmina_plugin_service->protocol_plugin_get_file(gp);
if ((gpwidth != prevwidth || gpheight != prevheight) &&
gpwidth >= 200 && gpwidth < 8192 &&
......@@ -560,13 +558,51 @@ static gboolean remmina_rdp_event_on_scroll(GtkWidget* widget, GdkEventScroll* e
return TRUE;
}
static void remmina_rdp_event_init_keymap(rfContext* rfi, const gchar* strmap)
{
long int v1, v2;
const char *s;
char *endptr;
RemminaPluginRdpKeymapEntry ke;
if (strmap == NULL || strmap[0] == 0) {
rfi->keymap = NULL;
return;
}
s = strmap;
rfi->keymap = g_array_new(FALSE, TRUE, sizeof(RemminaPluginRdpKeymapEntry));
while(1) {
v1 = strtol(s, &endptr, 10);
if (endptr == s) break;
s = endptr;
if (*s != ':') break;
s++;
v2 = strtol(s, &endptr, 10);
if (endptr == s) break;
s = endptr;
ke.orig_keycode = v1 & 0x7fffffff;
ke.translated_keycode = v2 & 0x7fffffff;
g_array_append_val(rfi->keymap, ke);
if (*s != ',') break;
s++;
}
if (rfi->keymap->len == 0) {
g_array_unref(rfi->keymap);
rfi->keymap = NULL;
}
}
static gboolean remmina_rdp_event_on_key(GtkWidget* widget, GdkEventKey* event, RemminaProtocolWidget* gp)
{
TRACE_CALL(__func__);
guint32 unicode_keyval;
guint16 hardware_keycode;
rfContext* rfi = GET_PLUGIN_DATA(gp);
RemminaPluginRdpEvent rdp_event;
RemminaPluginRdpKeymapEntry* kep;
DWORD scancode = 0;
int ik;
if (!rfi || !rfi->connected || rfi->is_reconnecting)
return FALSE;
......@@ -606,10 +642,20 @@ static gboolean remmina_rdp_event_on_key(GtkWidget* widget, GdkEventKey* event,
default:
if (!rfi->use_client_keymap) {
scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(event->hardware_keycode);
rdp_event.key_event.key_code = scancode & 0xFF;
rdp_event.key_event.extended = scancode & 0x100;
if (rdp_event.key_event.key_code) {
hardware_keycode = event->hardware_keycode;
if (rfi->keymap) {
for(ik = 0; ik < rfi->keymap->len; ik++) {
kep = &g_array_index(rfi->keymap, RemminaPluginRdpKeymapEntry, ik);
if (hardware_keycode == kep->orig_keycode) {
hardware_keycode = kep->translated_keycode;
break;
}
}
}
scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(hardware_keycode);
if (scancode) {
rdp_event.key_event.key_code = scancode & 0xFF;
rdp_event.key_event.extended = scancode & 0x100;
remmina_rdp_event_event_push(gp, &rdp_event);
keypress_list_add(gp, rdp_event);
}
......@@ -677,8 +723,10 @@ void remmina_rdp_event_init(RemminaProtocolWidget* gp)
gint flags;
rfContext* rfi = GET_PLUGIN_DATA(gp);
GtkClipboard* clipboard;
RemminaFile* remminafile;
if (!rfi) return;
remminafile = remmina_plugin_service->protocol_plugin_get_file(gp);
rfi->drawing_area = gtk_drawing_area_new();
gtk_widget_show(rfi->drawing_area);
......@@ -694,6 +742,13 @@ void remmina_rdp_event_init(RemminaProtocolWidget* gp)
rfi->use_client_keymap = (s && s[0] == '1' ? TRUE : FALSE);
g_free(s);
/* Read special keymap from profile file, if exists */
remmina_rdp_event_init_keymap(rfi, remmina_plugin_service->pref_get_value("rdp_map_keycode"));
if (rfi->use_client_keymap && rfi->keymap) {
fprintf(stderr, "RDP profile error: you cannot define both rdp_map_hardware_keycode and have 'Use client keuboard mapping' enabled\n");
}
g_signal_connect(G_OBJECT(rfi->drawing_area), "draw",
G_CALLBACK(remmina_rdp_event_on_draw), gp);
g_signal_connect(G_OBJECT(rfi->drawing_area), "configure-event",
......@@ -713,7 +768,6 @@ void remmina_rdp_event_init(RemminaProtocolWidget* gp)
g_signal_connect(G_OBJECT(rfi->drawing_area), "focus-in-event",
G_CALLBACK(remmina_rdp_event_on_focus_in), gp);
RemminaFile* remminafile = remmina_plugin_service->protocol_plugin_get_file(gp);
if (!remmina_plugin_service->file_get_int(remminafile, "disableclipboard", FALSE)) {
clipboard = gtk_widget_get_clipboard(rfi->drawing_area, GDK_SELECTION_CLIPBOARD);
rfi->clipboard.clipboard_handler = g_signal_connect(clipboard, "owner-change", G_CALLBACK(remmina_rdp_event_on_clipboard), gp);
......@@ -800,6 +854,10 @@ void remmina_rdp_event_uninit(RemminaProtocolWidget* gp)
g_hash_table_destroy(rfi->object_table);
g_array_free(rfi->pressed_keys, TRUE);
if (rfi->keymap) {
g_array_free(rfi->keymap, TRUE);
rfi->keymap = NULL;
}
g_async_queue_unref(rfi->event_queue);
rfi->event_queue = NULL;
g_async_queue_unref(rfi->ui_queue);
......
......@@ -230,6 +230,11 @@ struct remmina_plugin_rdp_ui_object {
void *retptr;
};
typedef struct remmina_plugin_rdp_keymap_entry {
unsigned orig_keycode;
unsigned translated_keycode;
} RemminaPluginRdpKeymapEntry;
struct rf_context {
rdpContext _p;
......@@ -291,6 +296,8 @@ struct rf_context {
rfClipboard clipboard;
GArray* keymap; /* Array of RemminaPluginRdpKeymapEntry */
enum { REMMINA_POSTCONNECT_ERROR_OK = 0, REMMINA_POSTCONNECT_ERROR_GDI_INIT = 1, REMMINA_POSTCONNECT_ERROR_NO_H264 } postconnect_error;
};
......
......@@ -40,7 +40,7 @@
#define __PLUGIN_CONFIG_H
#define PLUGIN_NAME "ST"
#define PLUGIN_DESCRIPTION "Remmina Simple Terminal"
#define PLUGIN_DESCRIPTION N_("Remmina Simple Terminal")
#define PLUGIN_VERSION "1.0.0.0"
#define PLUGIN_APPICON "remmina-tool-symbolic"
#endif
......@@ -37,7 +37,7 @@
#define __PLUGIN_CONFIG_H
#define PLUGIN_NAME "HELLO"
#define PLUGIN_DESCRIPTION "Hello World!"
#define PLUGIN_DESCRIPTION N_("Hello World!")
#define PLUGIN_VERSION "1.0"
#define PLUGIN_APPICON "remmina-tool"
#endif
......@@ -1425,6 +1425,9 @@ static void remmina_plugin_vnc_release_key(RemminaProtocolWidget *gp, guint16 ke
RemminaKeyVal *k;
gint i;
if (!gpdata)
return;
if (keycode == 0) {
/* Send all release key events for previously pressed keys */
for (i = 0; i < gpdata->pressed_keys->len; i++) {
......
src/remmina_ftp_client.c
src/remmina_applet_menu_item.c
src/remmina_protocol_widget.c
src/remmina_string_array.c
src/remmina_string_array.h
src/remmina_file_manager.c
src/remmina_main.c
src/remmina_chat_window.c
src/remmina.c
src/remmina_masterthread_exec.h
src/remmina_chat_window.h
src/remmina_stats.c
src/remmina_crypt.c
src/remmina_plugin_manager.h
src/remmina_applet_menu_item.h
src/remmina_sftp_plugin.h
src/remmina_exec.c
src/remmina_ssh.c
src/remmina_external_tools.h
src/remmina_sftp_client.c
src/remmina_masterthread_exec.c
src/remmina_sftp_plugin.c
src/remmina_ftp_client.c
src/remmina_file_manager.h
src/remmina_public.c
src/remmina_crypt.c
src/remmina_widget_pool.c
src/remmina_sysinfo.c
src/remmina_pref_dialog.c
src/remmina_utils.c
src/remmina_ssh.h
src/remmina_file.c
src/remmina_chat_window.c
src/remmina_mpchange.h
src/remmina_message_panel.h
src/remmina_widget_pool.h
src/remmina_about.c
src/remmina_marshals.h
src/remmina_main.h
src/remmina_external_tools.c
src/remmina_crypt.h
src/include/remmina/plugin.h
src/include/remmina/remmina_trace_calls.h
src/include/remmina/types.h
src/remmina_ext_exec.c
src/remmina_applet_menu_item.c
src/remmina_key_chooser.c
src/remmina_message_panel.c
src/remmina_mpchange.c
src/remmina_marshals.c
src/remmina_sftp_client.c
src/remmina_ssh.c
src/remmina_scrolled_viewport.c
src/remmina_log.c
src/remmina_utils.h
src/remmina_pref_dialog.c
src/remmina_sftp_client.h
src/remmina_icon.c
src/remmina_ext_exec.c
src/remmina_string_list.c
src/remmina_file_editor.c
src/remmina_pref.c
src/remmina_pref_dialog.h
src/remmina_protocol_widget.c
src/remmina_stats_sender.c
src/remmina_ssh_plugin.h
src/remmina_about.h
src/remmina_protocol_widget.h
src/remmina_scrolled_viewport.c
src/remmina_sysinfo.c
src/remmina.h
src/remmina_widget_pool.c
src/remmina_avahi.h
src/remmina_ext_exec.h
src/remmina_log.h
src/remmina_public.h
src/remmina_pref.h
src/remmina_connection_window.h
src/remmina_file_editor.h
src/remmina_applet_menu.h
src/remmina_connection_window.c
src/remmina_icon.h
src/remmina_message_panel.c
src/remmina_stats.h
src/remmina_applet_menu.c
src/remmina_exec.c
src/remmina_about.c
src/remmina_stats.c
src/remmina_file.c
src/remmina_ssh_plugin.c
src/remmina_external_tools.c
src/remmina_plugin_manager.c
src/remmina_utils.c
src/remmina_sysinfo.h
src/remmina_avahi.c
src/remmina_string_array.c
src/remmina_connection_window.c
src/remmina_file_manager.c
plugins/tool_hello_world/plugin.c
plugins/nx/nx_session_manager.c
plugins/nx/nx_session.c
plugins/nx/nx_plugin.c
plugins/vnc/vnc_plugin.c
plugins/xdmcp/xdmcp_plugin.c
plugins/st/st_plugin.c
plugins/exec/exec_plugin.c
plugins/spice/spice_plugin_file_transfer.c
plugins/spice/spice_plugin_usb.c
plugins/spice/spice_plugin.c
plugins/telepathy/telepathy_channel_handler.c
plugins/telepathy/telepathy_handler.c
plugins/telepathy/telepathy_plugin.c
src/remmina_ftp_client.h
src/remmina_plugin_manager.c
src/remmina_string_list.c
src/remmina_pref.c
src/remmina_string_list.h
src/remmina.c
src/remmina_exec.h
src/remmina_sftp_plugin.c
src/remmina_key_chooser.h
src/remmina_file.h
src/remmina_marshals.c
src/remmina_ssh_plugin.c
src/remmina_file_editor.c
src/remmina_log.c
src/remmina_mpchange.c
src/remmina_stats_sender.h
src/remmina_scrolled_viewport.h
plugins/secret/src/glibsecret_plugin.c
plugins/rdp/rdp_settings.c
plugins/rdp/rdp_event.c
plugins/secret/src/glibsecret_plugin.h
plugins/rdp/rdp_cliprdr.h
plugins/rdp/rdp_cliprdr.c
plugins/rdp/rdp_plugin.c
plugins/rdp/rdp_channels.c
plugins/rdp/rdp_file.c
plugins/rdp/rdp_plugin.c
plugins/rdp/rdp_file.h
plugins/rdp/rdp_graphics.h
plugins/rdp/rdp_graphics.c
plugins/rdp/rdp_plugin.h
plugins/rdp/rdp_settings.c
plugins/rdp/rdp_file.c
plugins/rdp/rdp_channels.h
plugins/rdp/rdp_event.h
plugins/rdp/rdp_settings.h
plugins/rdp/rdp_event.c
plugins/spice/spice_plugin_file_transfer.c
plugins/spice/spice_plugin.h
plugins/spice/spice_plugin_usb.c
plugins/spice/spice_plugin.c
plugins/xdmcp/xdmcp_plugin.c
plugins/vnc/vnc_plugin.c
plugins/st/st_plugin.c
plugins/st/st_plugin_config.h
plugins/nx/nx_session.h
plugins/nx/nx_plugin.c
plugins/nx/nx_plugin.h
plugins/nx/nx_session_manager.c
plugins/nx/nx_session_manager.h
plugins/nx/nx_session.c
plugins/exec/exec_plugin.c
plugins/exec/exec_plugin_config.h
plugins/common/remmina_plugin.h
plugins/telepathy/telepathy_plugin.c
plugins/telepathy/telepathy_handler.c
plugins/telepathy/telepathy_handler.h
plugins/telepathy/telepathy_channel_handler.c
plugins/telepathy/telepathy_channel_handler.h
plugins/tool_hello_world/plugin.c
plugins/tool_hello_world/plugin_config.h
data/ui/remmina_mpc.glade
data/ui/remmina_about.glade
data/ui/remmina_preferences.glade
data/ui/remmina_key_chooser.glade
data/ui/remmina_mpc.glade
data/ui/remmina_snap_info_dialog.glade
data/ui/remmina_main.glade
data/ui/remmina_spinner.glade
data/ui/remmina_preferences.glade
data/ui/remmina_snap_info_dialog.glade
data/ui/remmina_string_list.glade
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -5,7 +5,7 @@ REMMINATOP="$(dirname "$SCRIPTPATH")"
cd "$REMMINATOP" || exit 1
if ! find src plugins -name "*.c" | sed 's/^.\///' >| po/POTFILES.in ; then
if ! find src plugins -name "*\.c" -o -name "*\.h" | sed 's/^.\///' >| po/POTFILES.in ; then
exit 1
fi
if ! find data -name "*.glade" | sed 's/^.\///' >> po/POTFILES.in ; then
......@@ -21,15 +21,16 @@ xgettext --from-code=UTF-8 \
--keyword=g_dngettext:2,3 \
--add-comments \
--files-from=po/POTFILES.in \
--output=po/messages.pot \
--copyright-holder="2014-2019 Antenore Gatta, Giovanni Panozzo" \
--package-name="Remmina" --package-version="1.2.32.1" \
--output=po/remmina.pot \
--package-version="v1.3.0" \
--package-name="Remmina" \
--copyright-holder="Antenore Gatta and Giovanni Panozzo" \
--msgid-bugs-address="admin@remmina.org"
cd "$REMMINATOP"/po || exit 1
for i in *.po; do
msgmerge -N --backup=off --update "$i" messages.pot
msgmerge -N --backup=off --update "$i" remmina.pot
done
for i in "$REMMINATOP"/po/*.po ; do
......
......@@ -122,6 +122,7 @@
#include "config.h"
#include <locale.h>
#include <string.h>
#include <sys/utsname.h>
#include <unistd.h>
......@@ -339,6 +340,40 @@ JsonNode *remmina_stats_get_os_info()
return r;
}
/**
* Gets the following user environment:
* - Gets the user's locale (or NULL by default) coresponding to LC_ALL.
*
* @return a Json Node structure containg the user's environment.
*/
JsonNode *remmina_stats_get_user_env()
{
TRACE_CALL(__func__);
JsonBuilder *b;
JsonNode *r;
gchar *language;
language = setlocale (LC_ALL, NULL);
b = json_builder_new();
json_builder_begin_object(b);
json_builder_set_member_name(b, "language");
if (!language || language[0] == '\0') {
json_builder_add_null_value(b);
}else {
json_builder_add_string_value(b, language);
}
json_builder_end_object(b);
r = json_builder_get_root(b);
g_object_unref(b);
return r;
}
JsonNode *remmina_stats_get_version()
{
TRACE_CALL(__func__);
......@@ -599,29 +634,24 @@ static void remmina_profiles_get_data(RemminaFile *remminafile, gpointer user_da
gint res = g_date_time_compare( ds, dd );
/** If the date in the hash less than the date in the profile, we take the latter */
if (res < 0 ) {
//remmina_log_printf("Date %s is newer than the one inside pdata->protocol for protocol %s\n", g_strdup(pdata->pdatestr), g_strdup(pdata->protocol));
g_hash_table_replace(pdata->proto_date, g_strdup(pdata->protocol), g_strdup(pdata->pdatestr));
}
}
/** If the date in the hash is NOT valid and the date in the profile is valid we keep the latter */
if (!ds && dd) {
//remmina_log_printf("Date %s inserted in pdata->protocol for protocol %s\n", g_strdup(pdata->pdatestr), g_strdup(pdata->protocol));
g_hash_table_replace(pdata->proto_date, g_strdup(pdata->protocol), g_strdup(pdata->pdatestr));
}
/** If both date are NULL, we insert NULL for that protocol */
if ((!ds && !dd) && pdata->pdatestr) {
//remmina_log_printf("Date NULL inserted in pdata->protocol for protocol %s\n", g_strdup(pdata->protocol));
g_hash_table_replace(pdata->proto_date, g_strdup(pdata->protocol), NULL);
}
}else {
/** If there is not the protocol in the hash, we add it */
/** If the date in the profile is not NULL we use it */
if (pdata->pdatestr) {
//remmina_log_printf("Date %s inserted in pdata->protocol for protocol %s\n", g_strdup(pdata->pdatestr), g_strdup(pdata->protocol));
g_hash_table_replace(pdata->proto_date, g_strdup(pdata->protocol), g_strdup(pdata->pdatestr));
}else {
/** Otherwise we set it to NULL */
//remmina_log_printf("We set %s protocol date to NULL\n", g_strdup(pdata->protocol));
g_hash_table_replace(pdata->proto_date, g_strdup(pdata->protocol), NULL);
}
}
......@@ -652,6 +682,7 @@ static void remmina_profiles_get_data(RemminaFile *remminafile, gpointer user_da
* | SPICE | 20171122 |
* | SSH | 20180111 |
*
* @return a Json Node structure containg the protocol usage statistics.
*
*/
JsonNode *remmina_stats_get_profiles()
......@@ -748,6 +779,14 @@ JsonNode *remmina_stats_get_all()
json_builder_set_member_name(b, "SYSTEM");
json_builder_add_value(b, n);