42 #define YUILogComponent "qt-pkg"
49 #include "zypp/VendorSupportOptions.h"
50 #include "YQPkgDescriptionView.h"
51 #include "YQPkgDescriptionDialog.h"
57 #if (QT_VERSION < QT_VERSION_CHECK( 5, 15, 0 ))
58 # define QT_KEEP_EMPTY_PARTS QString::KeepEmptyParts
60 # define QT_KEEP_EMPTY_PARTS Qt::KeepEmptyParts
63 #define DESKTOP_TRANSLATIONS "desktop_translations"
64 #define DESKTOPFILEDIR "\\/share\\/applications\\/.*\\.desktop$" // RegExp
76 , _showSupportability ( showSupportability )
92 _selectable = selectable;
104 QString description = fromUTF8( selectable->theObj()->description() );
106 if ( ! description.contains(
"<!-- DT:Rich -->" ) )
109 html_text += (
"<p>" + description +
"</p>");
112 Patch::constPtr patch = asKind<Patch>(selectable->theObj());
116 html_text += _(
"References:");
120 for ( Patch::ReferenceIterator rit = patch->referencesBegin();
121 rit != patch->referencesEnd();
124 html_text += QString(
"<li>%1 (%2) : %3</li>" )
125 .arg( rit.id().c_str() )
126 .arg( rit.type().c_str() )
127 .arg( rit.title().c_str() );
129 html_text +=
"</ul>";
133 Package::constPtr
package = asKind<Package>(selectable->theObj());
134 if ( _showSupportability && package )
138 html_text += _(
"Supportability: %1").arg( fromUTF8(asUserString(package->vendorSupport()).c_str() ));
143 ZyppPkg installed = tryCastToZyppPkg( selectable->installedObj() );
149 zypp::Package::FileList f( installed->filelist() );
150 std::list<std::string> tmp( f.begin(), f.end() );
154 html_text += htmlEnd();
155 setHtml( html_text );
163 bool foundAuthorsList =
false;
164 QString html_text =
"<p>";
166 QStringList lines = text.trimmed().split(
'\n', QT_KEEP_EMPTY_PARTS );
167 QStringList::const_iterator it = lines.begin();
169 while ( it != lines.end() )
173 if ( line.startsWith(
"* ") || line.startsWith(
"- ") || line.startsWith(
"# ") )
175 line =
"<li>" + line +
"</li>";
178 if ( line.startsWith(
"Authors:" ) )
180 line =
"<p><b>" + line +
"</b><ul>";
181 foundAuthorsList =
true;
184 if ( foundAuthorsList )
186 if ( ! line.startsWith(
"-----" ) && ! line.isEmpty() )
187 html_text +=
"<li>" + line +
"</li>";
191 if ( line.isEmpty() )
192 html_text +=
"</p><p>";
194 html_text +=
" " + line;
203 if ( foundAuthorsList )
204 html_text +=
"</ul>";
215 if ( url.scheme() ==
"pkg" )
217 QString pkgName = url.authority();
218 yuiMilestone() <<
"Hyperlinking to package \"" << pkgName <<
"\"" << endl;
223 yuiError() <<
"Protocol not supported - can't follow hyperlink \""
224 << url.toString() <<
"\"" << endl;
240 QMap<QString, QString> desktopEntries;
244 if ( desktopFiles.size() == 0 )
249 for (
int i = 0; i < desktopFiles.size(); ++i )
253 QIcon icon = YQUI::ui()->loadIcon( desktopEntries[
"Icon"].toStdString() );
255 if ( ! icon.isNull() )
257 QPixmap pixmap = icon.pixmap(32);
258 QByteArray byteArray;
259 QBuffer buffer(&byteArray);
260 pixmap.save(&buffer,
"PNG");
261 html +=
"<tr><td valign='middle' align='center'>";
262 html += QString(
"<td><img src=\"data:image/png;base64,") + byteArray.toBase64() + QString(
"\">" );
263 html +=
"</td><td valign='middle' align='left'>";
264 html +=
"<b>" + desktopEntries[
"Name"] +
"</b>";
265 html +=
"</td></tr>";
269 if ( ! html.isEmpty() )
271 html = _(
"This package contains: ")
272 +
"<table border='0'>"
277 return "<p>" + html +
"</p>";
281 QMap<QString, QString>
284 QMap<QString, QString> desktopEntries;
285 QString name, genericName;
287 QSettings file( fileName, QSettings::IniFormat );
288 file.setIniCodec(
"UTF-8");
289 file.beginGroup(
"Desktop Entry" );
290 desktopEntries[
"Icon"] = file.value(
"Icon" ).toString();
291 desktopEntries[
"Exec"] = file.value(
"Exec" ).toString();
294 name = file.value( QString(
"Name[%1]" ).arg( langWithCountry ) ).toString();
296 if ( name.isEmpty() )
297 name= file.value( QString(
"Name[%1]" ).arg( lang ) ).toString() ;
299 if ( name.isEmpty() )
301 QFileInfo fileInfo (fileName);
302 QString msgid = QString(
"Name(%1)" ).arg( fileInfo.fileName() );
304 msgid += file.value( QString(
"Name" )).toString();
305 name = QString::fromUtf8( dgettext( DESKTOP_TRANSLATIONS, msgid.toLatin1() ) );
310 if ( name.isEmpty() )
311 name= file.value( QString(
"Name" ) ).toString() ;
312 desktopEntries[
"Name"] = name;
316 return desktopEntries;
323 QStringList desktopFiles;
325 for ( list<string>::const_iterator it = fileList.begin();
326 it != fileList.end(); ++it )
328 QString line = fromUTF8( *it );
330 if ( line.contains( QRegExp( DESKTOPFILEDIR ) ) )
331 desktopFiles << line;
340 const char *lang_cstr = getenv(
"LANG" );
344 langWithCountry = lang_cstr;
345 langWithCountry.replace( QRegExp(
"[@\\.].*$" ),
"" );
347 lang = langWithCountry;
348 lang.replace( QRegExp(
"_.*$" ),
"" );