diff --git a/app/controllers/admin/import_controller.rb b/app/controllers/admin/import_controller.rb index 65d2292..4647bb3 100644 --- a/app/controllers/admin/import_controller.rb +++ b/app/controllers/admin/import_controller.rb @@ -584,55 +584,49 @@ class Admin::ImportController < OrbitAdminController def rss2_galleries delete_import_file uri = URI.parse(params['url']) - # @@thread = Thread.new do - http = Net::HTTP.new(uri.host, uri.port) - request = Net::HTTP::Get.new(uri.request_uri) - response = http.request(request) - data = response.body - data = JSON.parse(data) - @@import_stats["total_images"] = data["total_images"].to_i - @@import_stats["current_status"] = 0 - @@import_stats["success"] = true - write_to_file - albums = data["albums"] - current_locale = I18n.locale - I18n.locale = :en - category = Category.where(:title => "RSS2 Gallery").first - I18n.locale = current_locale - if category.nil? - module_app = ModuleApp.find_by_key("gallery") - category = Category.new - category.title_translations = {"en" => "RSS2 Gallery", "zh_tw" => "RSS2畫廊"} - category.save - module_app.categories << category + + http = Net::HTTP.new(uri.host, uri.port) + request = Net::HTTP::Get.new(uri.request_uri) + response = http.request(request) + data = response.body + data = JSON.parse(data) + albums = data["albums"] + current_locale = I18n.locale + I18n.locale = :en + category = Category.where(:title => "RSS2 Gallery").first + I18n.locale = current_locale + if category.nil? + module_app = ModuleApp.find_by_key("gallery") + category = Category.new + category.title_translations = {"en" => "RSS2 Gallery", "zh_tw" => "RSS2畫廊"} + category.save + module_app.categories << category + end + @data_to_send = [] + albums.each do |album| + if Album.where(:rss2_id => album["albumid"]).count == 0 + newalbum = Album.new(:name_translations => {"en" => album["name"]["en"], "zh_tw" => album["name"]["zh_tw"]}, :description_translations => {"en" => album["description"]["en"], "zh_tw" => album["description"]["zh_tw"]},"rss2_id" => album["albumid"]) + newalbum.category_id = category.id + newalbum.save + else + newalbum = Album.where(:rss2_id => album["albumid"]).first end - albums.each do |album| - @@import_stats["current_album_id"] = album["albumid"] - write_to_file - if Album.where(:rss2_id => album["albumid"]).count == 0 - @@import_stats["current_album_name"] = album["name"]["zh_tw"] - write_to_file - newalbum = Album.new(:name_translations => {"en" => album["name"]["en"], "zh_tw" => album["name"]["zh_tw"]}, :description_translations => {"en" => album["description"]["en"], "zh_tw" => album["description"]["zh_tw"]},"rss2_id" => album["albumid"]) - newalbum.category_id = category.id - newalbum.save - images = album["images"] - if !images.blank? - images.each do |image| - if AlbumImage.where(:rss2_id => image["photoid"]).count == 0 - img = newalbum.album_images.new - img.description_translations = {"en" => image["description"]["en"], "zh_tw" => image["description"]["zh_tw"]} - img.remote_file_url = image["image"] - img.save - end - @@import_stats["current_status"] = @@import_stats["current_status"] + 1 - write_to_file - end - end - end - end - # end - # @@thread.join - # @@thread.abort_on_exception = true + images = album["images"] + images.each do |image| + @data_to_send << {"album_id" => newalbum.id.to_s,"album_name" => newalbum.name_translations["zh_tw"], "url" => image["image"], "description" => {"en" => image["description"]["en"], "zh_tw" => image["description"]["zh_tw"]},"photoid" => image["photoid"]} + end + end + render :json => {"images" => @data_to_send}.to_json + end + + def rss2_album_image + album = Album.find(params[:album_id]) + if AlbumImage.where(:rss2_id => params["photoid"]).count == 0 + img = album.album_images.new + img.description_translations = params["description"] + img.remote_file_url = params["url"] + img.save + end render :json => {"success" => true}.to_json end diff --git a/app/views/admin/import/index.html.erb b/app/views/admin/import/index.html.erb index eac1d1d..b1dc747 100644 --- a/app/views/admin/import/index.html.erb +++ b/app/views/admin/import/index.html.erb @@ -245,24 +245,56 @@ }) startCheckinglinksImportStatus(); } - + var gallery_data = null; var importGallery = function(){ $("#import-progress .bar").css('width','0%'); - $("#import-progress-text").html("Importing Galleries...
"); + $("#import-progress-text").html("Importing Galleries...
").delay(1000).html("Creating albums...
"); $.ajax({ type: "post", dataType: "json", url: '<%= admin_import_rss2_galleries_path %>', data : {"url" : url+'?module='+module} - }).done(function(){ + }).done(function(data){ + $("#import-progress-text").html("Importing Images...
"); + gallery_data = data.images; + importImagesForAlbums(0); }).fail(function(){ $("#import-progress-text").html("Importing failed, click on start to try again."); $("#alert-msg").text("There was an unknown error"); $(".alert-danger").removeClass("hide").show(); + }) - setTimeout("startCheckingGalleryImportStatus()",700); } + var importImagesForAlbums = function(number){ + var image = gallery_data[number], + total = gallery_data.length; + $("#import-progress-text").html("Importing Album " + image.album_name + "..." + (number + 1) + "/" + total + "
"); + $.ajax({ + type: "post", + url: "<%= admin_import_rss2_album_image_path %>", + dataType : "json", + data : image + }).done(function(status){ + if(status.success == true){ + var percent = ((number + 1) * 100) / total; + $("#import-progress .bar").css('width',percent + "%"); + if(number != (total - 1)){ + setTimeout(importImagesForAlbums(number + 1),300) + }else{ + $("#import-progress-text").html("Finished importing albums."); + } + } + }).fail(function(){ + $("#import-progress-text").html("Error importing album " + image.album_name); + $("#alert-msg").text("Error importing album " + image.album_name); + $(".alert-danger").removeClass("hide").show(); + }) + + } + + + var importMembers = function(){ $("#import-progress .bar").css('width', '0%'); $("#import-progress-text").html("Importing Member..
"); @@ -383,38 +415,6 @@ }) } - var startCheckingGalleryImportStatus = function(){ - $.ajax({ - type : "get", - dataType : "json", - data : {"module" : module}, - url : "<%= admin_import_get_import_status_path %>" - }).done(function(status){ - if(status.success == true){ - if(status.total_images != null){ - var percent = (status.current_status * 100) / status.total_images; - $("#import-progress .bar").css('width',percent + "%"); - $("#import-progress-text").html("Importing album " + status.current_album_name + " .. " + status.current_status + "/" + status.total_images + "Images
"); - } - if(status.total_images != status.current_status){ - setTimeout("startCheckingGalleryImportStatus()",700); - }else if(status.total_images == null){ - setTimeout("startCheckingGalleryImportStatus()",700); - }else{ - $("#import-progress-text").html("Finished importing gallery.
"); - } - }else if(status.success == false){ - $("#import-progress-text").html("Importing failed, click on start to try again."); - $("#alert-msg").text("Error importing album " + status.current_album_name + " ID : " + status.current_album_id) - $(".alert-danger").removeClass("hide").show(); - } - }).fail(function(){ - $("#import-progress-text").html("Importing failed, click on start to try again."); - $("#alert-msg").text("There was an unknown error"); - $(".alert-danger").removeClass("hide").show(); - }) - } - var importModule = function(m){ module = m; progress = 0; diff --git a/config/routes.rb b/config/routes.rb index eb9e1d2..8055990 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -220,6 +220,7 @@ Orbit::Application.routes.draw do post "import/rss2_pages" => "import#rss2_pages" get "import/get_import_status" => "import#get_import_status" post "import/rss2_galleries" => "import#rss2_galleries" + post "import/rss2_album_image" => "import#rss2_album_image" post "import/rss2_links" => "import#rss2_links" post "import/rss2_members" => "import#rss2_members" end