Skip to content

Commit

Permalink
in properties explicitly show Fast Web View status alwas for pdf files (
Browse files Browse the repository at this point in the history
fixes #4130)
  • Loading branch information
kjk committed May 23, 2024
1 parent 8ae95b8 commit b0ec2cf
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 70 deletions.
12 changes: 4 additions & 8 deletions src/EngineMupdf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3398,14 +3398,10 @@ TempStr EngineMupdf::GetPropertyTemp(const char* name) {
}

static const char* pdfPropNames[] = {
kPropTitle, "Title",
kPropAuthor, "Author",
kPropSubject, "Subject",
kPropCopyright, "Copyright",
kPropCreationDate, "CreationDate",
kPropModificationDate, "ModDate",
kPropCreatorApp, "Creator",
kPropPdfProducer, "Producer",
kPropTitle, "Title", kPropAuthor, "Author",
kPropSubject, "Subject", kPropCopyright, "Copyright",
kPropCreationDate, "CreationDate", kPropModificationDate, "ModDate",
kPropCreatorApp, "Creator", kPropPdfProducer, "Producer",
nullptr,
};
const char* pdfPropName = GetMatchingString(pdfPropNames, name);
Expand Down
131 changes: 69 additions & 62 deletions src/SumatraProperties.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ struct PropertiesLayout {
}

void AddProperty(const char* key, const char* value, bool isPath = false) {
// don't display value-less properties
if (str::IsEmpty(value)) {
// don't display value-less properties
return;
}
strings.Append(key);
Expand Down Expand Up @@ -255,35 +255,6 @@ static TempStr FormatPageSizeTemp(EngineBase* engine, int pageNo, int rotation)
return str::FormatTemp("%s x %s %s%s", strWidth, strHeight, unit, formatName);
}

static char* FormatPdfFileStructure(DocController* ctrl) {
TempStr fstruct = ctrl->GetPropertyTemp(kPropPdfFileStructure);
if (str::IsEmpty(fstruct)) {
return nullptr;
}
StrVec parts;
Split(parts, fstruct, ",", true);

StrVec props;

if (parts.Contains("linearized")) {
props.Append(_TRA("Fast Web View"));
}
if (parts.Contains("tagged")) {
props.Append(_TRA("Tagged PDF"));
}
if (parts.Contains("PDFX")) {
props.Append("PDF/X (ISO 15930)");
}
if (parts.Contains("PDFA1")) {
props.Append("PDF/A (ISO 19005)");
}
if (parts.Contains("PDFE1")) {
props.Append("PDF/E (ISO 24517)");
}

return Join(props, ", ");
}

// returns a list of permissions denied by this document
// Caller needs to free the result
static TempStr FormatPermissionsTemp(DocController* ctrl) {
Expand Down Expand Up @@ -522,8 +493,46 @@ static void AddPropTranslated(PropertiesLayout* layoutData, const char* propName
}

static void AddPropTranslated(DocController* ctrl, PropertiesLayout* layoutData, const char* propName) {
TempStr val = ctrl->GetPropertyTemp(kPropTitle);
AddPropTranslated(layoutData, kPropTitle, val);
TempStr val = ctrl->GetPropertyTemp(propName);
AddPropTranslated(layoutData, propName, val);
}

static void AddPdfFileStructure(DocController* ctrl, PropertiesLayout* layoutData) {
TempStr fstruct = ctrl->GetPropertyTemp(kPropPdfFileStructure);
if (str::IsEmpty(fstruct)) {
bool isPDF = str::EndsWithI(ctrl->GetFilePath(), ".pdf");
if (isPDF) {
layoutData->AddProperty(_TRA("Fast Web View"), _TRA("No"));
}
return;
}
StrVec parts;
Split(parts, fstruct, ",", true);

StrVec props;

const char* linearized = _TRA("No");
if (parts.Contains("linearized")) {
props.Append(_TRA("Fast Web View"));
linearized = _TRA("Yes");
}
layoutData->AddProperty(_TRA("Fast Web View"), linearized);

if (parts.Contains("tagged")) {
props.Append(_TRA("Tagged PDF"));
}
if (parts.Contains("PDFX")) {
props.Append("PDF/X (ISO 15930)");
}
if (parts.Contains("PDFA1")) {
props.Append("PDF/A (ISO 19005)");
}
if (parts.Contains("PDFE1")) {
props.Append("PDF/E (ISO 24517)");
}

TempStr val = JoinTemp(props, ", ");
layoutData->AddProperty(_TRA("PDF Optimizations:"), val);
}

static void GetProps(DocController* ctrl, PropertiesLayout* layoutData, bool extended) {
Expand All @@ -532,50 +541,48 @@ static void GetProps(DocController* ctrl, PropertiesLayout* layoutData, bool ext
const char* path = gPluginMode ? gPluginURL : ctrl->GetFilePath();
layoutData->AddProperty(_TRA("File:"), path, true);

DisplayModel* dm = ctrl->AsFixed();
i64 fileSize = file::GetSize(path); // can be gPluginURL
if (-1 == fileSize && dm) {
EngineBase* engine = dm->GetEngine();
ByteSlice d = engine->GetFileData();
if (!d.empty()) {
fileSize = d.size();
}
d.Free();
}
TempStr strTemp;
if (-1 != fileSize) {
strTemp = FormatFileSizeTemp(fileSize);
layoutData->AddProperty(_TRA("File Size:"), strTemp);
}

AddPropTranslated(ctrl, layoutData, kPropTitle);
AddPropTranslated(ctrl, layoutData, kPropSubject);
AddPropTranslated(ctrl, layoutData, kPropAuthor);
AddPropTranslated(ctrl, layoutData, kPropCopyright);

DisplayModel* dm = ctrl->AsFixed();
TempStr str = ctrl->GetPropertyTemp(kPropCreationDate);
TempStr strTemp;
if (str && dm && kindEngineMupdf == dm->engineType) {
strTemp = ConvDateToDisplayTemp(str, PdfDateParseA);
TempStr val = ctrl->GetPropertyTemp(kPropCreationDate);
if (val && dm && kindEngineMupdf == dm->engineType) {
strTemp = ConvDateToDisplayTemp(val, PdfDateParseA);
} else {
strTemp = ConvDateToDisplayTemp(str, IsoDateParse);
strTemp = ConvDateToDisplayTemp(val, IsoDateParse);
}
layoutData->AddProperty(_TRA("Created:"), strTemp);

str = ctrl->GetPropertyTemp(kPropModificationDate);
if (str && dm && kindEngineMupdf == dm->engineType) {
strTemp = ConvDateToDisplayTemp(str, PdfDateParseA);
val = ctrl->GetPropertyTemp(kPropModificationDate);
if (val && dm && kindEngineMupdf == dm->engineType) {
strTemp = ConvDateToDisplayTemp(val, PdfDateParseA);
} else {
strTemp = ConvDateToDisplayTemp(str, IsoDateParse);
strTemp = ConvDateToDisplayTemp(val, IsoDateParse);
}
layoutData->AddProperty(_TRA("Modified:"), strTemp);

AddPropTranslated(ctrl, layoutData, kPropCreatorApp);
AddPropTranslated(ctrl, layoutData, kPropPdfProducer);
AddPropTranslated(ctrl, layoutData, kPropPdfVersion);

str = FormatPdfFileStructure(ctrl);
layoutData->AddProperty(_TRA("PDF Optimizations:"), str);
str::Free(str);

i64 fileSize = file::GetSize(path); // can be gPluginURL
if (-1 == fileSize && dm) {
EngineBase* engine = dm->GetEngine();
ByteSlice d = engine->GetFileData();
if (!d.empty()) {
fileSize = d.size();
}
d.Free();
}
if (-1 != fileSize) {
strTemp = FormatFileSizeTemp(fileSize);
layoutData->AddProperty(_TRA("File Size:"), strTemp);
}
AddPdfFileStructure(ctrl, layoutData);

strTemp = str::FormatTemp("%d", ctrl->PageCount());
layoutData->AddProperty(_TRA("Number of Pages:"), strTemp);
Expand All @@ -598,12 +605,12 @@ static void GetProps(DocController* ctrl, PropertiesLayout* layoutData, bool ext

if (extended) {
// Note: FontList extraction can take a while
str = ctrl->GetPropertyTemp(kPropFontList);
if (str) {
val = ctrl->GetPropertyTemp(kPropFontList);
if (val) {
// add a space between basic and extended file properties
layoutData->AddProperty(" ", " ");
}
layoutData->AddProperty(_TRA("Fonts:"), str);
layoutData->AddProperty(_TRA("Fonts:"), val);
}
}

Expand Down

0 comments on commit b0ec2cf

Please sign in to comment.