Bug Summary

File:home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx
Warning:line 401, column 20
Potential leak of memory pointed to by 'aStorage.pObj'

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name imagemgr.cxx -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=cplusplus -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/11.0.0 -D BOOST_ERROR_CODE_HEADER_ONLY -D BOOST_SYSTEM_NO_DEPRECATED -D CPPU_ENV=gcc3 -D LINUX -D OSL_DEBUG_LEVEL=1 -D SAL_LOG_INFO -D SAL_LOG_WARN -D UNIX -D UNX -D X86_64 -D _PTHREADS -D _REENTRANT -D SVT_DLLIMPLEMENTATION -D EXCEPTIONS_ON -D LIBO_INTERNAL_ONLY -I /home/maarten/src/libreoffice/core/workdir/UnpackedTarball/icu/source -I /home/maarten/src/libreoffice/core/workdir/UnpackedTarball/icu/source/i18n -I /home/maarten/src/libreoffice/core/workdir/UnpackedTarball/icu/source/common -I /home/maarten/src/libreoffice/core/external/boost/include -I /home/maarten/src/libreoffice/core/workdir/UnpackedTarball/boost -I /home/maarten/src/libreoffice/core/include -I /usr/lib/jvm/java-11-openjdk-11.0.9.10-0.0.ea.fc33.x86_64/include -I /usr/lib/jvm/java-11-openjdk-11.0.9.10-0.0.ea.fc33.x86_64/include/linux -I /home/maarten/src/libreoffice/core/config_host -I /home/maarten/src/libreoffice/core/workdir/CustomTarget/officecfg/registry -I /home/maarten/src/libreoffice/core/workdir/UnoApiHeadersTarget/udkapi/normal -I /home/maarten/src/libreoffice/core/workdir/UnoApiHeadersTarget/offapi/normal -I /home/maarten/src/libreoffice/core/svtools/source/inc -I /home/maarten/src/libreoffice/core/svtools/inc -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10 -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/x86_64-redhat-linux -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/backward -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/11.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O0 -Wno-missing-braces -std=c++17 -fdeprecated-macro -fdebug-compilation-dir /home/maarten/src/libreoffice/core -ferror-limit 19 -fvisibility hidden -fvisibility-inlines-hidden -stack-protector 2 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -debug-info-kind=constructor -analyzer-output=html -faddrsig -o /home/maarten/tmp/wis/scan-build-libreoffice/output/report/2020-10-07-141433-9725-1 -x c++ /home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <svtools/imagemgr.hxx>
21#include <tools/diagnose_ex.h>
22#include <tools/urlobj.hxx>
23#include <tools/debug.hxx>
24#include <vcl/image.hxx>
25#include <sot/storage.hxx>
26#include <comphelper/classids.hxx>
27#include <unotools/ucbhelper.hxx>
28#include <comphelper/processfactory.hxx>
29#include <com/sun/star/beans/PropertyValue.hpp>
30#include <com/sun/star/container/XNameAccess.hpp>
31#include <com/sun/star/document/XTypeDetection.hpp>
32#include <com/sun/star/ucb/ContentCreationException.hpp>
33#include <com/sun/star/ucb/XCommandEnvironment.hpp>
34#include <com/sun/star/uno/XComponentContext.hpp>
35#include <ucbhelper/content.hxx>
36#include <svtools/strings.hrc>
37#include <svtools/svtresid.hxx>
38#include <bitmaps.hlst>
39#include <strings.hxx>
40
41// globals *******************************************************************
42
43#define NO_INDEX(-1) (-1)
44#define CONTENT_HELPER::utl::UCBContentHelper ::utl::UCBContentHelper
45
46namespace {
47
48struct SvtExtensionResIdMapping_Impl
49{
50 const char* _pExt;
51 bool _bExt;
52 const char* pStrId;
53 SvImageId _nImgId;
54};
55
56}
57
58SvtExtensionResIdMapping_Impl const ExtensionMap_Impl[] =
59{
60 { "awk", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
61 { "bas", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
62 { "bat", true, STR_DESCRIPTION_BATCHFILEreinterpret_cast<char const *>("STR_DESCRIPTION_BATCHFILE"
"\004" u8"Batch file")
, SvImageId::NONE },
63 { "bmk", false, STR_DESCRIPTION_BOOKMARKFILEreinterpret_cast<char const *>("STR_DESCRIPTION_BOOKMARKFILE"
"\004" u8"Bookmark file")
, SvImageId::NONE },
64 { "bmp", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::Bitmap },
65 { "c", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
66 { "cfg", false, STR_DESCRIPTION_CFGFILEreinterpret_cast<char const *>("STR_DESCRIPTION_CFGFILE"
"\004" u8"Configuration file")
, SvImageId::NONE },
67 { "cmd", true, STR_DESCRIPTION_BATCHFILEreinterpret_cast<char const *>("STR_DESCRIPTION_BATCHFILE"
"\004" u8"Batch file")
, SvImageId::NONE },
68 { "cob", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
69 { "com", true, STR_DESCRIPTION_APPLICATIONreinterpret_cast<char const *>("STR_DESCRIPTION_APPLICATION"
"\004" u8"Application")
, SvImageId::NONE },
70 { "cxx", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
71 { "dbf", true, STR_DESCRIPTION_DATABASE_TABLEreinterpret_cast<char const *>("STR_DESCRIPTION_DATABASE_TABLE"
"\004" u8"Database table")
, SvImageId::Table },
72 { "def", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
73 { "dll", true, STR_DESCRIPTION_SYSFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SYSFILE"
"\004" u8"System file")
, SvImageId::NONE },
74 { "doc", false, STR_DESCRIPTION_WORD_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_WORD_DOC"
"\004" u8"MS Word document")
, SvImageId::Writer },
75 { "dot", false, STR_DESCRIPTION_WORD_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_WORD_DOC"
"\004" u8"MS Word document")
, SvImageId::WriterTemplate },
76 { "docx", false, STR_DESCRIPTION_WORD_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_WORD_DOC"
"\004" u8"MS Word document")
, SvImageId::Writer },
77 { "dxf", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::DXF },
78 { "exe", true, STR_DESCRIPTION_APPLICATIONreinterpret_cast<char const *>("STR_DESCRIPTION_APPLICATION"
"\004" u8"Application")
, SvImageId::NONE },
79 { "gif", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::GIF },
80 { "h", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
81 { "hlp", false, STR_DESCRIPTION_HELP_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_HELP_DOC"
"\004" u8"Help file")
, SvImageId::NONE },
82 { "hrc", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
83 { "htm", false, STR_DESCRIPTION_HTMLFILEreinterpret_cast<char const *>("STR_DESCRIPTION_HTMLFILE"
"\004" u8"HTML document")
, SvImageId::HTML },
84 { "html", false, STR_DESCRIPTION_HTMLFILEreinterpret_cast<char const *>("STR_DESCRIPTION_HTMLFILE"
"\004" u8"HTML document")
, SvImageId::HTML },
85 { "asp", false, STR_DESCRIPTION_HTMLFILEreinterpret_cast<char const *>("STR_DESCRIPTION_HTMLFILE"
"\004" u8"HTML document")
, SvImageId::HTML },
86 { "hxx", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
87 { "ini", false, STR_DESCRIPTION_CFGFILEreinterpret_cast<char const *>("STR_DESCRIPTION_CFGFILE"
"\004" u8"Configuration file")
, SvImageId::NONE },
88 { "java", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
89 { "jpeg", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::JPG },
90 { "jpg", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::JPG },
91 { "lha", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE"
"\004" u8"Archive file")
, SvImageId::NONE },
92#ifdef _WIN32
93 { "lnk", false, nullptr, SvImageId::NONE },
94#endif
95 { "log", true, STR_DESCRIPTION_LOGFILEreinterpret_cast<char const *>("STR_DESCRIPTION_LOGFILE"
"\004" u8"Log file")
, SvImageId::NONE },
96 { "lst", true, STR_DESCRIPTION_LOGFILEreinterpret_cast<char const *>("STR_DESCRIPTION_LOGFILE"
"\004" u8"Log file")
, SvImageId::NONE },
97 { "met", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::MET },
98 { "mml", false, STR_DESCRIPTION_MATHML_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_MATHML_DOC"
"\004" u8"MathML Document")
, SvImageId::Math },
99 { "mod", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
100 { "odb", false, STR_DESCRIPTION_OO_DATABASE_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_DATABASE_DOC"
"\004" u8"OpenDocument Database")
, SvImageId::OO_DatabaseDoc },
101 { "odg", false, STR_DESCRIPTION_OO_DRAW_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_DRAW_DOC"
"\004" u8"OpenDocument Drawing")
, SvImageId::OO_DrawDoc },
102 { "odf", false, STR_DESCRIPTION_OO_MATH_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_MATH_DOC"
"\004" u8"OpenDocument Formula")
, SvImageId::OO_MathDoc },
103 { "odm", false, STR_DESCRIPTION_OO_GLOBAL_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_GLOBAL_DOC"
"\004" u8"OpenDocument Master Document")
, SvImageId::OO_GlobalDoc },
104 { "odp", false, STR_DESCRIPTION_OO_IMPRESS_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_IMPRESS_DOC"
"\004" u8"OpenDocument Presentation")
, SvImageId::OO_ImpressDoc },
105 { "ods", false, STR_DESCRIPTION_OO_CALC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_CALC_DOC"
"\004" u8"OpenDocument Spreadsheet")
, SvImageId::OO_CalcDoc },
106 { "odt", false, STR_DESCRIPTION_OO_WRITER_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_OO_WRITER_DOC"
"\004" u8"OpenDocument Text")
, SvImageId::OO_WriterDoc },
107 { "otg", false, STR_DESCRIPTION_OO_DRAW_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_OO_DRAW_TEMPLATE"
"\004" u8"OpenDocument Drawing Template")
, SvImageId::OO_DrawTemplate },
108 { "otp", false, STR_DESCRIPTION_OO_IMPRESS_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_OO_IMPRESS_TEMPLATE"
"\004" u8"OpenDocument Presentation Template")
, SvImageId::OO_ImpressTemplate },
109 { "ots", false, STR_DESCRIPTION_OO_CALC_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_OO_CALC_TEMPLATE"
"\004" u8"OpenDocument Spreadsheet Template")
, SvImageId::OO_CalcTemplate },
110 { "ott", false, STR_DESCRIPTION_OO_WRITER_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_OO_WRITER_TEMPLATE"
"\004" u8"OpenDocument Text Template")
, SvImageId::OO_WriterTemplate },
111 { "pas", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
112 { "pcd", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::PCD },
113 { "pct", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::PCT },
114 { "pict", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::PCT },
115 { "pcx", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::PCX },
116 { "pl", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
117 { "png", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::PNG },
118 { "rar", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE"
"\004" u8"Archive file")
, SvImageId::NONE },
119 { "rtf", false, STR_DESCRIPTION_WORD_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_WORD_DOC"
"\004" u8"MS Word document")
, SvImageId::Writer },
120 { "sbl", false, nullptr, SvImageId::NONE },
121 { "sch", false, nullptr, SvImageId::NONE },
122 { "sda", false, STR_DESCRIPTION_SDRAW_DOC"StarDraw 3.0 / 5.0 (StarImpress)", SvImageId::Draw },
123 { "sdb", false, STR_DESCRIPTION_SDATABASE_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SDATABASE_DOC"
"\004" u8"StarOffice Database")
, SvImageId::Database },
124 { "sdc", false, STR_DESCRIPTION_SCALC_DOC"StarCalc 3.0 - 5.0", SvImageId::Calc },
125 { "sdd", false, STR_DESCRIPTION_SIMPRESS_DOC"StarImpress 4.0 / 5.0", SvImageId::Impress },
126 { "sdp", false, STR_DESCRIPTION_SIMPRESS_DOC"StarImpress 4.0 / 5.0", SvImageId::NONE },
127 { "sds", false, STR_DESCRIPTION_SCHART_DOC"StarChart 3.0 - 5.0", SvImageId::NONE },
128 { "sdw", false, STR_DESCRIPTION_SWRITER_DOC"StarWriter 3.0 - 5.0", SvImageId::Writer },
129 { "sga", false, nullptr, SvImageId::NONE },
130 { "sgl", false, STR_DESCRIPTION_GLOBALDOCreinterpret_cast<char const *>("STR_DESCRIPTION_GLOBALDOC"
"\004" u8"StarWriter 4.0 / 5.0 Master Document")
, SvImageId::GlobalDoc },
131 { "shtml", false, STR_DESCRIPTION_HTMLFILEreinterpret_cast<char const *>("STR_DESCRIPTION_HTMLFILE"
"\004" u8"HTML document")
, SvImageId::HTML },
132 { "sim", false, STR_DESCRIPTION_SIMAGE_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SIMAGE_DOC"
"\004" u8"StarOffice Image")
, SvImageId::SIM },
133 { "smf", false, STR_DESCRIPTION_SMATH_DOC"StarMath 2.0 - 5.0", SvImageId::Math },
134 { "src", true, STR_DESCRIPTION_SOURCEFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SOURCEFILE"
"\004" u8"Source code")
, SvImageId::NONE },
135 { "svh", false, STR_DESCRIPTION_HELP_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_HELP_DOC"
"\004" u8"Help file")
, SvImageId::NONE },
136 { "svm", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::SVM },
137 { "stc", false, STR_DESCRIPTION_CALC_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_CALC_TEMPLATE"
"\004" u8"OpenOffice.org 1.0 Spreadsheet Template")
, SvImageId::CalcTemplate },
138 { "std", false, STR_DESCRIPTION_DRAW_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_DRAW_TEMPLATE"
"\004" u8"OpenOffice.org 1.0 Drawing Template")
, SvImageId::DrawTemplate },
139 { "sti", false, STR_DESCRIPTION_IMPRESS_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_IMPRESS_TEMPLATE"
"\004" u8"OpenOffice.org 1.0 Presentation Template")
, SvImageId::ImpressTemplate },
140 { "stw", false, STR_DESCRIPTION_WRITER_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_WRITER_TEMPLATE"
"\004" u8"OpenOffice.org 1.0 Text Document Template")
, SvImageId::WriterTemplate },
141 { "sxc", false, STR_DESCRIPTION_SXCALC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXCALC_DOC"
"\004" u8"OpenOffice.org 1.0 Spreadsheet")
, SvImageId::Calc },
142 { "sxd", false, STR_DESCRIPTION_SXDRAW_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXDRAW_DOC"
"\004" u8"OpenOffice.org 1.0 Drawing")
, SvImageId::Draw },
143 { "sxg", false, STR_DESCRIPTION_SXGLOBAL_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXGLOBAL_DOC"
"\004" u8"OpenOffice.org 1.0 Master Document")
, SvImageId::GlobalDoc },
144 { "sxi", false, STR_DESCRIPTION_SXIMPRESS_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXIMPRESS_DOC"
"\004" u8"OpenOffice.org 1.0 Presentation")
, SvImageId::Impress },
145 { "sxm", false, STR_DESCRIPTION_SXMATH_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXMATH_DOC"
"\004" u8"OpenOffice.org 1.0 Formula")
, SvImageId::Math },
146 { "sxs", false, STR_DESCRIPTION_SXCHART_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXCHART_DOC"
"\004" u8"OpenOffice.org 1.0 Chart")
, SvImageId::NONE },
147 { "sxw", false, STR_DESCRIPTION_SXWRITER_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SXWRITER_DOC"
"\004" u8"OpenOffice.org 1.0 Text Document")
, SvImageId::Writer },
148 { "sys", true, STR_DESCRIPTION_SYSFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SYSFILE"
"\004" u8"System file")
, SvImageId::NONE },
149 { "tif", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::TIFF },
150 { "tiff", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::TIFF },
151 { "txt", false, STR_DESCRIPTION_TEXTFILEreinterpret_cast<char const *>("STR_DESCRIPTION_TEXTFILE"
"\004" u8"Text file")
, SvImageId::TextFile },
152 { "url", false, STR_DESCRIPTION_LINKreinterpret_cast<char const *>("STR_DESCRIPTION_LINK" "\004"
u8"Link")
, SvImageId::NONE },
153 { "vor", false, STR_DESCRIPTION_SOFFICE_TEMPLATE_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_SOFFICE_TEMPLATE_DOC"
"\004" u8"StarOffice 3.0 - 5.0 Template")
, SvImageId::WriterTemplate },
154 { "vxd", true, STR_DESCRIPTION_SYSFILEreinterpret_cast<char const *>("STR_DESCRIPTION_SYSFILE"
"\004" u8"System file")
, SvImageId::NONE },
155 { "wmf", true, STR_DESCRIPTION_GRAPHIC_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_GRAPHIC_DOC"
"\004" u8"Graphics")
, SvImageId::WMF },
156 { "xls", false, STR_DESCRIPTION_EXCEL_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_EXCEL_DOC"
"\004" u8"MS Excel document")
, SvImageId::Calc },
157 { "xlt", false, STR_DESCRIPTION_EXCEL_TEMPLATE_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_EXCEL_TEMPLATE_DOC"
"\004" u8"MS Excel template")
, SvImageId::CalcTemplate },
158 { "xlsx", false, STR_DESCRIPTION_EXCEL_DOCreinterpret_cast<char const *>("STR_DESCRIPTION_EXCEL_DOC"
"\004" u8"MS Excel document")
, SvImageId::Calc },
159 { "uu", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE"
"\004" u8"Archive file")
, SvImageId::NONE },
160 { "uue", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE"
"\004" u8"Archive file")
, SvImageId::NONE },
161 { "z", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE"
"\004" u8"Archive file")
, SvImageId::NONE },
162 { "zip", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE"
"\004" u8"Archive file")
, SvImageId::NONE },
163 { "zoo", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE"
"\004" u8"Archive file")
, SvImageId::NONE },
164 { "gz", true, STR_DESCRIPTION_ARCHIVFILEreinterpret_cast<char const *>("STR_DESCRIPTION_ARCHIVFILE"
"\004" u8"Archive file")
, SvImageId::NONE },
165 { "ppt", false, STR_DESCRIPTION_POWERPOINTreinterpret_cast<char const *>("STR_DESCRIPTION_POWERPOINT"
"\004" u8"MS PowerPoint Document")
, SvImageId::Impress },
166 { "pot", false, STR_DESCRIPTION_POWERPOINT_TEMPLATEreinterpret_cast<char const *>("STR_DESCRIPTION_POWERPOINT_TEMPLATE"
"\004" u8"MS PowerPoint Template")
, SvImageId::ImpressTemplate },
167 { "pps", false, STR_DESCRIPTION_POWERPOINT_SHOWreinterpret_cast<char const *>("STR_DESCRIPTION_POWERPOINT_SHOW"
"\004" u8"MS PowerPoint Show")
, SvImageId::Impress },
168 { "pptx", false, STR_DESCRIPTION_POWERPOINTreinterpret_cast<char const *>("STR_DESCRIPTION_POWERPOINT"
"\004" u8"MS PowerPoint Document")
, SvImageId::Impress },
169 { "oxt", false, STR_DESCRIPTION_EXTENSIONreinterpret_cast<char const *>("STR_DESCRIPTION_EXTENSION"
"\004" u8"%PRODUCTNAME Extension")
, SvImageId::Extension },
170 { nullptr, false, nullptr, SvImageId::NONE }
171};
172
173namespace {
174
175struct SvtFactory2ExtensionMapping_Impl
176{
177 const char* _pFactory;
178 const char* _pExtension;
179};
180
181}
182
183// mapping from "private:factory" url to extension
184
185SvtFactory2ExtensionMapping_Impl const Fac2ExtMap_Impl[] =
186{
187 { "swriter", "odt" },
188 { "swriter/web", "html" },
189 { "swriter/GlobalDocument", "odm" },
190 { "scalc", "ods" },
191 { "simpress", "odp" },
192 { "sdraw", "odg" },
193 { "smath", "odf" },
194 { "sdatabase", "odb" },
195 { nullptr, nullptr }
196};
197
198
199static OUString GetImageExtensionByFactory_Impl( const OUString& rURL )
200{
201 INetURLObject aObj( rURL );
202 OUString aPath = aObj.GetURLPath( INetURLObject::DecodeMechanism::NONE );
203 OUString aExtension;
204
205 if ( !aPath.isEmpty() )
206 {
207 sal_uInt16 nIndex = 0;
208 while ( Fac2ExtMap_Impl[ nIndex ]._pFactory )
209 {
210 if ( aPath.equalsAscii( Fac2ExtMap_Impl[ nIndex ]._pFactory ) )
211 {
212 // extension found
213 aExtension = OUString::createFromAscii(Fac2ExtMap_Impl[ nIndex ]._pExtension);
214 // and return it
215 return aExtension;
216 }
217 ++nIndex;
218 }
219 }
220
221 // no extension found, so use the type detection (performance brake)
222
223 try
224 {
225 // get the TypeDetection service to access all registered types
226 css::uno::Reference < css::uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext();
227 css::uno::Reference < css::document::XTypeDetection > xTypeDetector(
228 xContext->getServiceManager()->createInstanceWithContext("com.sun.star.document.TypeDetection", xContext),
229 css::uno::UNO_QUERY );
230
231 OUString aInternalType = xTypeDetector->queryTypeByURL( rURL );
232 css::uno::Reference < css::container::XNameAccess > xAccess( xTypeDetector, css::uno::UNO_QUERY );
233 css::uno::Sequence < css::beans::PropertyValue > aTypeProps;
234 if ( !aInternalType.isEmpty() && xAccess->hasByName( aInternalType ) )
235 {
236 xAccess->getByName( aInternalType ) >>= aTypeProps;
237 for ( const css::beans::PropertyValue& rProp : std::as_const(aTypeProps) )
238 {
239 if (rProp.Name == "Extensions")
240 {
241 css::uno::Sequence < OUString > aExtensions;
242 if ( ( rProp.Value >>= aExtensions ) && aExtensions.hasElements() )
243 {
244 const OUString* pExtensions = aExtensions.getConstArray();
245 aExtension = pExtensions[0];
246 break;
247 }
248 }
249 }
250 }
251 }
252 catch( const css::uno::RuntimeException& )
253 {
254 throw; // don't hide it!
255 }
256 catch( const css::uno::Exception& )
257 {
258 // type detection failed -> no extension
259 }
260
261 return aExtension;
262}
263
264static sal_Int32 GetIndexOfExtension_Impl( const OUString& rExtension )
265{
266 sal_Int32 nRet = NO_INDEX(-1);
267 if ( !rExtension.isEmpty() )
268 {
269 sal_Int32 nIndex = 0;
270 OUString aExt = rExtension.toAsciiLowerCase();
271 while ( ExtensionMap_Impl[ nIndex ]._pExt )
272 {
273 if ( aExt.equalsAscii( ExtensionMap_Impl[ nIndex ]._pExt ) )
274 {
275 nRet = nIndex;
276 break;
277 }
278 ++nIndex;
279 }
280 }
281
282 return nRet;
283}
284
285static SvImageId GetImageId_Impl( const OUString& rExtension )
286{
287 SvImageId nImage = SvImageId::File;
288 sal_Int32 nIndex = GetIndexOfExtension_Impl( rExtension );
289 if ( nIndex != NO_INDEX(-1) )
290 {
291 nImage = ExtensionMap_Impl[ nIndex ]._nImgId;
292 if ( nImage == SvImageId::NONE )
293 nImage = SvImageId::File;
294 }
295
296 return nImage;
297}
298
299static bool GetVolumeProperties_Impl( ::ucbhelper::Content& rContent, svtools::VolumeInfo& rVolumeInfo )
300{
301 bool bRet = false;
302
303 try
304 {
305 bRet = ( ( rContent.getPropertyValue( "IsVolume" ) >>= rVolumeInfo.m_bIsVolume ) &&
306 ( rContent.getPropertyValue( "IsRemote" ) >>= rVolumeInfo.m_bIsRemote ) &&
307 ( rContent.getPropertyValue( "IsRemoveable" ) >>= rVolumeInfo.m_bIsRemoveable ) &&
308 ( rContent.getPropertyValue( "IsFloppy" ) >>= rVolumeInfo.m_bIsFloppy ) &&
309 ( rContent.getPropertyValue( "IsCompactDisc" ) >>= rVolumeInfo.m_bIsCompactDisc ) );
310 }
311 catch( const css::uno::RuntimeException& )
312 {
313 throw; // don't hide it!
314 }
315 catch( const css::uno::Exception& )
316 {
317 // type detection failed -> no extension
318 }
319
320 return bRet;
321}
322
323static SvImageId GetFolderImageId_Impl( const OUString& rURL )
324{
325 SvImageId nRet = SvImageId::Folder;
326 try
327 {
328 ::svtools::VolumeInfo aVolumeInfo;
329 ::ucbhelper::Content aCnt( rURL, css::uno::Reference< css::ucb::XCommandEnvironment >(), comphelper::getProcessComponentContext() );
330 if ( GetVolumeProperties_Impl( aCnt, aVolumeInfo ) )
331 {
332 if ( aVolumeInfo.m_bIsRemote )
333 nRet = SvImageId::NetworkDevice;
334 else if ( aVolumeInfo.m_bIsCompactDisc )
335 nRet = SvImageId::CDRomDevice;
336 else if ( aVolumeInfo.m_bIsRemoveable )
337 nRet = SvImageId::RemoveableDevice;
338 else if ( aVolumeInfo.m_bIsVolume )
339 nRet = SvImageId::FixedDevice;
340 }
341 }
342 catch( const css::uno::RuntimeException& )
343 {
344 throw; // don't hide it!
345 }
346 catch( const css::uno::Exception& )
347 {
348
349 }
350 return nRet;
351}
352
353static SvImageId GetImageId_Impl( const INetURLObject& rObject, bool bDetectFolder )
354{
355 OUString aExt, sURL = rObject.GetMainURL( INetURLObject::DecodeMechanism::NONE );
356 SvImageId nImage = SvImageId::File;
357
358 if ( rObject.GetProtocol() == INetProtocol::PrivSoffice )
2
Assuming the condition is false
3
Taking false branch
359 {
360 OUString aURLPath = sURL.copy( strlen(URL_PREFIX_PRIV_SOFFICE"private:") );
361 OUString aType = aURLPath.getToken( 0, '/' );
362 if ( aType == "factory" )
363 {
364 // detect an image id for our "private:factory" urls
365 aExt = GetImageExtensionByFactory_Impl( sURL );
366 if ( !aExt.isEmpty() )
367 nImage = GetImageId_Impl( aExt );
368 return nImage;
369 }
370 else if ( aType == "image" )
371 nImage = static_cast<SvImageId>(aURLPath.getToken( 1, '/' ).toInt32());
372 }
373 else
374 {
375 aExt = rObject.getExtension();
376 if ( aExt == "vor" )
4
Assuming the condition is true
5
Taking true branch
377 {
378 SvImageId nId = SvImageId::WriterTemplate;
379 try
380 {
381 tools::SvRef<SotStorage> aStorage = new SotStorage( sURL, StreamMode::STD_READ );
6
Memory is allocated
382 if ( !aStorage->GetError() )
7
Taking false branch
383 {
384 SvGlobalName aGlobalName = aStorage->GetClassName();
385 if ( aGlobalName == SvGlobalName(SO3_SC_CLASSID_500xc6a5b861L, 0x85d6, 0x11d1, 0x89, 0xcb, 0x00, 0x80, 0x29, 0xe4
, 0xb0, 0xb1
) || aGlobalName == SvGlobalName(SO3_SC_CLASSID_400x6361d441L, 0x4235, 0x11d0, 0x89, 0xcb, 0x00, 0x80, 0x29, 0xe4
, 0xb0, 0xb1
) || aGlobalName == SvGlobalName(SO3_SC_CLASSID_300x3F543FA0L, 0xB6A6, 0x101B, 0x99, 0x61, 0x04, 0x02, 0x1C, 0x00
, 0x70, 0x02
) )
386 nId = SvImageId::CalcTemplate;
387 else if ( aGlobalName == SvGlobalName(SO3_SDRAW_CLASSID_500x2e8905a0L, 0x85bd, 0x11d1, 0x89, 0xd0, 0x0, 0x80, 0x29, 0xe4
, 0xb0, 0xb1
) )
388 nId = SvImageId::DrawTemplate;
389 else if ( aGlobalName == SvGlobalName(SO3_SIMPRESS_CLASSID_500x565c7221L, 0x85bc, 0x11d1, 0x89, 0xd0, 0x0, 0x80, 0x29, 0xe4
, 0xb0, 0xb1
) ||
390 aGlobalName == SvGlobalName(SO3_SIMPRESS_CLASSID_400x12d3cc0L, 0x4216, 0x11d0, 0x89, 0xcb, 0x0, 0x80, 0x29, 0xe4
, 0xb0, 0xb1
) || aGlobalName == SvGlobalName(SO3_SIMPRESS_CLASSID_300xAF10AAE0L, 0xB36D, 0x101B, 0x99, 0x61, 0x04, 0x02, 0x1C, 0x00
, 0x70, 0x02
) )
391 nId = SvImageId::ImpressTemplate;
392 else if ( aGlobalName == SvGlobalName(SO3_SM_CLASSID_500xffb5e640L, 0x85de, 0x11d1, 0x89, 0xd0, 0x00, 0x80, 0x29, 0xe4
, 0xb0, 0xb1
) || aGlobalName == SvGlobalName(SO3_SM_CLASSID_400x2b3b7e1L, 0x4225, 0x11d0, 0x89, 0xca, 0x00, 0x80, 0x29, 0xe4
, 0xb0, 0xb1
) || aGlobalName == SvGlobalName(SO3_SM_CLASSID_300xD4590460L, 0x35FD, 0x101C, 0xB1, 0x2A, 0x04, 0x02, 0x1C, 0x00
, 0x70, 0x02
) )
393 nId = SvImageId::MathTemplate;
394 }
395 }
396 catch (const css::ucb::ContentCreationException&)
397 {
398 TOOLS_WARN_EXCEPTION("svtools.misc", "GetImageId_Impl")do { css::uno::Any tools_warn_exception( DbgGetCaughtException
() ); do { if (true) { switch (sal_detail_log_report(::SAL_DETAIL_LOG_LEVEL_WARN
, "svtools.misc")) { case SAL_DETAIL_LOG_ACTION_IGNORE: break
; case SAL_DETAIL_LOG_ACTION_LOG: if (sizeof ::sal::detail::getResult
( ::sal::detail::StreamStart() << "GetImageId_Impl" <<
" " << exceptionToString(tools_warn_exception)) == 1) {
::sal_detail_log( (::SAL_DETAIL_LOG_LEVEL_WARN), ("svtools.misc"
), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx"
":" "398" ": "), ::sal::detail::unwrapStream( ::sal::detail::
StreamStart() << "GetImageId_Impl" << " " <<
exceptionToString(tools_warn_exception)), 0); } else { ::std
::ostringstream sal_detail_stream; sal_detail_stream <<
"GetImageId_Impl" << " " << exceptionToString(tools_warn_exception
); ::sal::detail::log( (::SAL_DETAIL_LOG_LEVEL_WARN), ("svtools.misc"
), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx"
":" "398" ": "), sal_detail_stream, 0); }; break; case SAL_DETAIL_LOG_ACTION_FATAL
: if (sizeof ::sal::detail::getResult( ::sal::detail::StreamStart
() << "GetImageId_Impl" << " " << exceptionToString
(tools_warn_exception)) == 1) { ::sal_detail_log( (::SAL_DETAIL_LOG_LEVEL_WARN
), ("svtools.misc"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx"
":" "398" ": "), ::sal::detail::unwrapStream( ::sal::detail::
StreamStart() << "GetImageId_Impl" << " " <<
exceptionToString(tools_warn_exception)), 0); } else { ::std
::ostringstream sal_detail_stream; sal_detail_stream <<
"GetImageId_Impl" << " " << exceptionToString(tools_warn_exception
); ::sal::detail::log( (::SAL_DETAIL_LOG_LEVEL_WARN), ("svtools.misc"
), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx"
":" "398" ": "), sal_detail_stream, 0); }; std::abort(); break
; } } } while (false); } while (false)
;
399 }
400
401 return nId;
8
Potential leak of memory pointed to by 'aStorage.pObj'
402 }
403 }
404
405 if ( nImage == SvImageId::File && !sURL.isEmpty() )
406 {
407 if ( bDetectFolder && CONTENT_HELPER::utl::UCBContentHelper::IsFolder( sURL ) )
408 nImage = GetFolderImageId_Impl( sURL );
409 else if ( !aExt.isEmpty() )
410 nImage = GetImageId_Impl( aExt );
411 }
412 return nImage;
413}
414
415static const char* GetDescriptionId_Impl( const OUString& rExtension, bool& rbShowExt )
416{
417 const char* pId = nullptr;
418 sal_Int32 nIndex = GetIndexOfExtension_Impl( rExtension );
419 if ( nIndex != NO_INDEX(-1) )
420 {
421 pId = ExtensionMap_Impl[ nIndex ].pStrId;
422 rbShowExt = ExtensionMap_Impl[ nIndex ]._bExt;
423 }
424
425 return pId;
426}
427
428static OUString GetDescriptionByFactory_Impl( const OUString& rFactory )
429{
430 const char* pResId = nullptr;
431 if ( rFactory.startsWithIgnoreAsciiCase( "swriter" ) )
432 pResId = STR_DESCRIPTION_FACTORY_WRITERreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_WRITER"
"\004" u8"Text Document")
;
433 else if ( rFactory.startsWithIgnoreAsciiCase( "scalc" ) )
434 pResId = STR_DESCRIPTION_FACTORY_CALCreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_CALC"
"\004" u8"Spreadsheet")
;
435 else if ( rFactory.startsWithIgnoreAsciiCase( "simpress" ) )
436 pResId = STR_DESCRIPTION_FACTORY_IMPRESSreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_IMPRESS"
"\004" u8"Presentation")
;
437 else if ( rFactory.startsWithIgnoreAsciiCase( "sdraw" ) )
438 pResId = STR_DESCRIPTION_FACTORY_DRAWreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_DRAW"
"\004" u8"Drawing")
;
439 else if ( rFactory.startsWithIgnoreAsciiCase( "swriter/web" ) )
440 pResId = STR_DESCRIPTION_FACTORY_WRITERWEBreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_WRITERWEB"
"\004" u8"HTML document")
;
441 else if ( rFactory.startsWithIgnoreAsciiCase( "swriter/globaldocument" ) )
442 pResId = STR_DESCRIPTION_FACTORY_GLOBALDOCreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_GLOBALDOC"
"\004" u8"Master document")
;
443 else if ( rFactory.startsWithIgnoreAsciiCase( "smath" ) )
444 pResId = STR_DESCRIPTION_FACTORY_MATHreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_MATH"
"\004" u8"Formula")
;
445 else if ( rFactory.startsWithIgnoreAsciiCase( "sdatabase" ) )
446 pResId = STR_DESCRIPTION_FACTORY_DATABASEreinterpret_cast<char const *>("STR_DESCRIPTION_FACTORY_DATABASE"
"\004" u8"Database")
;
447
448 if (pResId)
449 {
450 return SvtResId(pResId);
451 }
452 return OUString();
453}
454
455static const char* GetFolderDescriptionId_Impl( const OUString& rURL )
456{
457 const char* pRet = STR_DESCRIPTION_FOLDERreinterpret_cast<char const *>("STR_DESCRIPTION_FOLDER"
"\004" u8"Folder")
;
458 try
459 {
460 ::ucbhelper::Content aCnt( rURL, css::uno::Reference< css::ucb::XCommandEnvironment >(), comphelper::getProcessComponentContext() );
461 svtools::VolumeInfo aVolumeInfo;
462 if ( GetVolumeProperties_Impl( aCnt, aVolumeInfo ) )
463 {
464 if ( aVolumeInfo.m_bIsRemote )
465 pRet = STR_DESCRIPTION_REMOTE_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_REMOTE_VOLUME"
"\004" u8"Network connection")
;
466 else if ( aVolumeInfo.m_bIsFloppy )
467 pRet = STR_DESCRIPTION_FLOPPY_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_FLOPPY_VOLUME"
"\004" u8"Disk drive")
;
468 else if ( aVolumeInfo.m_bIsCompactDisc )
469 pRet = STR_DESCRIPTION_CDROM_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_CDROM_VOLUME"
"\004" u8"CD-ROM drive")
;
470 else if ( aVolumeInfo.m_bIsRemoveable || aVolumeInfo.m_bIsVolume )
471 pRet = STR_DESCRIPTION_LOCALE_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_LOCALE_VOLUME"
"\004" u8"Local drive")
;
472 }
473 }
474 catch( const css::uno::RuntimeException& )
475 {
476 throw; // don't hide it!
477 }
478 catch( const css::uno::Exception& )
479 {
480
481 }
482 return pRet;
483}
484
485static OUString GetImageNameFromList_Impl( SvImageId nImageId, vcl::ImageType eImageType )
486{
487 if (eImageType == vcl::ImageType::Size32)
488 {
489 switch (nImageId)
490 {
491 case SvImageId::HTML:
492 return BMP_HTML_32"res/lx03139_32.png";
493 case SvImageId::OO_DatabaseDoc:
494 return BMP_OO_DATABASE_DOC_32"res/lx03245_32.png";
495 case SvImageId::OO_DrawDoc:
496 return BMP_OO_DRAW_DOC_32"res/lx03246_32.png";
497 case SvImageId::OO_MathDoc:
498 return BMP_OO_MATH_DOC_32"res/lx03247_32.png";
499 case SvImageId::OO_GlobalDoc:
500 return BMP_OO_GLOBAL_DOC_32"res/lx03248_32.png";
501 case SvImageId::OO_ImpressDoc:
502 return BMP_OO_IMPRESS_DOC_32"res/lx03249_32.png";
503 case SvImageId::OO_CalcDoc:
504 return BMP_OO_CALC_DOC_32"res/lx03250_32.png";
505 case SvImageId::OO_WriterDoc:
506 return BMP_OO_WRITER_DOC_32"res/lx03251_32.png";
507 case SvImageId::OO_WriterTemplate:
508 return BMP_OO_WRITER_TEMPLATE_32"res/lx03255_32.png";
509 default: break;
510 }
511 }
512 else if (eImageType == vcl::ImageType::Size26)
513 {
514 switch (nImageId)
515 {
516 case SvImageId::Impress:
517 return BMP_IMPRESS_LC"res/lx03123.png";
518 case SvImageId::Bitmap:
519 return BMP_BITMAP_LC"res/lx03125.png";
520 case SvImageId::Calc:
521 return BMP_CALC_LC"res/lx03126.png";
522 case SvImageId::CalcTemplate:
523 return BMP_CALCTEMPLATE_LC"res/lx03127.png";
524 case SvImageId::Database:
525 return BMP_DATABASE_LC"res/lx03129.png";
526 case SvImageId::ImpressTemplate:
527 return BMP_IMPRESSTEMPLATE_LC"res/lx03130.png";
528 case SvImageId::GIF:
529 return BMP_GIF_LC"res/lx03137.png";
530 case SvImageId::HTML:
531 return BMP_HTML_LC"res/lx03139.png";
532 case SvImageId::JPG:
533 return BMP_JPG_LC"res/lx03140.png";
534 case SvImageId::Math:
535 return BMP_MATH_LC"res/lx03144.png";
536 case SvImageId::MathTemplate:
537 return BMP_MATHTEMPLATE_LC"res/lx03145.png";
538 case SvImageId::File:
539 return BMP_FILE_LC"res/lx03150.png";
540 case SvImageId::PCD:
541 return BMP_PCD_LC"res/lx03152.png";
542 case SvImageId::PCT:
543 return BMP_PCT_LC"res/lx03153.png";
544 case SvImageId::PCX:
545 return BMP_PCX_LC"res/lx03154.png";
546 case SvImageId::SIM:
547 return BMP_SIM_LC"res/lx03155.png";
548 case SvImageId::TextFile:
549 return BMP_TEXTFILE_LC"res/lx03156.png";
550 case SvImageId::TIFF:
551 return BMP_TIFF_LC"res/lx03158.png";
552 case SvImageId::WMF:
553 return BMP_WMF_LC"res/lx03160.png";
554 case SvImageId::Writer:
555 return BMP_WRITER_LC"res/lx03162.png";
556 case SvImageId::WriterTemplate:
557 return BMP_WRITERTEMPLATE_LC"res/lx03163.png";
558 case SvImageId::FixedDevice:
559 return BMP_FIXEDDEV_LC"res/lx03164.png";
560 case SvImageId::RemoveableDevice:
561 return BMP_REMOVABLEDEV_LC"res/lx03165.png";
562 case SvImageId::CDRomDevice:
563 return BMP_CDROMDEV_LC"res/lx03166.png";
564 case SvImageId::NetworkDevice:
565 return BMP_NETWORKDEV_LC"res/lx03167.png";
566 case SvImageId::Table:
567 return BMP_TABLE_LC"res/lx03188.png";
568 case SvImageId::Folder:
569 return BMP_FOLDER_LC"res/lx03189.png";
570 case SvImageId::DXF:
571 return BMP_DXF_LC"res/lx03217.png";
572 case SvImageId::MET:
573 return BMP_MET_LC"res/lx03218.png";
574 case SvImageId::PNG:
575 return BMP_PNG_LC"res/lx03219.png";
576 case SvImageId::SVM:
577 return BMP_SVM_LC"res/lx03222.png";
578 case SvImageId::GlobalDoc:
579 return BMP_GLOBAL_DOC_LC"res/lx03226.png";
580 case SvImageId::Draw:
581 return BMP_DRAW_LC"res/lx03227.png";
582 case SvImageId::DrawTemplate:
583 return BMP_DRAWTEMPLATE_LC"res/lx03228.png";
584 case SvImageId::OO_DatabaseDoc:
585 return BMP_OO_DATABASE_DOC_LC"res/lx03245.png";
586 case SvImageId::OO_DrawDoc:
587 return BMP_OO_DRAW_DOC_LC"res/lx03246.png";
588 case SvImageId::OO_MathDoc:
589 return BMP_OO_MATH_DOC_LC"res/lx03247.png";
590 case SvImageId::OO_GlobalDoc:
591 return BMP_OO_GLOBAL_DOC_LC"res/lx03248.png";
592 case SvImageId::OO_ImpressDoc:
593 return BMP_OO_IMPRESS_DOC_LC"res/lx03249.png";
594 case SvImageId::OO_CalcDoc:
595 return BMP_OO_CALC_DOC_LC"res/lx03250.png";
596 case SvImageId::OO_WriterDoc:
597 return BMP_OO_WRITER_DOC_LC"res/lx03251.png";
598 case SvImageId::OO_DrawTemplate:
599 return BMP_OO_DRAW_TEMPLATE_LC"res/lx03252.png";
600 case SvImageId::OO_ImpressTemplate:
601 return BMP_OO_IMPRESS_TEMPLATE_LC"res/lx03253.png";
602 case SvImageId::OO_CalcTemplate:
603 return BMP_OO_CALC_TEMPLATE_LC"res/lx03254.png";
604 case SvImageId::OO_WriterTemplate:
605 return BMP_OO_WRITER_TEMPLATE_LC"res/lx03255.png";
606 case SvImageId::Extension:
607 return BMP_EXTENSION_LC"res/lx03256.png";
608 default: break;
609 }
610 }
611 else
612 {
613 switch (nImageId)
614 {
615 case SvImageId::Impress:
616 return BMP_IMPRESS_SC"res/sx03123.png";
617 case SvImageId::Bitmap:
618 return BMP_BITMAP_SC"res/sx03125.png";
619 case SvImageId::Calc:
620 return BMP_CALC_SC"res/sx03126.png";
621 case SvImageId::CalcTemplate:
622 return BMP_CALCTEMPLATE_SC"res/sx03127.png";
623 case SvImageId::Database:
624 return BMP_DATABASE_SC"res/sx03129.png";
625 case SvImageId::ImpressTemplate:
626 return BMP_IMPRESSTEMPLATE_SC"res/sx03130.png";
627 case SvImageId::GIF:
628 return BMP_GIF_SC"res/sx03137.png";
629 case SvImageId::HTML:
630 return BMP_HTML_SC"res/sx03139.png";
631 case SvImageId::JPG:
632 return BMP_JPG_SC"res/sx03140.png";
633 case SvImageId::Math:
634 return BMP_MATH_SC"res/sx03144.png";
635 case SvImageId::MathTemplate:
636 return BMP_MATHTEMPLATE_SC"res/sx03145.png";
637 case SvImageId::File:
638 return BMP_FILE_SC"res/sx03150.png";
639 case SvImageId::PCD:
640 return BMP_PCD_SC"res/sx03152.png";
641 case SvImageId::PCT:
642 return BMP_PCT_SC"res/sx03153.png";
643 case SvImageId::PCX:
644 return BMP_PCX_SC"res/sx03154.png";
645 case SvImageId::SIM:
646 return BMP_SIM_SC"res/sx03155.png";
647 case SvImageId::TextFile:
648 return BMP_TEXTFILE_SC"res/sx03156.png";
649 case SvImageId::TIFF:
650 return BMP_TIFF_SC"res/sx03158.png";
651 case SvImageId::WMF:
652 return BMP_WMF_SC"res/sx03160.png";
653 case SvImageId::Writer:
654 return BMP_WRITER_SC"res/sx03162.png";
655 case SvImageId::WriterTemplate:
656 return BMP_WRITERTEMPLATE_SC"res/sx03163.png";
657 case SvImageId::FixedDevice:
658 return BMP_FIXEDDEV_SC"res/sx03164.png";
659 case SvImageId::RemoveableDevice:
660 return BMP_REMOVABLEDEV_SC"res/sx03165.png";
661 case SvImageId::CDRomDevice:
662 return BMP_CDROMDEV_SC"res/sx03166.png";
663 case SvImageId::NetworkDevice:
664 return BMP_NETWORKDEV_SC"res/sx03167.png";
665 case SvImageId::Table:
666 return BMP_TABLE_SC"res/sx03188.png";
667 case SvImageId::Folder:
668 return RID_BMP_FOLDER"svtools/res/folder.png";
669 case SvImageId::DXF:
670 return BMP_DXF_SC"res/sx03217.png";
671 case SvImageId::MET:
672 return BMP_MET_SC"res/sx03218.png";
673 case SvImageId::PNG:
674 return BMP_PNG_SC"res/sx03219.png";
675 case SvImageId::SVM:
676 return BMP_SVM_SC"res/sx03222.png";
677 case SvImageId::GlobalDoc:
678 return BMP_GLOBAL_DOC_SC"res/sx03226.png";
679 case SvImageId::Draw:
680 return BMP_DRAW_SC"res/sx03227.png";
681 case SvImageId::DrawTemplate:
682 return BMP_DRAWTEMPLATE_SC"res/sx03228.png";
683 case SvImageId::OO_DatabaseDoc:
684 return BMP_OO_DATABASE_DOC_SC"res/sx03245.png";
685 case SvImageId::OO_DrawDoc:
686 return BMP_OO_DRAW_DOC_SC"res/sx03246.png";
687 case SvImageId::OO_MathDoc:
688 return BMP_OO_MATH_DOC_SC"res/sx03247.png";
689 case SvImageId::OO_GlobalDoc:
690 return BMP_OO_GLOBAL_DOC_SC"res/sx03248.png";
691 case SvImageId::OO_ImpressDoc:
692 return BMP_OO_IMPRESS_DOC_SC"res/sx03249.png";
693 case SvImageId::OO_CalcDoc:
694 return BMP_OO_CALC_DOC_SC"res/sx03250.png";
695 case SvImageId::OO_WriterDoc:
696 return BMP_OO_WRITER_DOC_SC"res/sx03251.png";
697 case SvImageId::OO_DrawTemplate:
698 return BMP_OO_DRAW_TEMPLATE_SC"res/sx03252.png";
699 case SvImageId::OO_ImpressTemplate:
700 return BMP_OO_IMPRESS_TEMPLATE_SC"res/sx03253.png";
701 case SvImageId::OO_CalcTemplate:
702 return BMP_OO_CALC_TEMPLATE_SC"res/sx03254.png";
703 case SvImageId::OO_WriterTemplate:
704 return BMP_OO_WRITER_TEMPLATE_SC"res/sx03255.png";
705 case SvImageId::Extension:
706 return BMP_EXTENSION_SC"res/sx03256.png";
707 default: break;
708 }
709 }
710
711 return OUString();
712}
713
714static Image GetImageFromList_Impl( SvImageId nImageId, vcl::ImageType eImageType)
715{
716 OUString sImageName(GetImageNameFromList_Impl(nImageId, eImageType));
717 if (!sImageName.isEmpty())
718 return Image(StockImage::Yes, sImageName);
719 return Image();
720}
721
722OUString SvFileInformationManager::GetDescription_Impl( const INetURLObject& rObject, bool bDetectFolder )
723{
724 OUString sExtension(rObject.getExtension());
725 OUString sDescription, sURL( rObject.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
726 const char* pResId = nullptr;
727 bool bShowExt = false, bOnlyFile = false;
728 bool bFolder = bDetectFolder && CONTENT_HELPER::utl::UCBContentHelper::IsFolder( sURL );
729 if ( !bFolder )
730 {
731 bool bDetected = false;
732
733 if ( rObject.GetProtocol() == INetProtocol::PrivSoffice )
734 {
735 OUString aURLPath = sURL.copy( strlen(URL_PREFIX_PRIV_SOFFICE"private:") );
736 OUString aType = aURLPath.getToken( 0, '/' );
737 if ( aType == "factory" )
738 {
739 sDescription = GetDescriptionByFactory_Impl( aURLPath.copy( aURLPath.indexOf( '/' ) + 1 ) );
740 bDetected = true;
741 }
742 }
743
744 if (!bDetected)
745 {
746 // search a description by extension
747 bool bExt = !sExtension.isEmpty();
748 if ( bExt )
749 {
750 sExtension = sExtension.toAsciiLowerCase();
751 pResId = GetDescriptionId_Impl( sExtension, bShowExt );
752 }
753 if (!pResId)
754 {
755 pResId = STR_DESCRIPTION_FILEreinterpret_cast<char const *>("STR_DESCRIPTION_FILE" "\004"
u8"File")
;
756 bOnlyFile = bExt;
757 }
758 }
759 }
760 else
761 pResId = GetFolderDescriptionId_Impl( sURL );
762
763 if (pResId)
764 {
765 if ( bOnlyFile )
766 {
767 bShowExt = false;
768 sExtension = sExtension.toAsciiUpperCase();
769 sDescription = sExtension + "-";
770 }
771 sDescription += SvtResId(pResId);
772 }
773
774 DBG_ASSERT( !sDescription.isEmpty(), "file without description" )do { if (true && (!(!sDescription.isEmpty()))) { sal_detail_logFormat
((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.tools"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx"
":" "774" ": "), "%s", "file without description"); } } while
(false)
;
775
776 if ( bShowExt )
777 {
778 sDescription += " (" + sExtension + ")";
779 }
780
781 return sDescription;
782}
783
784OUString SvFileInformationManager::GetImageId(const INetURLObject& rObject, bool bBig)
785{
786 SvImageId nImage = GetImageId_Impl( rObject, true );
787 DBG_ASSERT( nImage != SvImageId::NONE, "invalid ImageId" )do { if (true && (!(nImage != SvImageId::NONE))) { sal_detail_logFormat
((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.tools"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx"
":" "787" ": "), "%s", "invalid ImageId"); } } while (false)
;
788 return GetImageNameFromList_Impl(nImage, bBig ? vcl::ImageType::Size26 : vcl::ImageType::Size16);
789}
790
791Image SvFileInformationManager::GetImage(const INetURLObject& rObject, bool bBig)
792{
793 SvImageId nImage = GetImageId_Impl( rObject, true );
794 DBG_ASSERT( nImage != SvImageId::NONE, "invalid ImageId" )do { if (true && (!(nImage != SvImageId::NONE))) { sal_detail_logFormat
((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.tools"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx"
":" "794" ": "), "%s", "invalid ImageId"); } } while (false)
;
795 return GetImageFromList_Impl(nImage, bBig ? vcl::ImageType::Size26 : vcl::ImageType::Size16);
796}
797
798OUString SvFileInformationManager::GetFileImageId(const INetURLObject& rObject)
799{
800 SvImageId nImage = GetImageId_Impl( rObject, false );
801 DBG_ASSERT( nImage != SvImageId::NONE, "invalid ImageId" )do { if (true && (!(nImage != SvImageId::NONE))) { sal_detail_logFormat
((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.tools"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx"
":" "801" ": "), "%s", "invalid ImageId"); } } while (false)
;
802 return GetImageNameFromList_Impl(nImage, vcl::ImageType::Size16);
803}
804
805Image SvFileInformationManager::GetImageNoDefault(const INetURLObject& rObject, vcl::ImageType eImageType)
806{
807 SvImageId nImage = GetImageId_Impl(rObject, true);
1
Calling 'GetImageId_Impl'
808 DBG_ASSERT( nImage != SvImageId::NONE, "invalid ImageId" )do { if (true && (!(nImage != SvImageId::NONE))) { sal_detail_logFormat
((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.tools"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx"
":" "808" ": "), "%s", "invalid ImageId"); } } while (false)
;
809
810 if ( nImage == SvImageId::File )
811 return Image();
812
813 return GetImageFromList_Impl(nImage, eImageType);
814}
815
816OUString SvFileInformationManager::GetFolderImageId( const svtools::VolumeInfo& rInfo )
817{
818 SvImageId nImage = SvImageId::Folder;
819 DBG_ASSERT( nImage != SvImageId::NONE, "invalid ImageId" )do { if (true && (!(nImage != SvImageId::NONE))) { sal_detail_logFormat
((SAL_DETAIL_LOG_LEVEL_WARN), ("legacy.tools"), ("/home/maarten/src/libreoffice/core/svtools/source/misc/imagemgr.cxx"
":" "819" ": "), "%s", "invalid ImageId"); } } while (false)
;
820
821 if ( rInfo.m_bIsRemote )
822 nImage = SvImageId::NetworkDevice;
823 else if ( rInfo.m_bIsCompactDisc )
824 nImage = SvImageId::CDRomDevice;
825 else if ( rInfo.m_bIsRemoveable || rInfo.m_bIsFloppy )
826 nImage = SvImageId::RemoveableDevice;
827 else if ( rInfo.m_bIsVolume )
828 nImage = SvImageId::FixedDevice;
829
830 return GetImageNameFromList_Impl(nImage, vcl::ImageType::Size16);
831}
832
833OUString SvFileInformationManager::GetDescription( const INetURLObject& rObject )
834{
835 return SvFileInformationManager::GetDescription_Impl( rObject, true );
836}
837
838OUString SvFileInformationManager::GetFileDescription( const INetURLObject& rObject )
839{
840 return SvFileInformationManager::GetDescription_Impl( rObject, false );
841}
842
843OUString SvFileInformationManager::GetFolderDescription( const svtools::VolumeInfo& rInfo )
844{
845 const char* pResId = STR_DESCRIPTION_FOLDERreinterpret_cast<char const *>("STR_DESCRIPTION_FOLDER"
"\004" u8"Folder")
;
846 if ( rInfo.m_bIsRemote )
847 pResId = STR_DESCRIPTION_REMOTE_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_REMOTE_VOLUME"
"\004" u8"Network connection")
;
848 else if ( rInfo.m_bIsFloppy )
849 pResId = STR_DESCRIPTION_FLOPPY_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_FLOPPY_VOLUME"
"\004" u8"Disk drive")
;
850 else if ( rInfo.m_bIsCompactDisc )
851 pResId = STR_DESCRIPTION_CDROM_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_CDROM_VOLUME"
"\004" u8"CD-ROM drive")
;
852 else if ( rInfo.m_bIsRemoveable || rInfo.m_bIsVolume )
853 pResId = STR_DESCRIPTION_LOCALE_VOLUMEreinterpret_cast<char const *>("STR_DESCRIPTION_LOCALE_VOLUME"
"\004" u8"Local drive")
;
854
855 return SvtResId(pResId);
856}
857
858/* vim:set shiftwidth=4 softtabstop=4 expandtab: */