[4/8] extrahd.cgi: Store configured drives in a hash

Message ID 20230623040124.3826-4-stefan.schantl@ipfire.org
State Superseded
Headers
Series [1/8] extrahd.cgi: Add various perl functions deal with block devices |

Commit Message

Stefan Schantl June 23, 2023, 4:01 a.m. UTC
  Signed-off-by: Stefan Schantl <stefan.schantl@ipfire.org>
---
 html/cgi-bin/extrahd.cgi | 71 ++++++++++++++++++----------------------
 1 file changed, 32 insertions(+), 39 deletions(-)
  

Patch

diff --git a/html/cgi-bin/extrahd.cgi b/html/cgi-bin/extrahd.cgi
index dde4e7356..fc8685830 100644
--- a/html/cgi-bin/extrahd.cgi
+++ b/html/cgi-bin/extrahd.cgi
@@ -31,6 +31,9 @@  require "${General::swroot}/header.pl";
 my %extrahdsettings = ();
 my $errormessage = "";
 
+# Hash to store the configured drives.
+my %configured_drives;
+
 # SYSFS directory which contains all block device data.
 my $sysfs_block_dir = "/sys/class/block";
 
@@ -187,50 +190,26 @@  if ($errormessage) {
 ############################################################################################################################
 ############################################################################################################################
 
-	print <<END
-		<table border='0' width='600' cellspacing="0">
-END
-;
+&Header::openbox('100%', 'center', $Lang::tr{'extrahd detected drives'});
+
 	# Re-read mountpoints.
 	%mountpoints = &get_mountpoints();
 
 	# Read-in the device config file.
 	open( FILE, "< $devicefile" ) or die "Unable to read $devicefile";
-	my @configfile = <FILE>;
-	close FILE;
 
 	# Loop through the file content.
-	foreach my $entry (sort @configfile) {
-		my ($uuid, $fs, $path) = split( /\;/, $entry );
-		my $color="$Header::colourred";
-
-		# Check if the device is currently mounted.
-		if (&is_mounted($path)) {
-			$color=$Header::colourgreen;
-		}
+	while (<FILE>) {
+		# Cut the line into pieces.
+		my ($uuid, $fs, $path) = split( /\;/, $_ );
 
-		print <<END
-			<tr><td colspan="4">&nbsp;</td></tr>
-			<tr><td align='left'><font color=$color><b>$uuid</b></font></td>
-				<td align='left'>$fs</td>
-				<td align='left'>$path</td>
-				<td align='center'>
-					<form method='post' action='$ENV{'SCRIPT_NAME'}'>
-						<input type='hidden' name='DEVICE' value='$uuid' />
-						<input type='hidden' name='FS' value='$fs' />
-						<input type='hidden' name='PATH' value='$path' />
-						<input type='hidden' name='ACTION' value='$Lang::tr{'delete'}' />
-						<input type='image' alt='$Lang::tr{'delete'}' title='$Lang::tr{'delete'}' src='/images/delete.gif' />
-					</form></td></tr>
-END
-;
+		# Add the found entry to the hash of configured drives.
+		$configured_drives{$uuid} = $path;
 	}
-	print <<END
-		</table>
-END
-;
 
-&Header::openbox('100%', 'center', $Lang::tr{'extrahd detected drives'});
+	# Close the file handle.
+	close(FILE);
+
 	print <<END
 		<table border='0' width='600' cellspacing="0">
 END
@@ -270,21 +249,35 @@  END
 			# Get the mountpoint.
 			my $mountpoint = $mountpoints{$partition};
 
+			# If no mountpoint could be determined try to grab from
+			# configured drives.
+			unless($mountpoint) {
+				my $uuid = $uuids{$partition};
+
+				# Build uuid string.
+				$uuid = "UUID=" . $uuid;
+
+				# Try to obtain a possible moutpoint from configured drives.
+				$mountpoint = $configured_drives{$uuid} if ($configured_drives{$uuid});
+			}
+
+			# Check if the mountpoint is used as root or boot device.
 			if ($mountpoint eq "/" or $mountpoint =~ "^/boot") {
 				$disabled = "disabled";
+
+			# Check if it is mounted.
 			} elsif(&is_mounted($mountpoint)) {
 				$disabled = "disabled";
-			}
-
-			# Omit the used filesystem.
-			my $fs = $filesystems{$partition};
 
 			# Check if the device is used as swap.
-			if (&is_swap($partition)) {
+			} elsif (&is_swap($partition)) {
 				$disabled = "disabled";
 				$mountpoint = "swap";
 			}
 
+			# Omit the used filesystem.
+			my $fs = $filesystems{$partition};
+
 			print <<END
 
 			<form method='post' action='$ENV{'SCRIPT_NAME'}'>