|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* Copyright (C) 2004 Luke Kenneth Casson Leighton <lkcl@lkcl.net> *
|
|
|
|
* *
|
|
|
|
* contains code from kickermenu: *
|
|
|
|
* *
|
|
|
|
* Copyright (C) 2004 by Tommy Brander *
|
|
|
|
* tbr00001@student.mdh.se *
|
|
|
|
* *
|
|
|
|
* 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; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#ifdef _XOPEN_SOURCE
|
|
|
|
#undef _XOPEN_SOURCE
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <Python.h>
|
|
|
|
#include "task_python.h"
|
|
|
|
#include <tqobject.h>
|
|
|
|
#include <kservicegroup.h>
|
|
|
|
#include "karamba.h"
|
|
|
|
#include "svcgrp_python.h"
|
|
|
|
|
|
|
|
static PyObject *get_svc_grp(KServiceGroup::Ptr const& g)
|
|
|
|
{
|
|
|
|
//Avoid adding empty groups.
|
|
|
|
KServiceGroup::Ptr subMenuRoot = KServiceGroup::group(g->relPath());
|
|
|
|
if (subMenuRoot->childCount() == 0)
|
|
|
|
return NULL;
|
|
|
|
// Ignore dotfiles.
|
|
|
|
if ((g->name().at(0) == '.'))
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
PyObject *tuple = PyTuple_New(2);
|
|
|
|
PyObject *dict = PyDict_New();
|
|
|
|
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("caption"),
|
|
|
|
PyBytes_FromString(g->caption().ascii()));
|
|
|
|
if (g->comment() != NULL)
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("comment"),
|
|
|
|
PyBytes_FromString(g->comment().ascii()));
|
|
|
|
if (g->icon() != NULL)
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("icon"),
|
|
|
|
PyBytes_FromString(g->icon().ascii()));
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("relpath"),
|
|
|
|
PyBytes_FromString(g->relPath().ascii()));
|
|
|
|
|
|
|
|
PyTuple_SET_ITEM(tuple, 0, Py_BuildValue((char*)"l", 0));
|
|
|
|
PyTuple_SET_ITEM(tuple, 1, dict);
|
|
|
|
|
|
|
|
return tuple;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static PyObject *get_svc(KService::Ptr const& g)
|
|
|
|
{
|
|
|
|
PyObject *tuple = PyTuple_New(2);
|
|
|
|
PyObject *dict = PyDict_New();
|
|
|
|
|
|
|
|
if (g->exec() != NULL)
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("exec"),
|
|
|
|
PyBytes_FromString(g->exec().ascii()));
|
|
|
|
if (g->menuId() != NULL)
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("menuid"),
|
|
|
|
PyBytes_FromString(g->menuId().ascii()));
|
|
|
|
if (g->name() != NULL)
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("name"),
|
|
|
|
PyBytes_FromString(g->name().ascii()));
|
|
|
|
if (g->path() != NULL)
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("path"),
|
|
|
|
PyBytes_FromString(g->path().ascii()));
|
|
|
|
if (g->icon() != NULL)
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("icon"),
|
|
|
|
PyBytes_FromString(g->icon().ascii()));
|
|
|
|
if (g->library() != NULL)
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("library"),
|
|
|
|
PyBytes_FromString(g->library().ascii()));
|
|
|
|
if (g->comment() != NULL)
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("comment"),
|
|
|
|
PyBytes_FromString(g->comment().ascii()));
|
|
|
|
if (g->type() != NULL)
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("type"),
|
|
|
|
PyBytes_FromString(g->type().ascii()));
|
|
|
|
if (g->genericName() != NULL)
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("genericname"),
|
|
|
|
PyBytes_FromString(g->genericName().ascii()));
|
|
|
|
/*
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("terminal"),
|
|
|
|
Py_BuildValue("l", g->terminal()));
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("type"),
|
|
|
|
PyBytes_FromString(g->type().ascii()));
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("username"),
|
|
|
|
PyBytes_FromString(g->username().ascii()));
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("substuid"),
|
|
|
|
Py_BuildValue("l", g->substituteUid()));
|
|
|
|
PyDict_SetItem(dict, PyBytes_FromString("path"),
|
|
|
|
PyBytes_FromString(g->path().ascii()));
|
|
|
|
*/
|
|
|
|
|
|
|
|
PyTuple_SET_ITEM(tuple, 0, Py_BuildValue((char*)"l", 1));
|
|
|
|
PyTuple_SET_ITEM(tuple, 1, dict);
|
|
|
|
|
|
|
|
return tuple;
|
|
|
|
}
|
|
|
|
|
|
|
|
static PyObject *getServiceGroups(const char *rel_path)
|
|
|
|
{
|
|
|
|
PyObject *list = PyList_New(0);
|
|
|
|
|
|
|
|
// We ask KSycoca to give us all services (sorted).
|
|
|
|
KServiceGroup::Ptr root = KServiceGroup::group(rel_path);
|
|
|
|
|
|
|
|
if (!root || !root->isValid())
|
|
|
|
return list;
|
|
|
|
|
|
|
|
bool excludeNoDisplay_ = true;
|
|
|
|
bool detailed_ = false;
|
|
|
|
bool detailedNamesFirst_ = false;
|
|
|
|
|
|
|
|
KServiceGroup::List sl = root->entries(true, excludeNoDisplay_, true, detailed_ && !detailedNamesFirst_);
|
|
|
|
|
|
|
|
TQStringList suppressGenericNames = root->suppressGenericNames();
|
|
|
|
|
|
|
|
KServiceGroup::List::ConstIterator it = sl.begin();
|
|
|
|
for (; it != sl.end(); ++it)
|
|
|
|
{
|
|
|
|
KSycocaEntry * e = *it;
|
|
|
|
|
|
|
|
PyObject *tuple = NULL;
|
|
|
|
if (e->isType(KST_KServiceGroup)) {
|
|
|
|
KServiceGroup::Ptr g(static_cast<KServiceGroup *>(e));
|
|
|
|
tuple = get_svc_grp(g);
|
|
|
|
}
|
|
|
|
else if (e->isType(KST_KService)) {
|
|
|
|
KService::Ptr g(static_cast<KService *>(e));
|
|
|
|
tuple = get_svc(g);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (tuple != NULL)
|
|
|
|
PyList_Append(list, tuple);
|
|
|
|
}
|
|
|
|
|
|
|
|
return list;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyObject* py_get_service_groups(PyObject *, PyObject *args)
|
|
|
|
{
|
|
|
|
char *rel_path;
|
|
|
|
if (!PyArg_ParseTuple(args, (char*)"s:getServiceGroup", &rel_path))
|
|
|
|
return NULL;
|
|
|
|
return getServiceGroups(rel_path);
|
|
|
|
}
|
|
|
|
|