/*************************************************************************** * * * Copyright (C) 2004 Luke Kenneth Casson Leighton * * * * 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 #include "task_python.h" #include #include #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(e)); tuple = get_svc_grp(g); } else if (e->isType(KST_KService)) { KService::Ptr g(static_cast(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); }