Add elf metainfo plugin

pull/16/head
Timothy Pearson 13 years ago
parent 4fed04e9d2
commit 512da0e58d

@ -848,6 +848,7 @@ add_subdirectory( licenses )
add_subdirectory( dnssd ) add_subdirectory( dnssd )
add_subdirectory( pics ) add_subdirectory( pics )
add_subdirectory( mimetypes ) add_subdirectory( mimetypes )
add_subdirectory( kfile-plugins )
##### install import cmake modules ############### ##### install import cmake modules ###############

@ -0,0 +1,12 @@
#################################################
#
# (C) 2012 Timothy Pearson
# kb9vqf (AT) pearsoncomputing.net
#
# Improvements and feedback are welcome
#
# This file is released under GPL >= 2
#
#################################################
tde_conditional_add_subdirectory( HAVE_ELFICON elf )

@ -0,0 +1,42 @@
#################################################
#
# (C) 2012 Timothy Pearson
# kb9vqf (AT) pearsoncomputing.net
#
# Improvements and feedback are welcome
#
# This file is released under GPL >= 2
#
#################################################
include_directories(
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_BINARY_DIR}
${TDE_INCLUDE_DIR}
${TQT_INCLUDE_DIRS}
${CMAKE_SOURCE_DIR}/tdecore
${CMAKE_BINARY_DIR}/tdecore
${CMAKE_SOURCE_DIR}/tdeui
${CMAKE_BINARY_DIR}/tdeui
${CMAKE_SOURCE_DIR}/kio/kio
${LIBR_INCLUDEDIR}
)
link_directories(
${TQT_LIBRARY_DIRS}
${LIBR_LIBDIR}
)
#### other data #################################
install( FILES kfile_elf.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
#### kfile_elf (module) #########################
tde_add_kpart( kfile_elf AUTOMOC
SOURCES kfile_elf.cpp
EMBED tdelficon-static
LINK kio-shared ${LIBR_LIBRARIES}
DESTINATION ${PLUGIN_INSTALL_DIR}
)

@ -0,0 +1,159 @@
/* This file is part of the KDE project
* Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation version 2.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
*/
#include <config.h>
#include "kfile_elf.h"
#include <kprocess.h>
#include <klocale.h>
#include <kgenericfactory.h>
#include <kstringvalidator.h>
#include <kdebug.h>
#include <tqdict.h>
#include <tqvalidator.h>
#include <tqcstring.h>
#include <tqfile.h>
#include <tqdatetime.h>
#include "tdelficon.h"
#if !defined(__osf__)
#include <inttypes.h>
#else
typedef unsigned long uint32_t;
typedef unsigned short uint16_t;
#endif
TQString elf_get_resource(libr_file *handle, char *section_name)
{
size_t buffer_size = 0;
char *buffer = NULL;
TQString result = TQString("<i>") + i18n("not set") + TQString("</i>");
/* Get the resource from the ELF binary */
if(!libr_size(handle, section_name, &buffer_size))
{
kdWarning() << "failed to obtain ELF resource size: " << libr_errmsg() << endl;
return result;
}
/* Get the resource from the ELF file */
buffer = (char *) malloc(buffer_size);
if(!libr_read(handle, section_name, buffer))
{
kdWarning() << "failed to obtain ELF resource: " << libr_errmsg() << endl;
goto fail;
}
result = buffer;
fail:
free(buffer);
return result;
}
typedef KGenericFactory<KElfPlugin> ElfFactory;
K_EXPORT_COMPONENT_FACTORY(kfile_elf, ElfFactory( "kfile_elf" ))
KElfPlugin::KElfPlugin(TQObject *parent, const char *name,
const TQStringList &args)
: KFilePlugin(parent, name, args)
{
KFileMimeTypeInfo* info = addMimeTypeInfo( "application/x-executable" );
KFileMimeTypeInfo::GroupInfo* group = 0L;
KFileMimeTypeInfo::GroupInfo* group2 = 0L;
group = addGroupInfo(info, "Technical", i18n("Embedded Metadata"));
group2 = addGroupInfo(info, "Icon", i18n("Embedded Icon(s)"));
KFileMimeTypeInfo::ItemInfo* item;
item = addItemInfo(group, "Name", i18n("Internal Name"), TQVariant::String);
item = addItemInfo(group, "Description", i18n("Description"), TQVariant::String);
item = addItemInfo(group, "License", i18n("License"), TQVariant::String);
item = addItemInfo(group, "Copyright", i18n("Copyright"), TQVariant::String);
item = addItemInfo(group, "Authors", i18n("Author(s)"), TQVariant::String);
item = addItemInfo(group, "Product", i18n("Product"), TQVariant::String);
item = addItemInfo(group, "Organization", i18n("Organization"), TQVariant::String);
item = addItemInfo(group, "Version", i18n("Version"), TQVariant::String);
item = addItemInfo(group, "DateTime", i18n("Creation Date/Time"), TQVariant::String);
item = addItemInfo(group, "Notes", i18n("Comments"), TQVariant::String);
item = addItemInfo(group2, "EmbeddedIcon", i18n("Icon Name(s)"), TQVariant::String);
}
bool KElfPlugin::readInfo( KFileMetaInfo& info, uint what)
{
libr_icon *icon = NULL;
libr_file *handle = NULL;
libr_access_t access = LIBR_READ;
if((handle = libr_open(const_cast<char*>(info.path().ascii()), access)) == NULL)
{
kdWarning() << "failed to open file" << info.path() << endl;
}
KFileMetaInfoGroup group = appendGroup(info, "Technical");
KFileMetaInfoGroup group2 = appendGroup(info, "Icon");
appendItem(group, "Name", elf_get_resource(handle, ".metadata_name"));
appendItem(group, "Description", elf_get_resource(handle, ".metadata_description"));
appendItem(group, "License", elf_get_resource(handle, ".metadata_license"));
appendItem(group, "Copyright", elf_get_resource(handle, ".metadata_copyright"));
appendItem(group, "Authors", elf_get_resource(handle, ".metadata_authors"));
appendItem(group, "Product", elf_get_resource(handle, ".metadata_product"));
appendItem(group, "Organization", elf_get_resource(handle, ".metadata_organization"));
appendItem(group, "Version", elf_get_resource(handle, ".metadata_version"));
appendItem(group, "DateTime", elf_get_resource(handle, ".metadata_datetime"));
appendItem(group, "Notes", elf_get_resource(handle, ".metadata_notes"));
TQString iconListing;
iconentry *entry = NULL;
iconlist icons;
if(!get_iconlist(handle, &icons))
{
// Failed to obtain a list of ELF icons
}
while((entry = get_nexticon(&icons, entry)) != NULL)
{
if (iconListing.isEmpty()) {
iconListing = entry->name;
}
else {
iconListing = iconListing.append("<p>").append(entry->name);
}
break;
}
if (iconListing.isEmpty()) {
iconListing = TQString("<i>") + i18n("not set") + TQString("</i>");
}
appendItem(group2, "EmbeddedIcon", iconListing);
libr_close(handle);
return true;
}
#include "kfile_elf.moc"

@ -0,0 +1,66 @@
[Desktop Entry]
Type=Service
Name=ELF Info
Name[af]=ELF Inligting
Name[ar]=معلومات ELF
Name[br]=Titouroù ELF
Name[ca]=Informació de ELF
Name[cs]=ELF info
Name[cy]=Gwybodaeth ELF
Name[da]=ELF-info
Name[de]=ELF-Info
Name[el]=Πληροφορίες ELF
Name[eo]=ELF-informo
Name[es]=Info ELF
Name[et]=ELF info
Name[fa]=اطلاعات ELF
Name[fi]=ELF-tiedot
Name[fr]=Informations ELF
Name[ga]=Eolas faoi ELF
Name[gl]=Inf. ELF
Name[he]=מידע ELF
Name[hi]=ELF जानकारी
Name[hr]=ELF informacije
Name[hu]=ELF-jellemzők
Name[is]=ELF upplýsingar
Name[it]=Informazioni ELF
Name[ja]=ELF 情報
Name[kk]=ELF мәліметі
Name[km]=ព័ត៌មាន ELF
Name[lt]=ELF informacija
Name[ms]=Maklumat ELF
Name[nds]=ELF-Info
Name[ne]=ELF सूचना
Name[nl]=ELF-info
Name[nn]=ELF-info
Name[nso]=Tshedimoso ya ELF
Name[pa]=ELF ਜਾਣਕਾਰੀ
Name[pl]=Informacja o pliku ELF
Name[pt]=Informação do ELF
Name[pt_BR]=Informação sobre ELF
Name[ro]=Informaţii ELF
Name[ru]=Информация о ELF
Name[se]=ELF-dieđut
Name[sl]=Podatki o ELF
Name[sr]=ELF информације
Name[sr@Latn]=ELF informacije
Name[sv]=ELF-information
Name[ta]=ELF தகவல்
Name[tg]=Иттилоот оиди ELF
Name[th]=ข้อมูลแฟ้ม ELF
Name[tr]=ELF Bilgisi
Name[uk]=Інформація по ELF
Name[uz]=ELF haqida maʼlumot
Name[uz@cyrillic]=ELF ҳақида маълумот
Name[ven]=Mafhungo ELF
Name[wa]=Informåcion sol imådje ELF
Name[xh]=Ulwazi lwe ELF
Name[zh_CN]=ELF 信息
Name[zh_HK]=ELF 資訊
Name[zh_TW]=ELF 資訊
Name[zu]=Ulwazi lwe-ELF
ServiceTypes=KFilePlugin
X-KDE-Library=kfile_elf
MimeType=application/x-executable
PreferredItems=Name,Description,License,Copyright,Authors,Product,Organization,Version,DateTime,Notes"
SupportsThumbnail=false

@ -0,0 +1,50 @@
/* This file is part of the KDE project
* Copyright (C) 2002 Shane Wright <me@shanewright.co.uk>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation version 2.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
*/
#ifndef __KFILE_BMP_H__
#define __KFILE_BMP_H__
#include <kfilemetainfo.h>
// Elven things
extern "C" {
#include <libr.h>
#include <libr-icons.h>
}
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
class TQStringList;
class KElfPlugin: public KFilePlugin
{
Q_OBJECT
TQ_OBJECT
public:
KElfPlugin( TQObject *parent, const char *name, const TQStringList& args );
virtual bool readInfo( KFileMetaInfo& info, uint what);
};
#endif
Loading…
Cancel
Save