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

ifarkas at redhat.com ifarkas at redhat.com
Wed Feb 22 09:50:16 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          |    3 +++
 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, 15 insertions(+), 5 deletions(-)

diff --git a/src/app/controllers/images_controller.rb b/src/app/controllers/images_controller.rb
index f37d117..0c6b350 100644
--- a/src/app/controllers/images_controller.rb
+++ b/src/app/controllers/images_controller.rb
@@ -38,6 +38,9 @@ class ImagesController < ApplicationController
   def show
     @image = Aeolus::Image::Warehouse::Image.find(params[:id])
     @environment = PoolFamily.where('name' => @image.environment).first
+    @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 82c00f5..c462772 100644
--- a/src/app/views/images/show.html.haml
+++ b/src/app/views/images/show.html.haml
@@ -85,10 +85,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('.push'), 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 addb68e..fdbb2aa 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -773,6 +773,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