From eba5632ae8349a5bf96af180c193dcdfcb2670e3 Mon Sep 17 00:00:00 2001
From: Sebastião Guerra <sebastiao.luiz.guerra@gmail.com>
Date: Thu, 3 Sep 2026 10:03:10 -0300
Subject: Krusader: address Lzip review feedback
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Sebastião Guerra <sebastiao.luiz.guerra@gmail.com>
---
 src/app/Konfigurator/kgprotocols.cpp           |  72 -----------------
 src/app/VFS/arc_vfs.cpp                        |   4 +-
 src/app/VFS/krarchandler.cpp                   |   1 -
 src/krArc/krarc.cpp                            |   1 -
 src/tdeconf_update/CMakeLists.txt              |   9 ++-
 src/tdeconf_update/krusader_lzip_protocols.sh  | 108 +++++++++++++++++++++++++
 src/tdeconf_update/krusader_lzip_protocols.upd |   5 ++
 7 files changed, 123 insertions(+), 77 deletions(-)
 create mode 100755 src/tdeconf_update/krusader_lzip_protocols.sh
 create mode 100644 src/tdeconf_update/krusader_lzip_protocols.upd

diff --git a/src/app/Konfigurator/kgprotocols.cpp b/src/app/Konfigurator/kgprotocols.cpp
index 598b47d..5dc082f 100644
--- a/src/app/Konfigurator/kgprotocols.cpp
+++ b/src/app/Konfigurator/kgprotocols.cpp
@@ -408,8 +408,6 @@ bool KgProtocols::apply()
 
 void KgProtocols::init()
 {
-  const TQString lzipMigrationKey = "Lzip Tar Routing Initialized";
-
   if( !krConfig->groupList().contains( "Protocols" ) )
   {
     krConfig->setGroup( "Protocols" );
@@ -417,77 +415,7 @@ void KgProtocols::init()
     krConfig->writeEntry( "Mimes For iso",     defaultIsoMimes );
     krConfig->writeEntry( "Mimes For krarc",   defaultKrarcMimes );
     krConfig->writeEntry( "Mimes For tar",     defaultTarMimes );
-    krConfig->writeEntry( lzipMigrationKey, true );
-    return;
-  }
-
-  krConfig->setGroup( "Protocols" );
-
-  if( krConfig->readBoolEntry( lzipMigrationKey, false ) )
-    return;
-
-  TQStringList protList =
-      krConfig->readListEntry( "Handled Protocols" );
-
-  bool changed = false;
-
-  // tar.lz/tlz must use the tar TDEIO slave. Remove the mapping
-  // from krarc if it was present in an older configuration.
-  if( protList.contains( "krarc" ) )
-  {
-    TQStringList krarcMimes =
-        krConfig->readListEntry( "Mimes For krarc" );
-
-    if( krarcMimes.contains( "application/x-tlz" ) )
-    {
-      krarcMimes.remove( "application/x-tlz" );
-      krConfig->writeEntry( "Mimes For krarc", krarcMimes );
-      changed = true;
-    }
   }
-
-  bool lzipMapped = false;
-  bool tlzMapped = false;
-
-  for( TQStringList::Iterator it = protList.begin();
-       it != protList.end(); ++it )
-  {
-    TQStringList mimes =
-        krConfig->readListEntry(
-            TQString( "Mimes For %1" ).arg( *it ) );
-
-    if( mimes.contains( "application/x-lzip" ) )
-      lzipMapped = true;
-
-    if( mimes.contains( "application/x-tlz" ) )
-      tlzMapped = true;
-  }
-
-  // Preserve custom mappings. Only add a MIME type when it is
-  // currently not assigned to any handled protocol.
-  if( !lzipMapped && protList.contains( "krarc" ) )
-  {
-    TQStringList mimes =
-        krConfig->readListEntry( "Mimes For krarc" );
-    mimes.append( "application/x-lzip" );
-    krConfig->writeEntry( "Mimes For krarc", mimes );
-    changed = true;
-  }
-
-  if( !tlzMapped && protList.contains( "tar" ) )
-  {
-    TQStringList mimes =
-        krConfig->readListEntry( "Mimes For tar" );
-    mimes.append( "application/x-tlz" );
-    krConfig->writeEntry( "Mimes For tar", mimes );
-    changed = true;
-  }
-
-  krConfig->writeEntry( lzipMigrationKey, true );
-  krConfig->sync();
-
-  if( changed )
-    KrServices::clearProtocolCache();
 }
 
 #include "kgprotocols.moc"
