[PATCH conductor] BZ790830: "Disable" upload button after it has been pressed on images#show

ifarkas at redhat.com ifarkas at redhat.com
Thu Feb 16 16:12:30 UTC 2012


From: Imre Farkas <ifarkas at redhat.com>

https://bugzilla.redhat.com/show_bug.cgi?id=790830

In some cases when a user pushes an image and the page reload happens even before
imagefactory would start the pushing operation and the Upload button displayed
incorrectly. This patch solves this issue by displaying a label for notification.
---
 src/app/controllers/images_controller.rb          |    2 ++
 src/app/controllers/provider_images_controller.rb |    4 +++-
 src/app/views/images/show.html.haml               |   12 ++++++++----
 src/config/locales/en.yml                         |    1 +
 4 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/src/app/controllers/images_controller.rb b/src/app/controllers/images_controller.rb
index 41108c5..3bc1240 100644
--- a/src/app/controllers/images_controller.rb
+++ b/src/app/controllers/images_controller.rb
@@ -37,6 +37,8 @@ class ImagesController < ApplicationController
 
   def show
     @image = Aeolus::Image::Warehouse::Image.find(params[:id])
+    @push_started = params[:push_started] == 'true'
+    @pushed_target_image_id = params[:pushed_target_image_id]
     if @image.imported?
       begin
         # For an imported image, we only want to show the actual provider account
diff --git a/src/app/controllers/provider_images_controller.rb b/src/app/controllers/provider_images_controller.rb
index 54094dc..60fabe5 100644
--- a/src/app/controllers/provider_images_controller.rb
+++ b/src/app/controllers/provider_images_controller.rb
@@ -29,6 +29,7 @@ class ProviderImagesController < ApplicationController
     begin
       if @provider_image.save
         flash[:notice] = t('provider_images.flash.notice.upload_start')
+        @push_started = true
       else
         flash[:warning] = t('provider_images.flash.warning.upload_failed')
       end
@@ -36,7 +37,8 @@ class ProviderImagesController < ApplicationController
       logger.error "Caught exception importing image: #{e.message}"
       flash[:warning] = t('provider_images.flash.warning.upload_failed')
     end
-    redirect_to image_path(params[:image_id], :build => params[:build_id])
+    redirect_to image_path(params[:image_id], :build => params[:build_id], :push_started => @push_started,
+                           :pushed_target_image_id => @push_started ? @provider_image.target_image_id : nil)
   end
 
   def destroy
diff --git a/src/app/views/images/show.html.haml b/src/app/views/images/show.html.haml
index e26a720..d36d06e 100644
--- a/src/app/views/images/show.html.haml
+++ b/src/app/views/images/show.html.haml
@@ -77,10 +77,14 @@
                         - if timg and b = @builder.find_active_push(timg.id, account.provider.name, account.credentials_hash['username'])
                           = label_tag b.status
                         - elsif timg and not pimg and @build and @build.id == @latest_build
-                          = button_to t('.upload'), image_provider_images_path(@image.id, :build_id => @build.id, :target_image_id => timg.id, :account_id => account.id), :method => :post, :class => 'upload_image'
-                          - failed_push_count = @builder.failed_push_count(timg.id, account.provider.name, account.credentials_hash['username'])
-                          - if failed_push_count > 0
-                            = t('images.show.failed_push_attempts', :count => failed_push_count )
+                          - if @push_started && @pushed_target_image_id == timg.id
+                            .light
+                              = t('images.show.push_started')
+                          - else
+                            = button_to t('.upload'), image_provider_images_path(@image.id, :build_id => @build.id, :target_image_id => timg.id, :account_id => account.id), :method => :post, :class => 'upload_image'
+                            - failed_push_count = @builder.failed_push_count(timg.id, account.provider.name, account.credentials_hash['username'])
+                            - if failed_push_count > 0
+                              = t('images.show.failed_push_attempts', :count => failed_push_count )
                         - elsif pimg
                           = button_to "", image_provider_image_path(@image.id, pimg.id), :method => :delete, :class => 'delete_image'
                         - else
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index ef7b615..1694844 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -762,6 +762,7 @@ en:
       failed_push_attempts:
         one: '1 failed push attempt'
         other: '%{count} failed push attempts'
+      push_started: 'Push is about to start'
     flash:
       notice:
         deleted: Image Deleted
-- 
1.7.6.5




More information about the aeolus-devel mailing list