diff --git a/src/js/yunohost/controllers/apps.js b/src/js/yunohost/controllers/apps.js
index da642162..717ea785 100644
--- a/src/js/yunohost/controllers/apps.js
+++ b/src/js/yunohost/controllers/apps.js
@@ -40,14 +40,96 @@
});
});
+ // List available apps lists
+ app.get('#/apps/lists', function (c) {
+ c.api('/appslists', function(data) {
+ list = [];
+ var has_community_list = false;
+ $.each(data, function(listname, listinfo) {
+ list.push({
+ 'name': listname,
+ 'url': listinfo['url'],
+ 'lastUpdate': listinfo['lastUpdate']
+ });
+
+ // Check for community list
+ if (listname == 'community' || listinfo['url'] == 'https://app.yunohost.org/community.json') {
+ has_community_list = true;
+ }
+ });
+
+ c.view('app/app_appslists_list', {
+ appslists: list,
+ has_community_list: has_community_list
+ });
+ }, 'GET');
+ });
+
+ // Add a new apps list
+ app.post('#/apps/lists', function (c) {
+ list = {
+ 'name' : c.params['appslist_name'],
+ 'url' : c.params['appslist_url']
+ }
+
+ c.api('/appslists', function(data) {
+ store.clear('slide');
+ c.redirect('#/apps/lists/' + list.name);
+ }, 'PUT', list);
+ });
+
+ // Show appslist info and operations
+ app.get('#/apps/lists/:appslist', function (c) {
+ c.api('/appslists', function(data) {
+ if (typeof data[c.params['appslist']] !== 'undefined') {
+ list = {
+ 'name' : c.params['appslist'],
+ 'url': data[c.params['appslist']]['url'],
+ 'lastUpdate': data[c.params['appslist']]['lastUpdate'],
+ 'removable' : (c.params['appslist'] !== 'yunohost') ? true : false // Do not remove default apps list
+ };
+ c.view('app/app_appslists_info', {appslist: list});
+ }
+ else {
+ c.flash('warning', y18n.t('appslists_unknown_list', [c.params['appslist']]));
+ store.clear('slide');
+ c.redirect('#/apps/lists');
+ }
+ }, 'GET');
+ });
+
// Refresh available apps list
- app.get('#/apps/refresh', function (c) {
- c.api('/appslists', function(data) { // http://api.yunohost.org/#!/app/app_fetchlist_put_5
+ app.get('#/apps/lists/refresh', function (c) {
+ c.api('/appslists', function(data) {
// c.redirect(store.get('path'));
c.redirect('#/apps/install');
}, 'PUT');
});
+ // Refresh specific apps list
+ app.get('#/apps/lists/:appslist/refresh', function (c) {
+ c.api('/appslists', function(data) {
+ c.redirect('#/apps/lists');
+ }, 'PUT', {'name' : c.params['appslist']});
+ });
+
+ // Remove apps list
+ app.get('#/apps/lists/:appslist/remove', function (c) {
+ c.confirm(
+ y18n.t('appslist'),
+ y18n.t('appslists_confirm_remove', [c.params['app']]),
+ function() {
+ c.api('/appslists', function() {
+ c.redirect('#/apps/lists');
+ }, 'DELETE', {'name' : c.params['appslist']});
+ },
+ function() {
+ store.clear('slide');
+ c.redirect('#/apps/lists/'+ c.params['appslist']);
+ }
+ );
+ });
+
// Get app information
app.get('#/apps/:app', function (c) {
c.api('/apps/'+c.params['app']+'?raw', function(data) { // http://api.yunohost.org/#!/app/app_info_get_9
diff --git a/src/js/yunohost/main.js b/src/js/yunohost/main.js
index 8882d9a6..595c218b 100644
--- a/src/js/yunohost/main.js
+++ b/src/js/yunohost/main.js
@@ -25,6 +25,10 @@
Handlebars.registerHelper('humanTime', function(time) {
return Math.round(time) + 's';
});
+ Handlebars.registerHelper('timestampToDate', function(timestamp) {
+ var date = new Date(timestamp * 1000);
+ return date.toLocaleString();
+ });
Handlebars.registerHelper('bitRate', function(bytes, time) {
var sizes = ['b', 'Kb', 'Mb', 'Gb', 'Tb'];
if (time === 0) return 'n/a';
diff --git a/src/locales/en.json b/src/locales/en.json
index 2a3ad6d7..c2c98fbc 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -1,6 +1,7 @@
{
"action": "Action",
"add": "Add",
+ "remove": "Remove",
"administration_password": "Administration password",
"allowed_users": "Allowed users",
"api_not_responding": "API is not responding",
@@ -328,6 +329,20 @@
"regenerate_selfsigned_cert_message" : "If you want, you can regenerate the self-signed certificate.",
"regenerate_selfsigned_cert" : "Regenerate self-signed certificate",
"revert_to_selfsigned_cert_message" : "If you really want to, you can reinstall a self-signed certificate. (Not recommended)",
- "revert_to_selfsigned_cert" : "Revert to a self-signed certificate"
+ "revert_to_selfsigned_cert" : "Revert to a self-signed certificate",
+ "appslists" : "Applications lists",
+ "appslists_no_lists" : "No applications lists",
+ "appslists_custom" : "Custom applications list",
+ "appslists_manage" : "Manage applications lists",
+ "appslists_confirm_remove" : "Are you sure you want to remove this applications list?",
+ "appslists_info_refresh_desc" : "Refresh applications status from this list.",
+ "appslists_info_remove_desc" : "Applications from this list will not be available anymore.",
+ "appslists_last_update" : "Last update",
+ "appslists_unknown_list" : "Unknown apps list: %s",
+ "appslists_community_list" : "Community applications list",
+ "name" : "Name",
+ "install_community_appslists_info" : "Community applications list allows you to install community maintained applications.
See the full list on yunohost.org/apps_in_progress.",
+ "install_community_appslists_warning" : "Note that these applications packages are not official and not maintained by the YunoHost team.
Installing these applications is at your own risk and could break your system.",
+ "install_custom_app_appslists_info" : "Note that you can use alternative applications lists to install some other apps maintained by the YunoHost community."
}
diff --git a/src/views/app/app_appslists_info.ms b/src/views/app/app_appslists_info.ms
new file mode 100644
index 00000000..f8186774
--- /dev/null
+++ b/src/views/app/app_appslists_info.ms
@@ -0,0 +1,49 @@
+
{{t 'appslists_info_refresh_desc'}}
+ + {{t 'refresh_app_list'}} + +{{t 'appslists_info_remove_desc'}}
+ + {{t 'remove'}} + ++ + {{t 'appslists_no_lists'}} +
+ {{/appslists}} ++ {{t 'install_custom_app_appslists_info'}}
+ +