diff --git a/src/app/VFS/arc_vfs.cpp b/src/app/VFS/arc_vfs.cpp
index d883bdc..3102c7f 100644
--- a/src/app/VFS/arc_vfs.cpp
+++ b/src/app/VFS/arc_vfs.cpp
@@ -782,8 +782,8 @@ void arc_vfs::parseLine(TQString line, TQFile* temp){
     nextWord(line);				// ratio or saved
     name = nextWord(line,'\n');
     if(name.contains('/')) name = name.mid(name.findRev('/')+1,name.length());
-    if( vfs_type == "lzip" && name.endsWith(".lz") )
-      name.truncate(name.length() - 3);
+    if( vfs_type == "lzip" )
+      name = name.left(name.findRev('.'));
     perm  = KRpermHandler::mode2TQString(stat_p.st_mode) ;
     owner = KRpermHandler::user2uid(qfi.owner());
     group = KRpermHandler::group2gid(qfi.group());
diff --git a/src/app/VFS/krarchandler.cpp b/src/app/VFS/krarchandler.cpp
index 06818ab..0ebea38 100644
--- a/src/app/VFS/krarchandler.cpp
+++ b/src/app/VFS/krarchandler.cpp
@@ -619,7 +619,6 @@ bool KRarcHandler::isArchive(const KURL& url) {
 TQString KRarcHandler::getType( bool &encrypted, TQString fileName, TQString mime, bool checkEncrypted ) {
 	TQString result = detectArchive( encrypted, fileName, checkEncrypted );
 
-
 	if( result.isNull() )
 		result = mime;
 	else
diff --git a/src/krArc/krarc.cpp b/src/krArc/krarc.cpp
index 9097c56..5b1b8e8 100644
--- a/src/krArc/krarc.cpp
+++ b/src/krArc/krarc.cpp
@@ -678,7 +678,6 @@ bool tdeio_krarcProtocol::setArcFile(const KURL& url){
 	arcPath = arcFile->url().path(-1);
 	arcType = detectArchive( encrypted, arcPath );
 
-
 	if( arcType == "tbz" )
 		arcType = "bzip2";
 	else if( arcType == "tgz" )
diff --git a/src/tdeconf_update/CMakeLists.txt b/src/tdeconf_update/CMakeLists.txt
index 79c95f9..48690d0 100644
--- a/src/tdeconf_update/CMakeLists.txt
+++ b/src/tdeconf_update/CMakeLists.txt
@@ -1,6 +1,13 @@
 ##### update files
 
 install(
-  FILES krusader_tqt_selection.upd
+  FILES
+    krusader_tqt_selection.upd
+    krusader_lzip_protocols.upd
+  DESTINATION ${DATA_INSTALL_DIR}/tdeconf_update
+)
+
+install(
+  PROGRAMS krusader_lzip_protocols.sh
   DESTINATION ${DATA_INSTALL_DIR}/tdeconf_update
 )
diff --git a/src/tdeconf_update/krusader_lzip_protocols.sh b/src/tdeconf_update/krusader_lzip_protocols.sh
new file mode 100755
index 0000000..ae937fb
--- /dev/null
+++ b/src/tdeconf_update/krusader_lzip_protocols.sh
@@ -0,0 +1,108 @@
+#!/bin/sh
+
+awk '
+function trim(value) {
+  sub(/^[[:space:]]+/, "", value)
+  sub(/[[:space:]]+$/, "", value)
+  return value
+}
+
+function has_item(list, item, count, parts, i) {
+  count = split(list, parts, ",")
+  for (i = 1; i <= count; ++i)
+    if (trim(parts[i]) == item)
+      return 1
+  return 0
+}
+
+function remove_item(list, item, count, parts, i, result, value) {
+  count = split(list, parts, ",")
+  result = ""
+
+  for (i = 1; i <= count; ++i) {
+    value = trim(parts[i])
+
+    if (value == "" || value == item)
+      continue
+
+    result = result (result == "" ? "" : ",") value
+  }
+
+  return result
+}
+
+function append_item(list, item) {
+  if (has_item(list, item))
+    return list
+
+  return list == "" ? item : list "," item
+}
+
+{
+  lines[++line_count] = $0
+  equals = index($0, "=")
+
+  if (equals > 0) {
+    keys[line_count] = substr($0, 1, equals - 1)
+    values[line_count] = substr($0, equals + 1)
+
+    if (keys[line_count] == "Handled Protocols")
+      handled_protocols = values[line_count]
+    else if (keys[line_count] == "Mimes For krarc")
+      krarc_line = line_count
+    else if (keys[line_count] == "Mimes For tar")
+      tar_line = line_count
+  }
+}
+
+END {
+  krarc_enabled = has_item(handled_protocols, "krarc")
+  tar_enabled = has_item(handled_protocols, "tar")
+
+  # Remove the temporary tlz -> krarc mapping used by an earlier
+  # version of the Lzip implementation.
+  if (krarc_enabled && krarc_line)
+    values[krarc_line] = remove_item(values[krarc_line], "application/x-tlz")
+
+  lzip_mapped = 0
+  tlz_mapped = 0
+
+  # Preserve user-defined protocol mappings.
+  for (i = 1; i <= line_count; ++i) {
+    if (keys[i] ~ /^Mimes For /) {
+      if (has_item(values[i], "application/x-lzip"))
+        lzip_mapped = 1
+
+      if (has_item(values[i], "application/x-tlz"))
+        tlz_mapped = 1
+    }
+  }
+
+  if (krarc_enabled && !lzip_mapped) {
+    if (krarc_line)
+      values[krarc_line] = append_item(values[krarc_line], "application/x-lzip")
+    else {
+      ++line_count
+      keys[line_count] = "Mimes For krarc"
+      values[line_count] = "application/x-lzip"
+    }
+  }
+
+  if (tar_enabled && !tlz_mapped) {
+    if (tar_line)
+      values[tar_line] = append_item(values[tar_line], "application/x-tlz")
+    else {
+      ++line_count
+      keys[line_count] = "Mimes For tar"
+      values[line_count] = "application/x-tlz"
+    }
+  }
+
+  for (i = 1; i <= line_count; ++i) {
+    if (keys[i] != "")
+      print keys[i] "=" values[i]
+    else
+      print lines[i]
+  }
+}
+'
diff --git a/src/tdeconf_update/krusader_lzip_protocols.upd b/src/tdeconf_update/krusader_lzip_protocols.upd
new file mode 100644
index 0000000..a48dd5a
--- /dev/null
+++ b/src/tdeconf_update/krusader_lzip_protocols.upd
@@ -0,0 +1,5 @@
+Id=krusader_lzip_protocols
+File=krusaderrc
+Group=Protocols
+Options=overwrite
+Script=krusader_lzip_protocols.sh,sh
-- 
cgit v1.2.3

