[bitbake-devel] [PATCH 13/18] toaster: Importlayer add notify exactly which layers changed
Alex DAMIAN
alexandru.damian at intel.com
Fri Dec 12 11:45:12 UTC 2014
From: Michael Wood <michael.g.wood at intel.com>
This changes when the dependencies are added to the project so that we
can know which ones were successfully added by waiting for the server to
respond with a list. This is more reliable because we may have specified
dependencies which are already in the project.
To pass this information to the project page a temporary cookie is used
with the values for the notification.
Signed-off-by: Michael Wood <michael.g.wood at intel.com>
---
lib/toaster/toastergui/static/js/importlayer.js | 19 +++++++--
lib/toaster/toastergui/static/js/projectapp.js | 27 ++++++++++--
.../toastergui/templates/layers_dep_modal.html | 48 ++++++++++++++++------
lib/toaster/toastergui/views.py | 11 +++--
4 files changed, 82 insertions(+), 23 deletions(-)
diff --git a/lib/toaster/toastergui/static/js/importlayer.js b/lib/toaster/toastergui/static/js/importlayer.js
index e2bc1ab..15830dd 100644
--- a/lib/toaster/toastergui/static/js/importlayer.js
+++ b/lib/toaster/toastergui/static/js/importlayer.js
@@ -78,8 +78,14 @@ function importLayerPageInit (ctx) {
});
importAndAddBtn.click(function(){
+ /* This is a list of the names from layerDeps for the layer deps
+ * modal dialog body
+ */
+ var depNames = [];
+
/* arrray of all layer dep ids includes parent and child deps */
var allDeps = [];
+
/* temporary object to use to do a reduce on the dependencies for each
* layer dependency added
*/
@@ -96,6 +102,7 @@ function importLayerPageInit (ctx) {
depDeps[layer.id] = layer;
}
}
+ depNames.push(layerDeps[key].name);
allDeps.push(layerDeps[key].id);
}
@@ -106,10 +113,14 @@ function importLayerPageInit (ctx) {
if (depDepsArray.length > 0) {
var layer = { name: layerNameInput.val(), url: "#", id: -1 };
- show_layer_deps_modal(ctx.projectId, layer, depDepsArray, function(selected){
+ var title = "Layer";
+ var body = "<strong>"+layer.name+"</strong>'s dependencies ("+
+ depNames.join(", ")+"</span>) require some layers that are not added to your project. Select the ones you want to add:</p>";
+
+ show_layer_deps_modal(ctx.projectId, layer, depDepsArray, title, body, false, function(selected){
/* Add the accepted dependencies to the allDeps array */
if (selected.length > 0){
- allDeps.concat (selected);
+ allDeps = allDeps.concat (selected);
}
import_and_add ();
});
@@ -141,8 +152,10 @@ function importLayerPageInit (ctx) {
show_error_message(data, layerData);
console.log(data.error);
} else {
+ layerData.layersAdded = data.layers_added;
/* Success layer import now go to the project page */
- window.location.replace(ctx.projectPageUrl+'#/layerimported='+layerData.name);
+ $.cookie('layer-imported-alert', JSON.stringify(layerData), { path: '/'});
+ window.location.replace(ctx.projectPageUrl+'#/layerimported');
}
},
error: function (data) {
diff --git a/lib/toaster/toastergui/static/js/projectapp.js b/lib/toaster/toastergui/static/js/projectapp.js
index 8e3499a..94c24f4 100644
--- a/lib/toaster/toastergui/static/js/projectapp.js
+++ b/lib/toaster/toastergui/static/js/projectapp.js
@@ -128,7 +128,7 @@ projectApp.filter('timediff', function() {
// main controller for the project page
-projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $location, $cookies, $q, $sce, $anchorScroll, $animate, $sanitize) {
+projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $location, $cookies, $cookieStore, $q, $sce, $anchorScroll, $animate, $sanitize) {
$scope.getSuggestions = function(type, currentValue) {
var deffered = $q.defer();
@@ -572,9 +572,28 @@ projectApp.controller('prjCtrl', function($scope, $modal, $http, $interval, $loc
});
_cmdExecuteWithParam("/layerimported", function (layer) {
- $scope.displayAlert($scope.zone2alerts,
- "You have imported <strong>" + layer +
- "</strong> and added it to your project.", "alert-success");
+ var imported = $cookieStore.get("layer-imported-alert");
+ var text;
+
+ if (!imported)
+ return;
+
+ if (imported.layersAdded.length == 0) {
+ text = "You have imported <strong>"+imported.name+
+ "</strong> and added it to your project.";
+ } else {
+ text = "You have imported <strong>"+imported.name+
+ "</strong> and added <strong>"+imported.layersAdded.length+
+ "</strong> layers to your project. <strong>"+
+ imported.layersAdded.join(", ")+"</strong>";
+ }
+
+ $scope.displayAlert($scope.zone2alerts, text, "alert-info");
+
+ // This doesn't work
+ $cookieStore.remove("layer-imported-alert");
+ //use jquery plugin instead
+ $.removeCookie("layer-imported-alert", { path: "/"});
});
_cmdExecuteWithParam("/targetbuild=", function (targets) {
diff --git a/lib/toaster/toastergui/templates/layers_dep_modal.html b/lib/toaster/toastergui/templates/layers_dep_modal.html
index 821bbda..b03fd0b 100644
--- a/lib/toaster/toastergui/templates/layers_dep_modal.html
+++ b/lib/toaster/toastergui/templates/layers_dep_modal.html
@@ -3,10 +3,10 @@
<form id="dependencies_modal_form">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
- <h3><span class="layer-name"></span> dependencies</h3>
+ <h3><span id="title"></span> dependencies</h3>
</div>
<div class="modal-body">
- <p><strong class="layer-name"></strong> depends on some layers that are not added to your project. Select the ones you want to add:</p>
+ <p id="body-text"> <strong id="layer-name"></strong> depends on some layers that are not added to your project. Select the ones you want to add:</p>
<ul class="unstyled" id="dependencies_list">
</ul>
</div>
@@ -18,9 +18,20 @@
</div>
<script>
-function show_layer_deps_modal(projectId, layer, dependencies, successAdd) {
+function show_layer_deps_modal(projectId, layer, dependencies, title, body, addToProject, successAdd) {
// update layer name
- $('.layer-name').text(layer.name);
+ if (title) {
+ $('#dependencies_modal #title').text(title);
+ } else {
+ $('#dependencies_modal #title').text(layer.name);
+ }
+
+ if (body) {
+ $("#dependencies_modal #body-text").html(body);
+ } else {
+ $("#dependencies_modal #layer-name").text(layer.name);
+ }
+
var deplistHtml = "";
for (var i = 0; i < dependencies.length; i++) {
deplistHtml += "<li><label class=\"checkbox\"><input name=\"dependencies\" value=\"";
@@ -31,7 +42,13 @@ function show_layer_deps_modal(projectId, layer, dependencies, successAdd) {
}
$('#dependencies_list').html(deplistHtml);
- var selected = [layer.id];
+ var selected = [];
+ /* -1 is a special dummy Id which we use when the layer isn't yet in the
+ * system, normally we would add the current layer to the selection.
+ */
+ if (layer.id != -1)
+ selected.push(layer.id);
+
var layer_link_list = "<a href='"+layer.url+"'>"+layer.name+"</a>";
$("#dependencies_modal_form").submit(function (e) {
@@ -54,15 +71,20 @@ function show_layer_deps_modal(projectId, layer, dependencies, successAdd) {
$('#dependencies_modal').modal('hide');
- var editProjectUrl = "{% url 'xhr_projectedit' project.id %}";
- libtoaster.editProject(editProjectUrl, projectId, { 'layerAdd': selected.join(",") }, function () {
- if (successAdd) {
- successAdd(selected);
- }
- }, function () {
- console.log ("Adding layers to project failed");
- });
+ if (addToProject) {
+ var editProjectUrl = "{% url 'xhr_projectedit' project.id %}";
+ libtoaster.editProject(editProjectUrl, projectId, { 'layerAdd': selected.join(",") }, function () {
+ if (successAdd) {
+ successAdd(selected);
+ }
+ }, function () {
+ console.log ("Adding layers to project failed");
+ });
+ } else {
+ successAdd(selected);
+ }
});
+
$('#dependencies_modal').modal('show');
}
</script>
diff --git a/lib/toaster/toastergui/views.py b/lib/toaster/toastergui/views.py
index ec055d3..dd43080 100755
--- a/lib/toaster/toastergui/views.py
+++ b/lib/toaster/toastergui/views.py
@@ -2253,6 +2253,8 @@ if toastermain.settings.MANAGED:
not request.POST.has_key('project_id')):
return HttpResponse(jsonfilter({"error": "Missing parameters; requires vcs_url, name, git_ref and project_id"}), content_type = "application/json")
+ layers_added = [];
+
# Rudimentary check for any possible html tags
if "<" in request.POST:
return HttpResponse(jsonfilter({"error": "Invalid character <"}), content_type = "application/json")
@@ -2315,9 +2317,12 @@ if toastermain.settings.MANAGED:
# if the project now contains the exact
# dependency already (like modified on another page)
try:
- ProjectLayer.objects.get_or_create(layercommit=layer_dep_obj, project=prj)
+ prj_layer, prj_layer_created = ProjectLayer.objects.get_or_create(layercommit=layer_dep_obj, project=prj)
except:
- pass
+ continue
+
+ if prj_layer_created:
+ layers_added.append(Layer.objects.get(id=layer_dep_obj.layer_id).name)
# If an old layer version exists in our project then remove it
@@ -2337,7 +2342,7 @@ if toastermain.settings.MANAGED:
return HttpResponse(jsonfilter({"error": "Uncaught error: Could not create layer version"}), content_type = "application/json")
- return HttpResponse(jsonfilter({"error": "ok"}), content_type = "application/json")
+ return HttpResponse(jsonfilter({"error": "ok", "layers_added": layers_added}), content_type = "application/json")
--
1.9.1
More information about the bitbake-devel
mailing list