Normally we skip doing page counts on index pages when there aren't any search filters. This is on the assumption that most index pages have more than 1000 pages (20,000 results), so it's not worth counting them exactly. This isn't always true, so here we turn on full counts on certain index pages known to be small.
72 lines
2.0 KiB
Ruby
72 lines
2.0 KiB
Ruby
class UploadsController < ApplicationController
|
|
before_action :member_only, except: [:index, :show]
|
|
respond_to :html, :xml, :json, :js
|
|
skip_before_action :verify_authenticity_token, only: [:preprocess]
|
|
|
|
def new
|
|
@source = Sources::Strategies.find(params[:url], params[:ref]) if params[:url].present?
|
|
@upload_notice_wiki = WikiPage.titled(Danbooru.config.upload_notice_wiki_page).first
|
|
@upload, @remote_size = UploadService::ControllerHelper.prepare(
|
|
url: params[:url], ref: params[:ref]
|
|
)
|
|
respond_with(@upload)
|
|
end
|
|
|
|
def batch
|
|
@url = params.dig(:batch, :url) || params[:url]
|
|
@source = Sources::Strategies.find(@url, params[:ref]) if @url.present?
|
|
respond_with(@source)
|
|
end
|
|
|
|
def image_proxy
|
|
resp = ImageProxy.get_image(params[:url])
|
|
send_data resp.body, :type => resp.content_type, :disposition => "inline"
|
|
end
|
|
|
|
def index
|
|
@uploads = Upload.paginated_search(params, count_pages: true).includes(:post, :uploader)
|
|
respond_with(@uploads)
|
|
end
|
|
|
|
def show
|
|
@upload = Upload.find(params[:id])
|
|
respond_with(@upload) do |format|
|
|
format.html do
|
|
if @upload.is_completed? && @upload.post_id
|
|
redirect_to(post_path(@upload.post_id))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def preprocess
|
|
@upload, @remote_size = UploadService::ControllerHelper.prepare(
|
|
url: upload_params[:source], file: upload_params[:file], ref: upload_params[:referer_url]
|
|
)
|
|
render body: nil
|
|
end
|
|
|
|
def create
|
|
@service = UploadService.new(upload_params)
|
|
@upload = @service.start!
|
|
|
|
if @service.warnings.any?
|
|
flash[:notice] = @service.warnings.join(".\n \n")
|
|
end
|
|
|
|
respond_with(@upload)
|
|
end
|
|
|
|
private
|
|
|
|
def upload_params
|
|
permitted_params = %i[
|
|
file source tag_string rating status parent_id artist_commentary_title
|
|
artist_commentary_desc include_artist_commentary referer_url
|
|
md5_confirmation as_pending
|
|
]
|
|
|
|
params.require(:upload).permit(permitted_params)
|
|
end
|
|
end
|