diff --git a/app/controllers/disk_wizard_controller.rb b/app/controllers/disk_wizard_controller.rb
index b7ca4bc..e12f158 100644
--- a/app/controllers/disk_wizard_controller.rb
+++ b/app/controllers/disk_wizard_controller.rb
@@ -53,6 +53,10 @@ def manage_disk
if request.post?
self.user_selections = {fs_type: fs_type, format: format, path: partition}
end
+ if partition.match(/^\/dev/).blank?
+ device = Device.find_with_unallocated(user_selections['disk'])
+ @selected_partiton = (device.partitions.select{|part| part.identifier == user_selections['path'] }).first
+ end
end
# Expected key:values in @params:
@@ -64,7 +68,8 @@ def confirmation
unless params[:fs_type].blank?
# create new partition with this file system
fs_type = params[:fs_type].to_i
- self.user_selections = {fs_type: fs_type}
+ partition_divider = params[:partition_divider].to_i
+ self.user_selections = {fs_type: fs_type, partition_divider: partition_divider}
end
option = params[:option]
label = params[:label].blank? ? nil : params[:label]
@@ -131,7 +136,8 @@ def process_disk
end
if option.include?(CREATE_OPTION)
- para = {identifier: user_selections['identifier'], path: user_selections['disk'], fs_type: user_selections['fs_type']}
+ para = {identifier: user_selections['identifier'], path: user_selections['disk'],
+ fs_type: user_selections['fs_type'], partition_divider: user_selections['partition_divider']}
job_name = :create_new_partition_job
DebugLogger.info "|#{self.class.name}|>|#{__method__}|:Job_name = #{job_name}, para = #{para}"
jobs_queue.enqueue({job_name: job_name, job_para: para})
diff --git a/app/views/disk_wizard/confirmation.html.erb b/app/views/disk_wizard/confirmation.html.erb
index d97a528..3672e26 100644
--- a/app/views/disk_wizard/confirmation.html.erb
+++ b/app/views/disk_wizard/confirmation.html.erb
@@ -63,7 +63,7 @@
create Partition
- <%= number_to_human_size @selected_disk.size %>
+ <%= number_to_human_size @selected_disk.size/user_selections['partition_divider'] %>
Partition Size
<% elsif option == DiskWizardController::NOTHING_OPTION %>
diff --git a/app/views/disk_wizard/manage_disk.html.erb b/app/views/disk_wizard/manage_disk.html.erb
index 7af5448..9b5a5cc 100644
--- a/app/views/disk_wizard/manage_disk.html.erb
+++ b/app/views/disk_wizard/manage_disk.html.erb
@@ -24,19 +24,23 @@
$( document ).ready( function () {
if ($('.create_new_partition').is(':checked')) {
$('#fs_selector').slideDown();
+ $('#size_selector').slideDown();
$('#mount_after_creation').slideDown();
} else {
$('#fs_selector').slideUp();
$('#mount_after_creation').slideUp();
+ $('#size_selector').slideUp();
}
});
$(function () {
$('.create_new_partition, .nothing').change(function () {
if ($('.create_new_partition').is(':checked')) {
$('#fs_selector').slideDown();
+ $('#size_selector').slideDown();
$('#mount_after_creation').slideDown();
} else {
$('#fs_selector').slideUp();
+ $('#size_selector').slideUp();
$('#mount_after_creation').slideUp();
}
});
@@ -90,16 +94,25 @@
+
+
+ -
+ Please select a Partition size
+
+ <%= select_tag :partition_divider, options_for_select([
+ ["#{number_to_human_size @selected_partiton.size}", 1],
+ ["#{number_to_human_size (@selected_partiton.size/2)}", 2],
+ ["#{number_to_human_size (@selected_partiton.size/4)}", 4]], 0), class: "form-control" %>
+
+
-
-
- -
- Please select a file system type
-
- <%= select_tag :fs_type, options_for_select([["Ext4", 0], ["Ext3", 1], ["NTFS", 2], ["FAT32", 3]], 0), class: "form-control" %>
+
+ -
+ Please select a file system type
+
+ <%= select_tag :fs_type, options_for_select([["Ext4", 0], ["Ext3", 1], ["NTFS", 2], ["FAT32", 3]], 0), class: "form-control" %>
-
-
+
diff --git a/lib/modules/operation.rb b/lib/modules/operation.rb
index c827bb0..7b82e86 100644
--- a/lib/modules/operation.rb
+++ b/lib/modules/operation.rb
@@ -72,9 +72,15 @@ def create_new_partition_job params_hash
raise "We don't support GPT yet" if device.partition_table != "msdos"
raise "We don't support extended partitions yet, The number of partitions >= 3" if device.partition_count > 2
DebugLogger.info "|#{self.class.name}|>|#{__method__}|:Params_hash #{params_hash}"
+
device = Device.find_with_unallocated params_hash[:path]
partition = device.partitions.select { |part| part.identifier == params_hash[:identifier] }.first
- partition_size = {start_sector: partition.start_sector, end_sector: partition.end_sector}
+ partition_divider = params_hash[:partition_divider].to_i
+ raise "Unknown partition size" unless [1, 2, 4].include? partition_divider
+
+ # calculate the position of the end sector
+ new_end_sector = partition.start_sector.to_i + ( (partition.end_sector.to_i - partition.start_sector.to_i) / partition_divider)
+ partition_size = {start_sector: partition.start_sector, end_sector: new_end_sector}
partition = device.create_partition partition_size
filesystem = {fs_type: params_hash[:fs_type].to_i || 3 }
partition.format_job filesystem