### Summary

unarchive requires zipinfo:

fatal: [_[...]_]: FAILED! => {"changed": false, "msg": "Failed to find handler for \"_[...]_.zip\". Make sure the required command to extract the file is installed. Unable to find required 'zipinfo' binary in the path. Command \"/usr/bin/tar\" detected as tar type None. GNU tar required."}


OpenELEC has no zipinfo (see #39029 and #59556) but `unzip -Z` seems to work. Would it not be possible to fall back to `unzip -Z` if zipinfo is not available and fails only if both are not working?

See also:
- #75361 
- #74632
- #36442

This could for example solved like this:
```diff
diff --git a/lib/ansible/modules/unarchive.py b/lib/ansible/modules/unarchive.py
index d1ccd01066..009e73b466 100644
--- a/lib/ansible/modules/unarchive.py
+++ b/lib/ansible/modules/unarchive.py
@@ -280,7 +280,7 @@ class ZipArchive(object):
         self.includes = []
         self.include_files = self.module.params['include']
         self.cmd_path = None
-        self.zipinfo_cmd_path = None
+        self.zipinfo_cmd = None
         self._files_in_archive = []
         self._infodict = dict()
 
@@ -374,7 +374,7 @@ class ZipArchive(object):
 
     def is_unarchived(self):
         # BSD unzip doesn't support zipinfo listings with timestamp.
-        cmd = [self.zipinfo_cmd_path, '-T', '-s', self.src]
+        cmd = self.zipinfo_cmd + ['-T', '-s', self.src]
 
         if self.excludes:
             cmd.extend(['-x', ] + self.excludes)
@@ -695,19 +695,16 @@ class ZipArchive(object):
         return dict(cmd=cmd, rc=rc, out=out, err=err)
 
     def can_handle_archive(self):
-        binaries = (
-            ('unzip', 'cmd_path'),
-            ('zipinfo', 'zipinfo_cmd_path'),
-        )
-        missing = []
-        for b in binaries:
-            try:
-                setattr(self, b[1], get_bin_path(b[0]))
-            except ValueError:
-                missing.append(b[0])
+        try:
+            self.cmd_path = get_bin_path('unzip')
+        except ValueError:
+            return False, "Unable to find required 'unzip' binary in the path"
 
-        if missing:
-            return False, "Unable to find required '{missing}' binary in the path.".format(missing="' or '".join(missing))
+        try:
+            self.zipinfo_cmd = [get_bin_path('zipinfo_cmd')]
+        except ValueError:
+            # fallback to unzip -Z
+            self.zipinfo_cmd = [self.cmd_path, "-Z"]
 
         cmd = [self.cmd_path, '-l', self.src]
         rc, out, err = self.module.run_command(cmd)
```

### Issue Type

Feature Idea

### Component Name

unarchive

### Additional Information

```yaml
- name: Unarchive plugin
  ansible.builtin.unarchive:
    src: "file.zip"
    dest: "dir"
    copy: no

```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
elif stat.S_ISREG(st.st_mode) and timestamp < st.st_mtime:
                        
                        out += 'File %s is newer, excluding file\n' % path
                        self.excludes.append(path)
                        continue
                else:
                    if timestamp != st.st_mtime:
                        change = True
                        self.includes.append(path)
                        err += 'File %s differs in mtime (%f vs %f)\n' % (path, timestamp, st.st_mtime)
                        itemized[4] = 't'
            
            if stat.S_ISREG(st.st_mode) and size != st.st_size:
                change = True
                err += 'File %s differs in size (%d vs %d)\n' % (path, size, st.st_size)
                itemized[3] = 's'
            
            if stat.S_ISREG(st.st_mode):
                crc = crc32(b_dest, self.io_buffer_size)
                if crc != self._crc32(path):
                    change = True
                    err += 'File %s differs in CRC32 checksum (0x%08x vs 0x%08x)\n' % (path, self._crc32(path), crc)
                    itemized[2] = 'c'
            
            
            if ftype != 'L':
                
                if self.file_args['mode']:
                    if isinstance(self.file_args['mode'], int):
                        mode = self.file_args['mode']