hplip/hplip-find-driver.patch
DistroBaker 458652024f Merged update from upstream sources
This is an automated DistroBaker update from upstream sources.
If you do not know what this is about or would like to opt out,
contact the OSCI team.

Source: https://src.fedoraproject.org/rpms/hplip.git#613fa6c3de1332f7181b9f955f607dfad7ebbacb
2021-03-24 23:25:59 +00:00

164 lines
7.1 KiB
Diff

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, '')