2020-10-15 10:26:13 +00:00
|
|
|
diff --git a/prnt/cups.py b/prnt/cups.py
|
2021-03-24 23:25:59 +00:00
|
|
|
index a9f410a..3783a60 100644
|
2020-10-15 10:26:13 +00:00
|
|
|
--- a/prnt/cups.py
|
|
|
|
+++ b/prnt/cups.py
|
2021-03-24 23:25:59 +00:00
|
|
|
@@ -489,78 +489,77 @@ def getPPDFile2(mq,model, ppds): # New PPD find
|
2020-10-15 10:26:13 +00:00
|
|
|
#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']))
|
2021-03-24 23:25:59 +00:00
|
|
|
- log.debug(matches)
|
|
|
|
- num_matches = len(matches)
|
2020-10-15 10:26:13 +00:00
|
|
|
+ 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
|
2021-03-24 23:25:59 +00:00
|
|
|
|
|
|
|
- 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 = []
|
2020-10-15 10:26:13 +00:00
|
|
|
+ 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), '')
|
|
|
|
+
|
2021-02-05 21:05:02 +00:00
|
|
|
+ if ppd_model != wanted_model and ppd_model != '{}_series'.format(wanted_model):
|
2020-10-15 10:26:13 +00:00
|
|
|
+ continue
|
|
|
|
+
|
|
|
|
+ log.debug("Found match: %s" % f)
|
2021-03-24 23:25:59 +00:00
|
|
|
|
|
|
|
- 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']))
|
2020-10-15 10:26:13 +00:00
|
|
|
+ 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']))
|
2021-03-24 23:25:59 +00:00
|
|
|
|
|
|
|
- log.debug(matches)
|
|
|
|
- num_matches = len(matches)
|
2020-10-15 10:26:13 +00:00
|
|
|
+
|
2021-03-24 23:25:59 +00:00
|
|
|
+ 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
|
2020-10-15 10:26:13 +00:00
|
|
|
|
2021-03-24 23:25:59 +00:00
|
|
|
elif num_matches == 1:
|
|
|
|
@@ -570,7 +569,7 @@ def getPPDFile2(mq,model, ppds): # New PPD find
|
2020-10-15 10:26:13 +00:00
|
|
|
# > 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:
|
2021-03-24 23:25:59 +00:00
|
|
|
@@ -579,8 +578,8 @@ def getPPDFile2(mq,model, ppds): # New PPD find
|
2020-10-15 10:26:13 +00:00
|
|
|
|
|
|
|
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, '')
|
|
|
|
|