aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--data/pages/about.css40
-rw-r--r--embed/ephy-request-about.c19
-rw-r--r--embed/ephy-web-app-utils.c44
-rw-r--r--embed/ephy-web-app-utils.h2
4 files changed, 97 insertions, 8 deletions
diff --git a/data/pages/about.css b/data/pages/about.css
index af498283d..2cb4c5884 100644
--- a/data/pages/about.css
+++ b/data/pages/about.css
@@ -78,3 +78,43 @@
border-top: 1px solidtransparent;
}
+/* about:applications */
+
+.applications-body {
+ font: 11pt cantarell;
+ color: #2e3436;
+ padding: 20px 20px 0 20px;
+ background-color: #f6f6f4;
+ background-image: -webkit-gradient(
+ linear,
+ left top,
+ left bottom,
+ color-stop(0, #eeeeec),
+ color-stop(1, #f6f6f4)
+ );
+ background-size: 100% 5em;
+ background-repeat: no-repeat;
+}
+
+.applications-body table { width: 100%; border-collapse: collapse; }
+
+.applications-body table, td {
+ border: 1px solid #d3d7cf;
+ border-left: none; border-right: none;
+}
+
+.applications-body h1 {
+ color: #babdb6;
+ text-shadow: 0 1px 0 white;
+ margin-bottom: 0;
+}
+
+.applications-body p { margin-bottom: 30px; }
+.applications-body td { padding: 15px 15px;}
+.applications-body td.icon { width: 64px; }
+.applications-body td.datas { width: 200px; }
+.applications-body td.input { width: 64px; }
+.applications-body td.date { width: auto; text-align: right; font-style: italic; font-size: small; }
+.applications-body .appname { font-weight: bold; }
+.applications-body .appurl, td.date { color: #babdb6; }
+.applications-body input { width: 100%; padding: 8px; }
diff --git a/embed/ephy-request-about.c b/embed/ephy-request-about.c
index 1203d1a7e..e55bfec4c 100644
--- a/embed/ephy-request-about.c
+++ b/embed/ephy-request-about.c
@@ -166,12 +166,15 @@ ephy_request_about_send (SoupRequest *request,
g_string_append_printf (data_str, "<head><title>%s</title>" \
"<style type=\"text/css\">%s</style></head>" \
- "<body>",
- _("Web Applications"),
- about->priv->css_style);
+ "<body class=\"applications-body\"><h1>%s</h1>" \
+ "<p>%s</p>",
+ _("Applications"),
+ about->priv->css_style,
+ _("Applications"),
+ _("List of installed web applications"));
+
- g_string_append_printf (data_str, "<form><table><thead><tr><th>%s</th><th>%s</th><th>%s</th></tr></thead>",
- _("Icon"), _("Name"), _("Delete?"));
+ g_string_append (data_str, "<form><table>");
applications = ephy_web_application_get_application_list ();
for (p = applications; p; p = p->next) {
@@ -181,9 +184,9 @@ ephy_request_about_send (SoupRequest *request,
if (g_file_get_contents (app->icon_url, &img_data, &data_length, NULL))
img_data_base64 = g_base64_encode ((guchar*)img_data, data_length);
- g_string_append_printf (data_str, "<tbody><tr><td><img width=64 height=64 src=\"data:image/png;base64,%s\">" \
- " </img></td><td>%s</td><td><input type=\"submit\" value=\"Delete\" id=\"%s\"></td></tr>",
- img_data_base64, app->name, app->name);
+ g_string_append_printf (data_str, "<tbody><tr><td class=\"icon\"><img width=64 height=64 src=\"data:image/png;base64,%s\">" \
+ " </img></td><td class=\"data\"><div class=\"appname\">%s</div><div class=\"appurl\">%s</div></td><td class=\"input\"><input type=\"submit\" value=\"Delete\" id=\"%s\"></td><td class=\"date\">%s <br /> %s</td></tr>",
+ img_data_base64, app->name, app->url, app->name, _("Installed on:"), app->install_date);
g_free (img_data_base64);
g_free (img_data);
}
diff --git a/embed/ephy-web-app-utils.c b/embed/ephy-web-app-utils.c
index 293ec6318..272ca8e6f 100644
--- a/embed/ephy-web-app-utils.c
+++ b/embed/ephy-web-app-utils.c
@@ -301,14 +301,57 @@ ephy_web_application_get_application_list ()
name = g_file_info_get_name (info);
if (g_str_has_prefix (name, EPHY_WEB_APP_PREFIX)) {
char *profile_dir;
+ guint64 created;
+ GDate *date;
+ char *desktop_file, *desktop_file_path;
+ char *contents;
+ GFile *file;
+ GFileInfo *desktop_info;
app = g_slice_new0 (EphyWebApplication);
app->name = g_strdup (name + prefix_length);
profile_dir = ephy_web_application_get_profile_directory (app->name);
app->icon_url = g_build_filename (profile_dir, "app-icon.png", NULL);
+
+ desktop_file = g_strconcat (app->name, ".desktop", NULL);
+ desktop_file_path = g_build_filename (profile_dir, desktop_file, NULL);
+ if (g_file_get_contents (desktop_file_path, &contents, NULL, NULL)) {
+ char *exec;
+ char **strings;
+ GKeyFile *key;
+ int i;
+
+ key = g_key_file_new ();
+ g_key_file_load_from_data (key, contents, -1, 0, NULL);
+ exec = g_key_file_get_string (key, "Desktop Entry", "Exec", NULL);
+ strings = g_strsplit (exec, " ", -1);
+
+ for (i = 0; strings[i]; i++);
+ app->url = g_strdup (strings[i - 1]);
+
+ g_strfreev (strings);
+ g_free (exec);
+ g_key_file_free (key);
+ }
+
+ g_free (contents);
+ g_free (desktop_file);
g_free (profile_dir);
+ file = g_file_new_for_path (desktop_file_path);
+ g_free (desktop_file_path);
+
+ /* FIXME: this should use TIME_CREATED but it does not seem to be working. */
+ desktop_info = g_file_query_info (file, G_FILE_ATTRIBUTE_TIME_MODIFIED, 0, NULL, NULL);
+ created = g_file_info_get_attribute_uint64 (desktop_info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
+ date = g_date_new ();
+ g_date_set_time_t (date, (time_t)created);
+ g_date_strftime (app->install_date, 127, "%x", date);
+ g_date_free (date);
+ g_object_unref (file);
+ g_object_unref (desktop_info);
+
applications = g_list_append (applications, app);
}
@@ -328,6 +371,7 @@ ephy_web_application_free (EphyWebApplication *app)
{
g_free (app->name);
g_free (app->icon_url);
+ g_free (app->url);
g_slice_free (EphyWebApplication, app);
}
diff --git a/embed/ephy-web-app-utils.h b/embed/ephy-web-app-utils.h
index 06b3284ad..8326c4a10 100644
--- a/embed/ephy-web-app-utils.h
+++ b/embed/ephy-web-app-utils.h
@@ -34,6 +34,8 @@ G_BEGIN_DECLS
typedef struct {
char *name;
char *icon_url;
+ char *url;
+ char install_date[128];
} EphyWebApplication;
#define EPHY_WEB_APP_PREFIX "app-"