summaryrefslogtreecommitdiff
path: root/hplip-find-driver.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-08-05 02:45:17 +0000
committerCoprDistGit <infra@openeuler.org>2024-08-05 02:45:17 +0000
commit92ff4cdf8c84e91584dd6076aa5b3c774ab0a622 (patch)
tree6ba01d84d85f00b380477077d920c341c3570b09 /hplip-find-driver.patch
parentd8ce4006ffe8011c16c265205aa330c52a0de0c1 (diff)
automatic import of hplipopeneuler24.03_LTS
Diffstat (limited to 'hplip-find-driver.patch')
-rw-r--r--hplip-find-driver.patch163
1 files changed, 163 insertions, 0 deletions
diff --git a/hplip-find-driver.patch b/hplip-find-driver.patch
new file mode 100644
index 0000000..f991967
--- /dev/null
+++ b/hplip-find-driver.patch
@@ -0,0 +1,163 @@
+diff --git a/prnt/cups.py b/prnt/cups.py
+index a9f410a..3783a60 100644
+--- a/prnt/cups.py
++++ b/prnt/cups.py
+@@ -489,78 +489,77 @@ def getPPDFile2(mq,model, ppds): # New PPD find
+ #Check if common ppd name is already given in models.dat(This is needed because in case of devices having more than one derivatives
+ #will have diffrent model name strings in device ID, because of which we don't get the common ppd name for search)
+ family_check=isfamilydrv(ppds)
+- family_class=getFamilyClassName(model)
++
+ model = models.normalizeModelName(model)
+- if family_check==0:
+- ppd_name = mq.get('ppd-name',0)
+- else:
+- ppd_name = mq.get('family-ppd',0)
+
+- if ppd_name == 0:
+- stripped_model = stripModel2(model)
+- else:
+- stripped_model = stripModel2(ppd_name)
++ ppd_name = mq.get('{}'.format('family-ppd' if family_check else 'ppd-name'), 0)
++
++ stripped_model = stripModel2(ppd_name) if ppd_name else stripModel2(model)
++
++ wanted_model = getFamilyClassName(model) if family_check else stripped_model
+
+ log.debug("Matching PPD list to model %s..." % stripped_model)
+
+ matches = []
+- if family_check ==0 :
+- for f in ppds:
+- match = ppd_pat.match(f)
+- if match is not None:
+- if match.group(1) == stripped_model:
+- log.debug("Found match: %s" % f)
+- try:
+- pdls = match.group(2).split('-')
+- except AttributeError:
+- pdls = []
+- if (prop.hpcups_build and 'hpijs' not in f) or \
+- ((prop.hpijs_build and 'hpijs' in pdls) or (prop.hpcups_build and 'hpijs' not in pdls)) or \
+- ('ps' in pdls) or ('pdf' in pdls):
+- matches.append((f, [p for p in pdls if p and p != 'hpijs']))
+- else:
+- for f in ppds:
+- match = ppd_pat1.match(f)
+- if match is not None:
+- if match.group(1) == family_class:
+- log.debug("Found match: %s" % f)
+- try:
+- pdls = match.group(2).split('-')
+- except AttributeError:
+- pdls = []
+- if (prop.hpcups_build and 'hpijs' not in f) or \
+- ((prop.hpijs_build and 'hpijs' in pdls) or (prop.hpcups_build and 'hpijs' not in pdls)) or \
+- ('ps' in pdls) or ('pdf' in pdls):
+- matches.append((f, [p for p in pdls if p and p != 'hpijs']))
+- log.debug(matches)
+- num_matches = len(matches)
++ for f in ppds:
++ # ignore foomatic and gutenprint drivers
++ if 'foomatic' in f or 'gutenprint' in f:
++ continue
++
++ # see if driver type is in driver name
++ driver_types = []
++ if 'hpcups' in f:
++ driver_types.append('hpcups')
++ if 'hpijs' in f:
++ driver_types.append('hpijs')
++
++
++ ppd_filename = f.rsplit('/', 1)[1].split('.')[0].replace('hp-', '')
++
++ if not ppd_filename:
++ continue
++
++ # we need to sanitize the end of filename - there can be a driver type (-hpijs, -hpcups),
++ # pdl name (-zjstream, -pdf, -ps etc.) or the device can just have '-' in their name
++ # (HP Photosmart Premium C309g-m).
++ # So if we don't know the name after '-', take it as part of device name.
++ # If we know them either like driver type of PDL, remove the string from ppd name
++ # so we can compare it with stripped model
++ pdl_candidates = []
++ pdl_candidates = ppd_filename.split('-')[1:]
++
++ pdls = []
++ ppd_model = ppd_filename
++
++ for pdl in pdl_candidates:
++ if pdl in ['hpijs', 'hpcups']:
++ ppd_model=ppd_model.replace('-{}'.format(pdl), '')
++ continue
+
+- if num_matches == 0:
+- log.debug("No PPD found for model %s using new algorithm. Trying old algorithm..." % stripped_model)
+- #Using Old algo, ignores the series keyword in ppd searching.
+- matches2 = list(getPPDFile(stripModel(stripped_model), ppds).items())
+- log.debug(matches2)
+- num_matches2 = len(matches2)
+- if num_matches2:
+- for f, d in matches2:
+- match = ppd_pat.match(f)
+- if match is not None:
+- log.debug("Found match: %s" % f)
+- try:
+- pdls = match.group(2).split('-')
+- except AttributeError:
+- pdls = []
++ if not models.PDL_TYPES.get(pdl):
++ log.debug('Unknown PDL named \'{}\' - can be a new PDL or '
++ 'just a part of device name. Assume it is '
++ 'a part of device name.'.format(pdl))
++ else:
++ pdls.append(pdl)
++ ppd_model=ppd_model.replace('-{}'.format(pdl), '')
++
++ if ppd_model != wanted_model and ppd_model != '{}_series'.format(wanted_model):
++ continue
++
++ log.debug("Found match: %s" % f)
+
+- if (prop.hpcups_build and 'hpijs' not in f) or \
+- ((prop.hpijs_build and 'hpijs' in pdls) or (prop.hpcups_build and 'hpijs' not in pdls)) or \
+- ('ps' in pdls) or ('pdf' in pdls):
+- matches.append((f, [p for p in pdls if p and p != 'hpijs']))
++ if (prop.hpcups_build and 'hpijs' not in f) or \
++ ((prop.hpijs_build and 'hpijs' in driver_types) or (prop.hpcups_build and 'hpijs' not in driver_types)) or \
++ ('ps' in pdls) or ('pdf' in pdls):
++ matches.append((f, pdls, [d for d in driver_types if d and d != 'hpijs']))
+
+- log.debug(matches)
+- num_matches = len(matches)
++
++ log.debug(matches)
++ num_matches = len(matches)
+
+ if num_matches == 0:
+- log.error("No PPD found for model %s using old algorithm." % stripModel(stripped_model))
++ log.error("No PPD found for model %s." % stripModel(stripped_model))
+ return None
+
+ elif num_matches == 1:
+@@ -570,7 +569,7 @@ def getPPDFile2(mq,model, ppds): # New PPD find
+ # > 1
+ log.debug("%d matches found. Searching based on PDL: Host > PS,PDF > PCL/Other" % num_matches)
+ for p in [models.PDL_TYPE_HOST, models.PDL_TYPE_PS,models.PDL_TYPE_PDF, models.PDL_TYPE_PCL]:
+- for f, pdl_list in matches:
++ for f, pdl_list, driver_list in matches:
+ for x in pdl_list:
+ # default to HOST-based PDLs, as newly supported PDLs will most likely be of this type
+ if models.PDL_TYPES.get(x, models.PDL_TYPE_HOST) == p:
+@@ -579,8 +578,8 @@ def getPPDFile2(mq,model, ppds): # New PPD find
+
+ log.debug("%d matches found. Searching based on Filters: HPCUPS > HPIJS" % num_matches)
+ for p in ["hpcups","hpijs"]:
+- for f, pdl_list in matches:
+- if p in f:
++ for f, pdl_list, driver_list in matches:
++ if p in driver_list:
+ log.debug("Selecting PPD: %s" % (f))
+ return (f, '')
+