File 0001-kbanking5-kmymoney-4.5.2.patch of Package kmymoney

Backport from http://reviewboard.kde.org/r/5524/

---
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/cmake/modules/FindAqBanking.cmake kmymoney-4.5.2-kbanking5/cmake/modules/FindAqBanking.cmake
--- kmymoney-4.5.2/cmake/modules/FindAqBanking.cmake	2010-12-23 10:21:31.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/cmake/modules/FindAqBanking.cmake	2011-01-15 12:11:43.334440631 +0100
@@ -8,14 +8,17 @@
 set(AQBANKING_FOUND FALSE)
 
 if(NOT AQBANKING_MIN_VERSION)
-  set(AQBANKING_MIN_VERSION "4.2.4")
+  set(AQBANKING_MIN_VERSION "5.0.0")
 endif(NOT AQBANKING_MIN_VERSION)
 
 if(NOT AQBANKING_MAX_VERSION)
   # for some unknown reason, we need to give a micro version number
-  # with an offset of 1 to the PKG_CHECK_MODULES macro. The actual
-  # version KBanking will work with is 4.99.8
-  set(AQBANKING_MAX_VERSION "4.99.9")
+  # with an offset of 1 to the PKG_CHECK_MODULES macro.
+  # The actual version of KBanking will work with is 4.99.8
+
+  # set(AQBANKING_MAX_VERSION "4.99.9")
+  
+  # Currently there is no max version necessary
 endif(NOT AQBANKING_MAX_VERSION)
 
 if(AQBANKING_INCLUDE_DIRS AND AQBANKING_LIBRARIES)
@@ -23,11 +26,10 @@
   set(AQBANKING_FIND_QUIETLY TRUE)
 endif(AQBANKING_INCLUDE_DIRS AND AQBANKING_LIBRARIES)
 
-PKG_CHECK_MODULES(AQBANKING aqbanking>=${AQBANKING_MIN_VERSION} aqbanking<=${AQBANKING_MAX_VERSION})
-
-if(${AQBANKING_FOUND})
-  # if AqBanking has been found make sure to add the q4banking lib
-  set(AQBANKING_LIBRARIES ${AQBANKING_LIBRARIES} q4banking)
-endif(${AQBANKING_FOUND})
+if(AQBANKING_MIN_VERSION AND AQBANKING_MAX_VERSION)
+  PKG_CHECK_MODULES(AQBANKING aqbanking>=${AQBANKING_MIN_VERSION} aqbanking<=${AQBANKING_MAX_VERSION})
+else (AQBANKING_MIN_VERSION AND AQBANKING_MAX_VERSION)
+  PKG_CHECK_MODULES(AQBANKING aqbanking>=${AQBANKING_MIN_VERSION})
+endif (AQBANKING_MIN_VERSION AND AQBANKING_MAX_VERSION)
 
 mark_as_advanced(AQBANKING_INCLUDE_DIRS AQBANKING_LIBRARIES)
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/cmake/modules/FindGwenhywfar.cmake kmymoney-4.5.2-kbanking5/cmake/modules/FindGwenhywfar.cmake
--- kmymoney-4.5.2/cmake/modules/FindGwenhywfar.cmake	2010-12-23 10:21:31.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/cmake/modules/FindGwenhywfar.cmake	2011-01-15 11:56:31.985068977 +0100
@@ -8,7 +8,7 @@
 set(GWENHYWFAR_FOUND FALSE)
 
 if(NOT GWENHYWFAR_MIN_VERSION)
-  set(GWENHYWFAR_MIN_VERSION "3.10.1")
+  set(GWENHYWFAR_MIN_VERSION "4.0.0")
 endif(NOT GWENHYWFAR_MIN_VERSION)
 
 if(GWENHYWFAR_INCLUDE_DIRS AND GWENHYWFAR_LIBRARIES)
@@ -19,12 +19,23 @@
 PKG_CHECK_MODULES(GWENHYWFAR gwenhywfar>=${GWENHYWFAR_MIN_VERSION})
 
 if(${GWENHYWFAR_FOUND})
-  find_library(GWENHYWFAR_GUI_LIBRARY NAMES gwengui-qt4 libgwengui-qt4
-    HINTS ${GWENHYWFAR_LIBRARY_DIRS})
-  if(GWENHYWFAR_GUI_LIBRARY STREQUAL "GWENHYWFAR_GUI_LIBRARY-NOTFOUND")
-    set(GWENHYWFAR_GUI_LIBRARY "")
-  endif(GWENHYWFAR_GUI_LIBRARY STREQUAL "GWENHYWFAR_GUI_LIBRARY-NOTFOUND")
-  set(GWENHYWFAR_LIBRARIES ${GWENHYWFAR_LIBRARIES} ${GWENHYWFAR_GUI_LIBRARY})
+  PKG_CHECK_MODULES(QT4GUI gwengui-qt4)
+  if (NOT ${QT4GUI_FOUND})
+    set(GWENHYWFAR_FOUND FALSE)
+    unset(GWENHYWFAR_INCLUDE_DIRS)
+    unset(GWENHYWFAR_LIBRARIES)
+    unset(GWENHYWFAR_VERSION)
+    message(STATUS "Gwenhywfar does not have the Q4Banking frontend enabled")
+  endif (NOT ${QT4GUI_FOUND})
+
+  if(${GWENHYWFAR_FOUND})
+    find_library(GWENHYWFAR_GUI_LIBRARY NAMES gwengui-qt4 libgwengui-qt4
+      HINTS ${GWENHYWFAR_LIBRARY_DIRS})
+    if(GWENHYWFAR_GUI_LIBRARY STREQUAL "GWENHYWFAR_GUI_LIBRARY-NOTFOUND")
+      set(GWENHYWFAR_GUI_LIBRARY "")
+    endif(GWENHYWFAR_GUI_LIBRARY STREQUAL "GWENHYWFAR_GUI_LIBRARY-NOTFOUND")
+    set(GWENHYWFAR_LIBRARIES ${GWENHYWFAR_LIBRARIES} ${GWENHYWFAR_GUI_LIBRARY})
+  endif(${GWENHYWFAR_FOUND})
 endif(${GWENHYWFAR_FOUND})
 
 mark_as_advanced(GWENHYWFAR_INCLUDE_DIRS GWENHYWFAR_LIBRARIES)
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/CMakeLists.txt kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/CMakeLists.txt
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/CMakeLists.txt	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/CMakeLists.txt	2011-01-15 11:56:31.992074382 +0100
@@ -17,7 +17,10 @@
 
 ########### next target ###############
 
-SET(kmm_kbanking_PART_SRCS kbanking.cpp mymoneybanking.cpp)
+SET(kmm_kbanking_PART_SRCS 
+    mymoneybanking.cpp
+    banking.cpp
+    )
 
 KDE4_ADD_PLUGIN(kmm_kbanking ${kmm_kbanking_PART_SRCS})
 
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/banking.cpp kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/banking.cpp
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/banking.cpp	1970-01-01 01:00:00.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/banking.cpp	2011-01-15 11:56:31.993068929 +0100
@@ -0,0 +1,462 @@
+/***************************************************************************
+    begin       : Mon Mar 01 2004
+    copyright   : (C) 2004 by Martin Preuss
+    email       : martin@libchipcard.de
+
+ ***************************************************************************
+ * This file is part of the project "AqBanking".                           *
+ * Please see toplevel file COPYING of that project for license details.   *
+ ***************************************************************************/
+
+
+#ifdef HAVE_CONFIG_H
+# include <config-kmymoney.h>
+#endif
+
+
+#include "banking.hpp"
+#include <aqbanking/banking_be.h>
+#include <aqbanking/banking_cfg.h>
+#include <assert.h>
+
+#include <gwenhywfar/inherit.h>
+#include <gwenhywfar/debug.h>
+
+
+
+AB_Banking::AB_Banking(const char *appname, const char *fname)
+{
+  assert(appname);
+  _banking = AB_Banking_new(appname, fname, 0);
+}
+
+
+
+AB_Banking::~AB_Banking()
+{
+  DBG_NOTICE(AQBANKING_LOGDOMAIN, "~AB_Banking: Freeing AB_Banking");
+  AB_Banking_free(_banking);
+}
+
+
+
+int AB_Banking::init()
+{
+  return AB_Banking_Init(_banking);
+}
+
+
+
+int AB_Banking::fini()
+{
+  return AB_Banking_Fini(_banking);
+}
+
+
+
+int AB_Banking::onlineInit()
+{
+  return AB_Banking_OnlineInit(_banking);
+}
+
+
+
+int AB_Banking::onlineFini()
+{
+  return AB_Banking_OnlineFini(_banking);
+}
+
+
+
+const char *AB_Banking::getAppName()
+{
+  return AB_Banking_GetAppName(_banking);
+}
+
+
+
+std::list<AB_ACCOUNT*> AB_Banking::getAccounts()
+{
+  AB_ACCOUNT_LIST2 *ll;
+  std::list<AB_ACCOUNT*> rl;
+
+  ll = AB_Banking_GetAccounts(_banking);
+  if (ll) {
+    AB_ACCOUNT *a;
+    AB_ACCOUNT_LIST2_ITERATOR *it;
+
+    it = AB_Account_List2_First(ll);
+    assert(it);
+    a = AB_Account_List2Iterator_Data(it);
+    assert(a);
+    while (a) {
+      rl.push_back(a);
+      a = AB_Account_List2Iterator_Next(it);
+    }
+    AB_Account_List2Iterator_free(it);
+    AB_Account_List2_free(ll);
+  }
+  return rl;
+}
+
+
+
+AB_ACCOUNT *AB_Banking::getAccount(uint32_t uniqueId)
+{
+  return AB_Banking_GetAccount(_banking, uniqueId);
+}
+
+
+
+std::list<AB_USER*> AB_Banking::getUsers()
+{
+  AB_USER_LIST2 *ll;
+  std::list<AB_USER*> rl;
+
+  ll = AB_Banking_GetUsers(_banking);
+  if (ll) {
+    AB_USER *a;
+    AB_USER_LIST2_ITERATOR *it;
+
+    it = AB_User_List2_First(ll);
+    assert(it);
+    a = AB_User_List2Iterator_Data(it);
+    assert(a);
+    while (a) {
+      rl.push_back(a);
+      a = AB_User_List2Iterator_Next(it);
+    }
+    AB_User_List2Iterator_free(it);
+    AB_User_List2_free(ll);
+  }
+  return rl;
+}
+
+
+
+int AB_Banking::getUserDataDir(GWEN_BUFFER *buf) const
+{
+  return AB_Banking_GetUserDataDir(_banking, buf);
+}
+
+
+
+int AB_Banking::getAppUserDataDir(GWEN_BUFFER *buf) const
+{
+  return AB_Banking_GetAppUserDataDir(_banking, buf);
+}
+
+
+
+AB_BANKING *AB_Banking::getCInterface()
+{
+  return _banking;
+}
+
+
+
+std::list<std::string> AB_Banking::getActiveProviders()
+{
+  const GWEN_STRINGLIST *sl;
+  std::list<std::string> l;
+
+  sl = AB_Banking_GetActiveProviders(_banking);
+  if (sl) {
+    GWEN_STRINGLISTENTRY *se;
+
+    se = GWEN_StringList_FirstEntry(sl);
+    assert(se);
+    while (se) {
+      const char *p;
+
+      p = GWEN_StringListEntry_Data(se);
+      assert(p);
+      l.push_back(p);
+      se = GWEN_StringListEntry_Next(se);
+    } /* while */
+  }
+  return l;
+}
+
+
+AB_PROVIDER *AB_Banking::getProvider(const char *name)
+{
+  return AB_Banking_GetProvider(_banking, name);
+}
+
+
+
+bool AB_Banking::importContext(AB_IMEXPORTER_CONTEXT *ctx, uint32_t flags)
+{
+  AB_IMEXPORTER_ACCOUNTINFO *ai;
+
+  ai = AB_ImExporterContext_GetFirstAccountInfo(ctx);
+  while (ai) {
+    if (!importAccountInfo(ai, flags))
+      return false;
+    ai = AB_ImExporterContext_GetNextAccountInfo(ctx);
+  }
+
+  return true;
+}
+
+
+
+bool AB_Banking::importAccountInfo(AB_IMEXPORTER_ACCOUNTINFO*, uint32_t)
+{
+  return false;
+}
+
+
+
+int AB_Banking::executeJobs(AB_JOB_LIST2 *jl, AB_IMEXPORTER_CONTEXT *ctx)
+{
+  return AB_Banking_ExecuteJobs(_banking, jl, ctx);
+}
+
+
+
+int AB_Banking::loadSharedConfig(const char *name, GWEN_DB_NODE **pDb)
+{
+  return AB_Banking_LoadSharedConfig(_banking, name, pDb);
+}
+
+
+
+int AB_Banking::saveSharedConfig(const char *name, GWEN_DB_NODE *db)
+{
+  return AB_Banking_SaveSharedConfig(_banking, name, db);
+}
+
+
+
+int AB_Banking::lockSharedConfig(const char *name)
+{
+  return AB_Banking_LockSharedConfig(_banking, name);
+}
+
+
+
+int AB_Banking::unlockSharedConfig(const char *name)
+{
+  return AB_Banking_UnlockSharedConfig(_banking, name);
+}
+
+
+
+int AB_Banking::loadSharedSubConfig(const char *name,
+                                    const char *subGroup,
+                                    GWEN_DB_NODE **pDb)
+{
+  GWEN_DB_NODE *dbShared = NULL;
+  int rv;
+
+  rv = loadSharedConfig(name, &dbShared);
+  if (rv < 0) {
+    DBG_ERROR(0, "Unable to load config (%d)", rv);
+    GWEN_DB_Group_free(dbShared);
+    return rv;
+  } else {
+    GWEN_DB_NODE *dbSrc;
+
+    dbSrc = GWEN_DB_GetGroup(dbShared,
+                             GWEN_PATH_FLAGS_NAMEMUSTEXIST,
+                             subGroup);
+    if (dbSrc) {
+      *pDb = GWEN_DB_Group_dup(dbSrc);
+    } else {
+      *pDb = GWEN_DB_Group_new("config");
+    }
+    GWEN_DB_Group_free(dbShared);
+
+    return 0;
+  }
+}
+
+
+
+int AB_Banking::saveSharedSubConfig(const char *name,
+                                    const char *subGroup,
+                                    GWEN_DB_NODE *dbSrc)
+{
+  GWEN_DB_NODE *dbShared = NULL;
+  int rv;
+
+  rv = lockSharedConfig(name);
+  if (rv < 0) {
+    DBG_ERROR(0, "Unable to lock config");
+    return rv;
+  } else {
+    rv = loadSharedConfig(name, &dbShared);
+    if (rv < 0) {
+      DBG_ERROR(0, "Unable to load config (%d)", rv);
+      unlockSharedConfig(name);
+      return rv;
+    } else {
+      GWEN_DB_NODE *dbDst;
+
+      dbDst = GWEN_DB_GetGroup(dbShared,
+                               GWEN_DB_FLAGS_OVERWRITE_GROUPS,
+                               subGroup);
+      assert(dbDst);
+      if (dbSrc)
+        GWEN_DB_AddGroupChildren(dbDst, dbSrc);
+      rv = saveSharedConfig(name, dbShared);
+      if (rv < 0) {
+        DBG_ERROR(0, "Unable to store config (%d)", rv);
+        unlockSharedConfig(name);
+        GWEN_DB_Group_free(dbShared);
+        return rv;
+      }
+      GWEN_DB_Group_free(dbShared);
+    }
+
+    rv = unlockSharedConfig(name);
+    if (rv < 0) {
+      DBG_ERROR(0, "Unable to unlock config (%d)", rv);
+      return rv;
+    }
+  }
+  return 0;
+}
+
+
+int AB_Banking::loadAppConfig(GWEN_DB_NODE **pDb)
+{
+  return AB_Banking_LoadAppConfig(_banking, pDb);
+}
+
+
+
+int AB_Banking::saveAppConfig(GWEN_DB_NODE *db)
+{
+  return AB_Banking_SaveAppConfig(_banking, db);
+}
+
+
+
+int AB_Banking::lockAppConfig()
+{
+  return AB_Banking_LockAppConfig(_banking);
+}
+
+
+
+int AB_Banking::unlockAppConfig()
+{
+  return AB_Banking_UnlockAppConfig(_banking);
+}
+
+
+
+int AB_Banking::loadAppSubConfig(const char *subGroup,
+                                 GWEN_DB_NODE **pDb)
+{
+  GWEN_DB_NODE *dbApp = NULL;
+  int rv;
+
+  rv = loadAppConfig(&dbApp);
+  if (rv < 0) {
+    DBG_ERROR(0, "Unable to load config (%d)", rv);
+    GWEN_DB_Group_free(dbApp);
+    return rv;
+  } else {
+    GWEN_DB_NODE *dbSrc;
+
+    dbSrc = GWEN_DB_GetGroup(dbApp,
+                             GWEN_PATH_FLAGS_NAMEMUSTEXIST,
+                             subGroup);
+    if (dbSrc) {
+      *pDb = GWEN_DB_Group_dup(dbSrc);
+    } else {
+      *pDb = GWEN_DB_Group_new("config");
+    }
+    GWEN_DB_Group_free(dbApp);
+
+    return 0;
+  }
+}
+
+
+
+int AB_Banking::saveAppSubConfig(const char *subGroup,
+                                 GWEN_DB_NODE *dbSrc)
+{
+  GWEN_DB_NODE *dbApp = NULL;
+  int rv;
+
+  rv = lockAppConfig();
+  if (rv < 0) {
+    DBG_ERROR(0, "Unable to lock config");
+    return rv;
+  } else {
+    rv = loadAppConfig(&dbApp);
+    if (rv < 0) {
+      DBG_ERROR(0, "Unable to load config (%d)", rv);
+      unlockAppConfig();
+      return rv;
+    } else {
+      GWEN_DB_NODE *dbDst;
+
+      dbDst = GWEN_DB_GetGroup(dbApp,
+                               GWEN_DB_FLAGS_OVERWRITE_GROUPS,
+                               subGroup);
+      assert(dbDst);
+      if (dbSrc)
+        GWEN_DB_AddGroupChildren(dbDst, dbSrc);
+      rv = saveAppConfig(dbApp);
+      if (rv < 0) {
+        DBG_ERROR(0, "Unable to store config (%d)", rv);
+        unlockAppConfig();
+        GWEN_DB_Group_free(dbApp);
+        return rv;
+      }
+      GWEN_DB_Group_free(dbApp);
+    }
+
+    rv = unlockAppConfig();
+    if (rv < 0) {
+      DBG_ERROR(0, "Unable to unlock config (%d)", rv);
+      return rv;
+    }
+  }
+  return 0;
+}
+
+
+int AB_Banking::beginExclUseAccount(AB_ACCOUNT *a)
+{
+  return AB_Banking_BeginExclUseAccount(_banking, a);
+}
+
+
+
+int AB_Banking::endExclUseAccount(AB_ACCOUNT *a, int abandon)
+{
+  return AB_Banking_EndExclUseAccount(_banking, a, abandon);
+}
+
+
+
+int AB_Banking::beginExclUseUser(AB_USER *u)
+{
+  return AB_Banking_BeginExclUseUser(_banking, u);
+}
+
+
+
+int AB_Banking::endExclUseUser(AB_USER *u, int abandon)
+{
+  return AB_Banking_EndExclUseUser(_banking, u, abandon);
+}
+
+
+void AB_Banking::setAccountAlias(AB_ACCOUNT *a, const char *alias)
+{
+  AB_Banking_SetAccountAlias(_banking, a, alias);
+}
+
+
+
+
+
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/banking.hpp kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/banking.hpp
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/banking.hpp	1970-01-01 01:00:00.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/banking.hpp	2011-01-15 11:56:31.992074382 +0100
@@ -0,0 +1,185 @@
+/***************************************************************************
+    begin       : Mon Mar 01 2004
+    copyright   : (C) 2004 by Martin Preuss
+    email       : martin@libchipcard.de
+
+ ***************************************************************************
+ * This file is part of the project "AqBanking".                           *
+ * Please see toplevel file COPYING of that project for license details.   *
+ ***************************************************************************/
+
+/** @file 
+ * @short A C++ wrapper of the main aqbanking interface
+ */
+
+#ifndef AQ_BANKING_CPP_H
+#define AQ_BANKING_CPP_H
+
+
+#include <aqbanking/banking.h>
+#include <aqbanking/system.h>
+
+#include <list>
+#include <string>
+
+
+/**
+ * @brief A C++ binding for the C module @ref AB_BANKING
+ *
+ * This class simply is a C++ binding for the C module @ref AB_BANKING.
+ * It redirects C callbacks used by AB_BANKING to virtual functions in
+ * this class. It als transforms some return values inconveniant for
+ * C++ into STL objects (such as "list<T>").
+ *
+ * @ingroup G_AB_CPP_INTERFACE
+ *
+ * @author Martin Preuss<martin@aquamaniac.de>
+ */
+class AB_Banking {
+private:
+  AB_BANKING *_banking;
+
+public:
+  AB_Banking(const char *appname,
+          const char *fname);
+  virtual ~AB_Banking();
+
+
+  AB_BANKING *getCInterface();
+
+
+  /**
+   * See @ref AB_Banking_Init
+   */
+  virtual int init();
+
+  /**
+   * See @ref AB_Banking_Fini
+   */
+  virtual int fini();
+
+
+  /**
+   * See @ref AB_Banking_OnlineInit
+   */
+  int onlineInit();
+
+  /**
+   * See @ref AB_Banking_OnlineFini
+   */
+  int onlineFini();
+
+  /**
+   * Loads a backend with the given name. You can use
+   * @ref AB_Banking_GetProviderDescrs to retrieve a list of available
+   * backends. Such a backend can then be asked to return an account list.
+   */
+  AB_PROVIDER *getProvider(const char *name);
+
+
+  /**
+   * Returns the application name as given to @ref AB_Banking_new.
+   */
+  const char *getAppName();
+
+  /**
+   * Returns a list of pointers to currently known accounts.
+   * Please note that the pointers in this list are still owned by
+   * AqBanking, so you MUST NOT free them.
+   * However, destroying the list will not free the accounts, so it is
+   * safe to do that.
+   */
+  std::list<AB_ACCOUNT*> getAccounts();
+
+  /**
+   * This function does an account lookup based on the given unique id.
+   * This id is assigned by AqBanking when an account is created.
+   * The pointer returned is still owned by AqBanking, so you MUST NOT free
+   * it.
+   */
+  AB_ACCOUNT *getAccount(uint32_t uniqueId);
+
+  /**
+   * Returns a list of pointers to currently known users.
+   * Please note that the pointers in this list are still owned by
+   * AqBanking, so you MUST NOT free them.
+   * However, destroying the list will not free the users, so it is
+   * safe to do that.
+   */
+  std::list<AB_USER*> getUsers();
+
+  int getUserDataDir(GWEN_BUFFER *buf) const ;
+  int getAppUserDataDir(GWEN_BUFFER *buf) const ;
+
+  int loadAppConfig(GWEN_DB_NODE **pDb);
+  int saveAppConfig(GWEN_DB_NODE *db);
+  int lockAppConfig();
+  int unlockAppConfig();
+
+  int loadAppSubConfig(const char *subGroup,
+		       GWEN_DB_NODE **pDb);
+
+  int saveAppSubConfig(const char *subGroup,
+		       GWEN_DB_NODE *dbSrc);
+
+
+  int loadSharedConfig(const char *name, GWEN_DB_NODE **pDb);
+  int saveSharedConfig(const char *name, GWEN_DB_NODE *db);
+  int lockSharedConfig(const char *name);
+  int unlockSharedConfig(const char *name);
+
+  int loadSharedSubConfig(const char *name,
+			  const char *subGroup,
+			  GWEN_DB_NODE **pDb);
+
+  int saveSharedSubConfig(const char *name,
+			  const char *subGroup,
+			  GWEN_DB_NODE *dbSrc);
+
+  int beginExclUseAccount(AB_ACCOUNT *a);
+  int endExclUseAccount(AB_ACCOUNT *a, int abandon);
+
+  int beginExclUseUser(AB_USER *u);
+  int endExclUseUser(AB_USER *u, int abandon);
+
+  std::list<std::string> getActiveProviders();
+
+  void setAccountAlias(AB_ACCOUNT *a, const char *alias);
+
+
+  /** @name Enqueueing, Dequeueing and Executing Jobs
+   *
+   * Enqueued jobs are preserved across shutdowns. As soon as a job has been
+   * sent to the appropriate backend it will be removed from the queue.
+   * Only those jobs are saved/reloaded which have been enqueued but never
+   * presented to the backend. This means after calling
+   * @ref AB_Banking_ExecuteQueue only those jobs are still in the queue which
+   * have not been processed (e.g. because they belonged to a second backend
+   * but the user aborted while the jobs for a first backend were in process).
+   */
+  /*@{*/
+  /**
+   * This function sends all jobs in the list to their corresponding backends
+   * and allows that backend to process it.
+   */
+  virtual int executeJobs(AB_JOB_LIST2 *jl,
+			  AB_IMEXPORTER_CONTEXT *ctx);
+
+  /*@}*/
+
+  /**
+   * Let the application import a given statement context.
+   */
+  virtual bool importContext(AB_IMEXPORTER_CONTEXT *ctx,
+                             uint32_t flags);
+
+  virtual bool importAccountInfo(AB_IMEXPORTER_ACCOUNTINFO *ai, uint32_t flags);
+
+};
+
+
+
+
+#endif /* AQ_BANKING_CPP_H */
+
+
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/CMakeLists.txt kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/CMakeLists.txt
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/CMakeLists.txt	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/CMakeLists.txt	2011-01-15 11:56:31.993068929 +0100
@@ -4,12 +4,13 @@
 SET(kmm_kbanking_dialogs_la_SOURCES
     kbaccountsettings.cpp
     kbpickstartdate.cpp
-    kbsettings.cpp
+    kbmapaccount.cpp
     )
 
 SET(kmm_kbanking_dialogs_UI
     kbaccountsettings.ui
     kbpickstartdate.ui
+    kbmapaccount.ui
     )
 
 KDE4_ADD_UI_FILES(kmm_kbanking_dialogs_la_SOURCES
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbmapaccount.cpp kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbmapaccount.cpp
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbmapaccount.cpp	1970-01-01 01:00:00.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbmapaccount.cpp	2011-01-15 11:56:31.993068929 +0100
@@ -0,0 +1,111 @@
+/***************************************************************************
+    begin       : Mon Mar 01 2004
+    copyright   : (C) 2004 by Martin Preuss
+    email       : martin@libchipcard.de
+
+ ***************************************************************************
+ *          Please see toplevel file COPYING for license details           *
+ ***************************************************************************/
+
+
+#ifdef HAVE_CONFIG_H
+# include <config-kmymoney.h>
+#endif
+
+
+// QBanking includes
+#include "kbmapaccount.h"
+#include "kbaccountlist.h"
+#include "mymoneybanking.h"
+
+// QT includes
+#include <qlabel.h>
+#include <qpushbutton.h>
+#include <qmessagebox.h>
+#include <qlayout.h>
+#include <qpushbutton.h>
+#include <qlineedit.h>
+
+
+
+
+KBMapAccount::KBMapAccount(KMyMoneyBanking *kb,
+                           const char *bankCode,
+                           const char *accountId,
+                           QWidget* parent,
+                           Qt::WFlags fl)
+    : QDialog(parent, fl)
+    , _banking(kb)
+    , _account(0)
+{
+  _ui.setupUi(this);
+
+  _ui.accountList->setSelectionMode(QAbstractItemView::SingleSelection);
+
+  if (bankCode)
+    _ui.bankCodeEdit->setText(QString::fromUtf8(bankCode));
+  else
+    _ui.bankCodeEdit->setEnabled(false);
+  if (accountId)
+    _ui.accountIdEdit->setText(QString::fromUtf8(accountId));
+  else
+    _ui.accountIdEdit->setEnabled(false);
+
+  QObject::connect(_ui.accountList, SIGNAL(itemSelectionChanged()),
+                   this, SLOT(slotSelectionChanged()));
+  QObject::connect(_ui.helpButton, SIGNAL(clicked()),
+                   this, SLOT(slotHelpClicked()));
+
+  _ui.accountList->addAccounts(_banking->getAccounts());
+}
+
+
+KBMapAccount::~KBMapAccount()
+{
+}
+
+
+
+AB_ACCOUNT *KBMapAccount::getAccount()
+{
+  return _account;
+}
+
+
+
+void KBMapAccount::accept()
+{
+  if (_account)
+    QDialog::accept();
+}
+
+
+
+void KBMapAccount::slotSelectionChanged()
+{
+  std::list<AB_ACCOUNT*> al;
+  AB_ACCOUNT *a;
+
+  al = _ui.accountList->getSelectedAccounts();
+  if (al.empty()) {
+    _ui.assignButton->setEnabled(false);
+    _account = 0;
+    return;
+  }
+  a = al.front();
+  if (AB_Account_GetUniqueId(a) != 0) {
+    _account = a;
+    _ui.assignButton->setEnabled(true);
+  } else
+    _ui.assignButton->setEnabled(false);
+}
+
+
+
+void KBMapAccount::slotHelpClicked()
+{
+}
+
+
+
+
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbmapaccount.h kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbmapaccount.h
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbmapaccount.h	1970-01-01 01:00:00.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbmapaccount.h	2011-01-15 11:56:31.993068929 +0100
@@ -0,0 +1,54 @@
+/***************************************************************************
+    begin       : Mon Mar 01 2004
+    copyright   : (C) 2004 by Martin Preuss
+    email       : martin@libchipcard.de
+
+ ***************************************************************************
+ *          Please see toplevel file COPYING for license details           *
+ ***************************************************************************/
+
+#ifndef QBANKING_MAPACCOUNT_H
+#define QBANKING_MAPACCOUNT_H
+
+#include "mymoneybanking.h"
+#include "kbaccountlist.h"
+#include "ui_kbmapaccount.h"
+
+#include <aqbanking/account.h>
+
+
+class KMyMoneyBanking;
+
+
+class KBMapAccount: public QDialog
+{
+  Q_OBJECT
+public:
+  KBMapAccount(KMyMoneyBanking *kb,
+               const char *bankCode,
+               const char *accountId,
+               QWidget* parent = 0,
+               Qt::WFlags fl = 0);
+  ~KBMapAccount();
+
+  AB_ACCOUNT *getAccount();
+
+  void accept();
+
+protected slots:
+  void slotSelectionChanged();
+  void slotHelpClicked();
+
+private:
+  Ui_KBMapAccountUi _ui;
+  KMyMoneyBanking *_banking;
+  AB_ACCOUNT *_account;
+  KBAccountListView *_accountList;
+};
+
+
+
+
+
+#endif /* QBANKING_MAPACCOUNT_H */
+
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbmapaccount.ui kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbmapaccount.ui
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbmapaccount.ui	1970-01-01 01:00:00.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbmapaccount.ui	2011-01-15 11:56:31.994345146 +0100
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>KBMapAccountUi</class>
+ <widget class="QDialog" name="KBMapAccountUi">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>743</width>
+    <height>534</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Account Mapping</string>
+  </property>
+  <layout class="QVBoxLayout">
+   <item>
+    <widget class="QLabel" name="textLabel1">
+     <property name="text">
+      <string>&lt;qt&gt;
+Please choose the &lt;b&gt;online&lt;/b&gt; account you want the 
+&lt;b&gt;application&lt;/b&gt; account to be mapped to from the list below.
+&lt;/qt&gt;</string>
+     </property>
+     <property name="wordWrap">
+      <bool>false</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox1">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title">
+      <string>Application Account</string>
+     </property>
+     <layout class="QHBoxLayout">
+      <item>
+       <widget class="QLabel" name="textLabel2">
+        <property name="text">
+         <string>Bank Code</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="bankCodeEdit">
+        <property name="readOnly">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLabel" name="textLabel2_2">
+        <property name="text">
+         <string>Account Number</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QLineEdit" name="accountIdEdit">
+        <property name="readOnly">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="accountBox">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title">
+      <string>Online Accounts</string>
+     </property>
+     <layout class="QHBoxLayout">
+      <item>
+       <widget class="KBAccountListView" name="accountList" native="true"/>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout">
+     <item>
+      <widget class="QPushButton" name="helpButton">
+       <property name="text">
+        <string>Help</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="spacer1">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeType">
+        <enum>QSizePolicy::Expanding</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>326</width>
+         <height>29</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="assignButton">
+       <property name="text">
+        <string>Assign</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="abortButton">
+       <property name="text">
+        <string>Abort</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <customwidgets>
+  <customwidget>
+   <class>KBAccountListView</class>
+   <extends>QWidget</extends>
+   <header>kbaccountlist.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>abortButton</sender>
+   <signal>clicked()</signal>
+   <receiver>KBMapAccountUi</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>676</x>
+     <y>521</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>512</x>
+     <y>430</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>assignButton</sender>
+   <signal>clicked()</signal>
+   <receiver>KBMapAccountUi</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>590</x>
+     <y>521</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>452</x>
+     <y>459</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.cpp kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.cpp
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.cpp	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.cpp	2011-01-15 11:56:31.994345146 +0100
@@ -25,7 +25,6 @@
 
 // QBanking includes
 #include "kbpickstartdate.h"
-#include <q4banking/qbanking.h>
 
 // Gwenhywfar includes
 #include <gwenhywfar/debug.h>
@@ -46,7 +45,7 @@
 
 
 
-KBPickStartDate::KBPickStartDate(QBanking *qb,
+KBPickStartDate::KBPickStartDate(KMyMoneyBanking* qb,
                                  const QDate &firstPossible,
                                  const QDate &lastUpdate,
                                  const QString& accountName,
@@ -139,6 +138,5 @@
 
 void KBPickStartDate::slotHelpClicked()
 {
-  _banking->invokeHelp("KBPickStartDate", "none");
 }
 
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.h kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.h
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.h	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbpickstartdate.h	2011-01-15 11:56:31.994345146 +0100
@@ -25,8 +25,7 @@
 #include <QDateTime>
 #include <QDialog>
 
-
-class QBanking;
+#include "mymoneybanking.h"
 
 /**
   * Class derived from QBPickStartDate and modified to
@@ -39,11 +38,11 @@
 {
   Q_OBJECT
 private:
-  QBanking *_banking;
+  KMyMoneyBanking *_banking;
   const QDate &_firstPossible;
   const QDate &_lastUpdate;
 public:
-  KBPickStartDate(QBanking *banking,
+  KBPickStartDate(KMyMoneyBanking* qb,
                   const QDate &firstPossible,
                   const QDate &lastUpdate,
                   const QString& accountName,
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbsettings.cpp kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbsettings.cpp
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbsettings.cpp	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbsettings.cpp	2011-01-15 11:56:31.995451578 +0100
@@ -1,58 +0,0 @@
-/***************************************************************************
- *   Copyright 2009  Cristian Onet onet.cristian@gmail.com                 *
- *   Copyright 2004  Martin Preuss aquamaniac@users.sourceforge.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; either version 2 of        *
- *   the License or (at your option) version 3 or any later version        *
- *   accepted by the membership of KDE e.V. (or its successor approved     *
- *   by the membership of KDE e.V.), which shall act as a proxy            *
- *   defined in Section 14 of version 3 of the license.                    *
- *                                                                         *
- *   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.  If not, see <http://www.gnu.org/licenses/>  *
- ***************************************************************************/
-#ifdef HAVE_CONFIG_H
-# include <config-kmymoney.h>
-#endif
-
-#include "kbsettings.h"
-
-#include <gwenhywfar/debug.h>
-
-KBankingSettings::KBankingSettings(KBanking *ab,
-                                   QWidget* parent,
-                                   const char* name,
-                                   Qt::WFlags fl)
-    : QBCfgTabSettings(ab, parent, name, fl)
-{
-  addUsersPage();
-  addAccountsPage();
-  addBackendsPage();
-}
-
-KBankingSettings::~KBankingSettings()
-{
-}
-
-int KBankingSettings::init()
-{
-  if (!toGui()) {
-    DBG_ERROR(0, "Could not init dialog");
-    return -1;
-  }
-  return 0;
-}
-
-int KBankingSettings::fini()
-{
-  if (!fromGui())
-    return -1;
-  return 0;
-}
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbsettings.h kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbsettings.h
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/dialogs/kbsettings.h	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/dialogs/kbsettings.h	2011-01-15 11:56:31.995451578 +0100
@@ -1,40 +0,0 @@
-/***************************************************************************
- *   Copyright 2009  Cristian Onet onet.cristian@gmail.com                 *
- *   Copyright 2004  Martin Preuss aquamaniac@users.sourceforge.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; either version 2 of        *
- *   the License or (at your option) version 3 or any later version        *
- *   accepted by the membership of KDE e.V. (or its successor approved     *
- *   by the membership of KDE e.V.), which shall act as a proxy            *
- *   defined in Section 14 of version 3 of the license.                    *
- *                                                                         *
- *   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.  If not, see <http://www.gnu.org/licenses/>  *
- ***************************************************************************/
-#ifndef KBANKING_KBSETTINGS_H
-#define KBANKING_KBSETTINGS_H
-
-#include "kbanking.h"
-#include <q4banking/qbcfgtabsettings.h>
-
-class KBankingSettings: public QBCfgTabSettings
-{
-private:
-public:
-  explicit KBankingSettings(KBanking *ab,
-                            QWidget* parent = 0,
-                            const char* name = 0, Qt::WFlags fl = 0);
-  ~KBankingSettings();
-
-  int init();
-  int fini();
-};
-
-#endif /* KBANKING_KBSETTINGS_H */
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/kbanking.cpp kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/kbanking.cpp
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/kbanking.cpp	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/kbanking.cpp	2011-01-15 11:56:31.996073240 +0100
@@ -1,162 +0,0 @@
-/***************************************************************************
- *   Copyright 2009  Cristian Onet onet.cristian@gmail.com                 *
- *   Copyright 2004  Martin Preuss aquamaniac@users.sourceforge.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; either version 2 of        *
- *   the License or (at your option) version 3 or any later version        *
- *   accepted by the membership of KDE e.V. (or its successor approved     *
- *   by the membership of KDE e.V.), which shall act as a proxy            *
- *   defined in Section 14 of version 3 of the license.                    *
- *                                                                         *
- *   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.  If not, see <http://www.gnu.org/licenses/>  *
- ***************************************************************************/
-#ifdef HAVE_CONFIG_H
-# include <config-kmymoney.h>
-#endif
-
-
-#include "kbanking.h"
-
-#include <assert.h>
-#include <QString>
-#include <QMessageBox>
-#include <QInputDialog>
-#include <QApplication>
-#include <QDateTime>
-#include <QWidget>
-
-#include <gwenhywfar/debug.h>
-#include <gwenhywfar/text.h>
-
-KBanking::KBanking(const char *appname,
-                   const char *cfgDir) :
-    QBanking(appname, cfgDir),
-    _jobQueue(0)
-{
-}
-
-
-
-KBanking::~KBanking()
-{
-}
-
-
-
-int KBanking::init()
-{
-  int rv;
-
-  rv = QBanking::init();
-  if (rv < 0)
-    return rv;
-
-  rv = onlineInit();
-  if (rv) {
-    fprintf(stderr, "Error on online init (%d).\n", rv);
-    QBanking::fini();
-    return rv;
-  }
-
-  _jobQueue = AB_Job_List2_new();
-
-  return 0;
-}
-
-
-
-int KBanking::fini()
-{
-  int rv;
-
-  if (_jobQueue) {
-    AB_Job_List2_FreeAll(_jobQueue);
-    _jobQueue = 0;
-  }
-
-  rv = onlineFini();
-  if (rv) {
-    QBanking::fini();
-    return rv;
-  }
-  return QBanking::fini();
-}
-
-
-
-int KBanking::executeQueue(AB_IMEXPORTER_CONTEXT *ctx)
-{
-  int rv;
-  AB_JOB_LIST2 *oldQ;
-
-  rv = AB_BANKING_QBANKING_EXECUTE_JOBS(_jobQueue, ctx);
-  oldQ = _jobQueue;
-  _jobQueue = AB_Job_List2_new();
-  flagStaff()->queueUpdated();
-  AB_Job_List2_FreeAll(oldQ);
-  return rv;
-}
-
-
-
-std::list<AB_JOB*> KBanking::getEnqueuedJobs()
-{
-  AB_JOB_LIST2 *ll;
-  std::list<AB_JOB*> rl;
-
-  ll = _jobQueue;
-  if (ll && AB_Job_List2_GetSize(ll)) {
-    AB_JOB *j;
-    AB_JOB_LIST2_ITERATOR *it;
-
-    it = AB_Job_List2_First(ll);
-    assert(it);
-    j = AB_Job_List2Iterator_Data(it);
-    assert(j);
-    while (j) {
-      rl.push_back(j);
-      j = AB_Job_List2Iterator_Next(it);
-    }
-    AB_Job_List2Iterator_free(it);
-  }
-  return rl;
-}
-
-
-
-int KBanking::enqueueJob(AB_JOB *j)
-{
-  assert(_jobQueue);
-  assert(j);
-  AB_Job_Attach(j);
-  AB_Job_List2_PushBack(_jobQueue, j);
-  flagStaff()->queueUpdated();
-  return 0;
-}
-
-
-
-int KBanking::dequeueJob(AB_JOB *j)
-{
-  assert(_jobQueue);
-  AB_Job_List2_Remove(_jobQueue, j);
-  AB_Job_free(j);
-  flagStaff()->queueUpdated();
-  return 0;
-}
-
-
-
-
-
-
-
-
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/kbanking.h kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/kbanking.h
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/kbanking.h	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/kbanking.h	2011-01-15 11:56:31.995451578 +0100
@@ -1,86 +0,0 @@
-/***************************************************************************
- *   Copyright 2009  Cristian Onet onet.cristian@gmail.com                 *
- *   Copyright 2004  Martin Preuss aquamaniac@users.sourceforge.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; either version 2 of        *
- *   the License or (at your option) version 3 or any later version        *
- *   accepted by the membership of KDE e.V. (or its successor approved     *
- *   by the membership of KDE e.V.), which shall act as a proxy            *
- *   defined in Section 14 of version 3 of the license.                    *
- *                                                                         *
- *   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.  If not, see <http://www.gnu.org/licenses/>  *
- ***************************************************************************/
-#ifndef KBANKING_KBANKING_H
-#define KBANKING_KBANKING_H
-
-#include <aqbanking/version.h>
-#include <aqbanking/banking.h>
-#include <q4banking/qbanking.h>
-
-#ifndef AQB_MAKE_VERSION
-#define AQB_MAKE_VERSION(a,b,c,d) (((a)<<24) | ((b)<<16) | (c<<8) | (d))
-#endif
-
-#ifndef AQBANKING_VERSION
-#define AQBANKING_VERSION AQB_MAKE_VERSION(AQBANKING_VERSION_MAJOR,AQBANKING_VERSION_MINOR,AQBANKING_VERSION_PATCHLEVEL,AQBANKING_VERSION_BUILD)
-#endif
-
-#ifndef AQB_IS_VERSION
-#define AQB_IS_VERSION(a,b,c,d) (AQBANKING_VERSION >= AQB_MAKE_VERSION(a,b,c,d))
-#endif
-
-#ifndef KBANKING_GUIID
-#if AQB_IS_VERSION(4,99,0,0)
-#  define AB_BANKING_QBANKING_EXECUTE_JOBS(a, b) QBanking::executeJobs(a, b)
-#  define AB_BANKING_JOB_CHECKAVAILABILITY(a) AB_Job_CheckAvailability(a)
-#  define AB_BANKING_GETACCOUNTBYALIAS(a, b) AB_Banking_GetAccountByAlias(a, b)
-#elif AQB_IS_VERSION(3,9,0,0)
-#  define onlineInit() onlineInit(0)
-#  define onlineFini() onlineFini(0)
-#  define AB_BANKING_QBANKING_EXECUTE_JOBS(a, b) QBanking::executeJobs(a, b, 0)
-#  define AB_BANKING_GETACCOUNTBYALIAS(a, b) AB_Banking_GetAccountByAlias(a, b, 0)
-#  define AB_BANKING_JOB_CHECKAVAILABILITY(a) AB_Job_CheckAvailability(a, 0)
-#else
-#  define AB_BANKING_GETACCOUNTBYALIAS(a, b) AB_Banking_GetAccountByAlias(a, b)
-#endif
-#endif
-
-
-#include <list>
-
-
-class KBanking: public QBanking
-{
-private:
-  AB_JOB_LIST2 *_jobQueue;
-
-public:
-  explicit KBanking(const char *appname,
-                    const char *cfgDir = 0);
-  virtual ~KBanking();
-
-  int init();
-  int fini();
-
-  int executeQueue(AB_IMEXPORTER_CONTEXT *ctx);
-
-  int enqueueJob(AB_JOB *j);
-  int dequeueJob(AB_JOB *j);
-  std::list<AB_JOB*> getEnqueuedJobs();
-
-};
-
-
-
-
-#endif /* KBANKING_KBANKING_H */
-
-
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/mymoneybanking.cpp kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/mymoneybanking.cpp
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/mymoneybanking.cpp	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/mymoneybanking.cpp	2011-01-15 12:02:43.543075444 +0100
@@ -1,6 +1,7 @@
 /***************************************************************************
- *   Copyright 2009  Cristian Onet onet.cristian@gmail.com                 *
  *   Copyright 2004  Martin Preuss aquamaniac@users.sourceforge.net        *
+ *   Copyright 2009  Cristian Onet onet.cristian@gmail.com                 *
+ *   Copyright 2010  Thomas Baumgart ipwizard@users.sourceforge.net        *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or         *
  *   modify it under the terms of the GNU General Public License as        *
@@ -33,6 +34,7 @@
 #include <QRegExp>
 #include <QCheckBox>
 #include <QLabel>
+#include <QTimer>
 
 // ----------------------------------------------------------------------------
 // KDE Includes
@@ -59,9 +61,12 @@
 #include <aqbanking/jobgettransactions.h>
 #include <aqbanking/jobgetbalance.h>
 #include <aqbanking/job.h>
-#include <q4banking/qbgui.h>
+#include <aqbanking/abgui.h>
+#include <aqbanking/dlg_setup.h>
+#include <aqbanking/dlg_importer.h>
 #include <gwenhywfar/logger.h>
 #include <gwenhywfar/debug.h>
+#include <gwen-gui-qt4/qt4_gui.hpp>
 
 // ----------------------------------------------------------------------------
 // Project Includes
@@ -69,6 +74,7 @@
 #include "kbjobview.h"
 #include "kbsettings.h"
 #include "kbaccountsettings.h"
+#include "kbmapaccount.h"
 #include <kmymoney/mymoneyfile.h>
 #include <kmymoney/kmymoneyview.h>
 #include <kmymoney/mymoneykeyvaluecontainer.h>
@@ -80,7 +86,7 @@
 class KBankingPlugin::Private
 {
 public:
-  Private() {
+  Private() : passwordCacheTimer(0) {
     QString gwenProxy = QString::fromLocal8Bit(qgetenv("GWEN_PROXY"));
     if (gwenProxy.isEmpty()) {
       KConfig *cfg = new KConfig("kioslaverc");
@@ -112,6 +118,8 @@
       delete cfg;
     }
   }
+
+  QTimer *passwordCacheTimer;
 };
 
 KBankingPlugin::KBankingPlugin(QObject *parent, const QStringList&) :
@@ -122,10 +130,14 @@
 {
   m_kbanking = new KMyMoneyBanking(this, "KMyMoney");
 
+  d->passwordCacheTimer = new QTimer(this);
+  d->passwordCacheTimer->setSingleShot(true);
+  d->passwordCacheTimer->setInterval(60000);
+  connect(d->passwordCacheTimer, SIGNAL(timeout()), this, SLOT(slotClearPasswordCache()));
+
   if (m_kbanking) {
-    QBGui *gui;
+    QT4_Gui *gui;
 
-#if AQB_IS_VERSION(4,99,0,0)
     if (AB_Banking_HasConf4(m_kbanking->getCInterface())) {
       qDebug("KBankingPlugin: No AqB4 config found.");
       if (AB_Banking_HasConf3(m_kbanking->getCInterface())) {
@@ -139,33 +151,20 @@
         AB_Banking_ImportConf3(m_kbanking->getCInterface());
       }
     }
-#elif AQB_IS_VERSION(3,9,0,0)
-    if (AB_Banking_HasConf4(m_kbanking->getCInterface(), 0)) {
-      qDebug("KBankingPlugin: No AqB4 config found.");
-      if (AB_Banking_HasConf3(m_kbanking->getCInterface(), 0)) {
-        qDebug("KBankingPlugin: No AqB3 config found.");
-        if (!AB_Banking_HasConf2(m_kbanking->getCInterface(), 0)) {
-          qDebug("KBankingPlugin: AqB2 config found - converting.");
-          AB_Banking_ImportConf2(m_kbanking->getCInterface(), 0);
-        }
-      } else {
-        qDebug("KBankingPlugin: AqB3 config found - converting.");
-        AB_Banking_ImportConf3(m_kbanking->getCInterface(), 0);
-      }
-    }
-#endif
 
-    gui = new QBGui(m_kbanking);
+    gui = new QT4_Gui();
     GWEN_Gui_SetGui(gui->getCInterface());
     GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info);
     GWEN_Logger_SetLevel(AQBANKING_LOGDOMAIN, GWEN_LoggerLevel_Debug);
-    m_kbanking->setGui(gui);
     if (m_kbanking->init() == 0) {
       // Tell the host application to load my GUI component
       setComponentData(KGenericFactory<KBankingPlugin>::componentData());
       setXMLFile("kmm_kbanking.rc");
       qDebug("KMyMoney kbanking plugin loaded");
 
+      // get certificate handling and dialog settings management
+      AB_Gui_Extend(gui->getCInterface(), m_kbanking->getCInterface());
+
       // create view
       createJobView();
 
@@ -281,6 +280,7 @@
   QWidget* w = new KBJobView(m_kbanking, view, "JobView");
   viewInterface()->addWidget(view, w);
   connect(viewInterface(), SIGNAL(viewStateChanged(bool)), view, SLOT(setEnabled(bool)));
+  connect(this, SIGNAL(queueChanged()), w, SLOT(slotQueueUpdated()));
 }
 
 void KBankingPlugin::createActions(void)
@@ -298,15 +298,24 @@
 
 void KBankingPlugin::slotSettings(void)
 {
-  QPointer<KBankingSettings> bs = new KBankingSettings(m_kbanking);
-  if (bs->init())
-    qWarning("Error on ini of settings dialog.");
-  else {
-    bs->exec();
-    if (bs && bs->fini())
-      qWarning("Error on fini of settings dialog.");
+  if (m_kbanking) {
+    GWEN_DIALOG *dlg;
+    int rv;
+
+    dlg = AB_SetupDialog_new(m_kbanking->getCInterface());
+    if (dlg == NULL) {
+      DBG_ERROR(0, "Could not create setup dialog.");
+      return;
+    }
+
+    rv = GWEN_Gui_ExecDialog(dlg, 0);
+    if (rv == 0) {
+      DBG_ERROR(0, "Aborted by user");
+      GWEN_Dialog_free(dlg);
+      return;
+    }
+    GWEN_Dialog_free(dlg);
   }
-  delete bs;
 }
 
 bool KBankingPlugin::mapAccount(const MyMoneyAccount& acc, MyMoneyKeyValueContainer& settings)
@@ -346,7 +355,7 @@
     // at this point, the account should be mapped
     // so we search it and setup the account reference in the KMyMoney object
     AB_ACCOUNT* ab_acc;
-    ab_acc = AB_BANKING_GETACCOUNTBYALIAS(m_kbanking->getCInterface(), acc.id().toUtf8().data());
+    ab_acc = AB_Banking_GetAccountByAlias(m_kbanking->getCInterface(), acc.id().toUtf8().data());
     if (ab_acc) {
       MyMoneyAccount a(acc);
       setupAccountReference(a, ab_acc);
@@ -402,7 +411,7 @@
 {
   AB_ACCOUNT* ab_acc = 0;
   if (m_kbanking)
-    ab_acc = AB_BANKING_GETACCOUNTBYALIAS(m_kbanking->getCInterface(), acc.id().toUtf8().data());
+    ab_acc = AB_Banking_GetAccountByAlias(m_kbanking->getCInterface(), acc.id().toUtf8().data());
   return ab_acc != 0;
 }
 
@@ -427,7 +436,7 @@
     QDate qd;
 
     /* get AqBanking account */
-    ba = AB_BANKING_GETACCOUNTBYALIAS(m_kbanking->getCInterface(), acc.id().toUtf8().data());
+    ba = AB_Banking_GetAccountByAlias(m_kbanking->getCInterface(), acc.id().toUtf8().data());
     if (!ba) {
       KMessageBox::error(0,
                          i18n("<qt>"
@@ -448,7 +457,7 @@
       if (acc.onlineBankingSettings().value("kbanking-txn-download") != "no") {
         /* create getTransactions job */
         job = AB_JobGetTransactions_new(ba);
-        rv = AB_BANKING_JOB_CHECKAVAILABILITY(job);
+        rv = AB_Job_CheckAvailability(job);
         if (rv) {
           DBG_ERROR(0, "Job \"GetTransactions\" is not available (%d)", rv);
           KMessageBox::error(0,
@@ -540,7 +549,7 @@
 
       /* create getBalance job */
       job = AB_JobGetBalance_new(ba);
-      rv = AB_BANKING_JOB_CHECKAVAILABILITY(job);
+      rv = AB_Job_CheckAvailability(job);
       if (!rv)
         rv = m_kbanking->enqueueJob(job);
       else
@@ -559,6 +568,7 @@
 
     // make sure, we have at least one job in the queue before we continue.
     if (m_kbanking->getEnqueuedJobs().size() > 0) {
+      emit queueChanged();
 
       // ask if the user want's to execute this job right away or spool it
       // for later execution
@@ -607,9 +617,6 @@
           DBG_ERROR(0, "Error: %d", rv);
         }
         AB_ImExporterContext_free(ctx);
-
-        // let application emit signals to inform views
-        m_kbanking->accountsUpdated();
       }
       rc = true;
     }
@@ -617,7 +624,17 @@
   return rc;
 }
 
+void KBankingPlugin::startPasswordTimer(void)
+{
+  if (d->passwordCacheTimer->isActive())
+    d->passwordCacheTimer->stop();
+  d->passwordCacheTimer->start();
+}
 
+void KBankingPlugin::slotClearPasswordCache(void)
+{
+  m_kbanking->clearPasswordCache();
+}
 
 void KBankingPlugin::slotImport(void)
 {
@@ -644,13 +661,178 @@
 
 
 KMyMoneyBanking::KMyMoneyBanking(KBankingPlugin* parent, const char* appname, const char* fname)
-    : KBanking(appname, fname)
+    : AB_Banking(appname, fname)
     , m_parent(parent)
+    , _jobQueue(0)
+{
+}
+
+int KMyMoneyBanking::init()
+{
+  int rv;
+
+  rv = AB_Banking::init();
+  if (rv < 0)
+    return rv;
+
+  rv = onlineInit();
+  if (rv) {
+    fprintf(stderr, "Error on online init (%d).\n", rv);
+    AB_Banking::fini();
+    return rv;
+  }
+
+  _jobQueue = AB_Job_List2_new();
+
+  return 0;
+}
+
+int KMyMoneyBanking::fini()
+{
+  int rv;
+
+  if (_jobQueue) {
+    AB_Job_List2_FreeAll(_jobQueue);
+    _jobQueue = 0;
+  }
+
+  rv = onlineFini();
+  if (rv) {
+    AB_Banking::fini();
+    return rv;
+  }
+  return AB_Banking::fini();
+}
+
+int KMyMoneyBanking::executeQueue(AB_IMEXPORTER_CONTEXT *ctx)
+{
+  int rv;
+  AB_JOB_LIST2 *oldQ;
+
+  m_parent->startPasswordTimer();
+
+  rv = AB_Banking::executeJobs(_jobQueue, ctx);
+  oldQ = _jobQueue;
+  _jobQueue = AB_Job_List2_new();
+  AB_Job_List2_FreeAll(oldQ);
+
+  emit m_parent->queueChanged();
+  m_parent->startPasswordTimer();
+
+  return rv;
+}
+
+void KMyMoneyBanking::clearPasswordCache(void)
+{
+  /* clear password DB */
+  GWEN_Gui_SetPasswordStatus(NULL, NULL, GWEN_Gui_PasswordStatus_Remove, 0);
+}
+
+std::list<AB_JOB*> KMyMoneyBanking::getEnqueuedJobs()
+{
+  AB_JOB_LIST2 *ll;
+  std::list<AB_JOB*> rl;
+
+  ll = _jobQueue;
+  if (ll && AB_Job_List2_GetSize(ll)) {
+    AB_JOB *j;
+    AB_JOB_LIST2_ITERATOR *it;
+
+    it = AB_Job_List2_First(ll);
+    assert(it);
+    j = AB_Job_List2Iterator_Data(it);
+    assert(j);
+    while (j) {
+      rl.push_back(j);
+      j = AB_Job_List2Iterator_Next(it);
+    }
+    AB_Job_List2Iterator_free(it);
+  }
+  return rl;
+}
+
+int KMyMoneyBanking::enqueueJob(AB_JOB *j)
 {
+  assert(_jobQueue);
+  assert(j);
+  AB_Job_Attach(j);
+  AB_Job_List2_PushBack(_jobQueue, j);
+  return 0;
 }
 
 
 
+int KMyMoneyBanking::dequeueJob(AB_JOB *j)
+{
+  assert(_jobQueue);
+  AB_Job_List2_Remove(_jobQueue, j);
+  AB_Job_free(j);
+  emit m_parent->queueChanged();
+  return 0;
+}
+
+bool KMyMoneyBanking::askMapAccount(const char *id,
+                                    const char *bankCode,
+                                    const char *accountId)
+{
+  KBMapAccount *w;
+
+  w = new KBMapAccount(this, bankCode, accountId);
+  if (w->exec() == QDialog::Accepted) {
+    AB_ACCOUNT *a;
+
+    a = w->getAccount();
+    assert(a);
+    DBG_NOTICE(0,
+               "Mapping application account \"%s\" to "
+               "online account \"%s/%s\"",
+               id,
+               AB_Account_GetBankCode(a),
+               AB_Account_GetAccountNumber(a));
+    setAccountAlias(a, id);
+    delete w;
+    return true;
+  }
+
+  delete w;
+  return false;
+}
+
+bool KMyMoneyBanking::interactiveImport()
+{
+  AB_IMEXPORTER_CONTEXT *ctx;
+  GWEN_DIALOG *dlg;
+  int rv;
+
+  ctx = AB_ImExporterContext_new();
+  dlg = AB_ImporterDialog_new(getCInterface(), ctx, NULL);
+  if (dlg == NULL) {
+    DBG_ERROR(0, "Could not create importer dialog.");
+    AB_ImExporterContext_free(ctx);
+    return false;
+  }
+
+  rv = GWEN_Gui_ExecDialog(dlg, 0);
+  if (rv == 0) {
+    DBG_ERROR(0, "Aborted by user");
+    GWEN_Dialog_free(dlg);
+    AB_ImExporterContext_free(ctx);
+    return false;
+  }
+
+  if (!importContext(ctx, 0)) {
+    DBG_ERROR(0, "Error on importContext");
+    GWEN_Dialog_free(dlg);
+    AB_ImExporterContext_free(ctx);
+    return false;
+  }
+
+  GWEN_Dialog_free(dlg);
+  AB_ImExporterContext_free(ctx);
+  return true;
+}
+
+
 const AB_ACCOUNT_STATUS* KMyMoneyBanking::_getAccountStatus(AB_IMEXPORTER_ACCOUNTINFO *ai)
 {
   const AB_ACCOUNT_STATUS *ast;
@@ -719,7 +901,7 @@
     while (se) {
       p = GWEN_StringListEntry_Data(se);
       assert(p);
-      s = QString::fromUtf8(p);
+      s += QString::fromUtf8(p);
       se = GWEN_StringListEntry_Next(se);
     } // while
   }
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/mymoneybanking.h kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/mymoneybanking.h
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/mymoneybanking.h	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/mymoneybanking.h	2011-01-15 11:56:31.996073240 +0100
@@ -1,6 +1,7 @@
 /***************************************************************************
- *   Copyright 2009  Cristian Onet onet.cristian@gmail.com                 *
  *   Copyright 2004  Martin Preuss aquamaniac@users.sourceforge.net        *
+ *   Copyright 2009  Cristian Onet onet.cristian@gmail.com                 *
+ *   Copyright 2010  Thomas Baumgart ipwizard@users.sourceforge.net        *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or         *
  *   modify it under the terms of the GNU General Public License as        *
@@ -25,6 +26,22 @@
 #include <config-kmymoney.h>
 #endif
 
+#include <aqbanking/version.h>
+#include <aqbanking/banking.h>
+#include "banking.hpp"
+
+#ifndef AQB_MAKE_VERSION
+#define AQB_MAKE_VERSION(a,b,c,d) (((a)<<24) | ((b)<<16) | (c<<8) | (d))
+#endif
+
+#ifndef AQBANKING_VERSION
+#define AQBANKING_VERSION AQB_MAKE_VERSION(AQBANKING_VERSION_MAJOR,AQBANKING_VERSION_MINOR,AQBANKING_VERSION_PATCHLEVEL,AQBANKING_VERSION_BUILD)
+#endif
+
+#ifndef AQB_IS_VERSION
+#define AQB_IS_VERSION(a,b,c,d) (AQBANKING_VERSION >= AQB_MAKE_VERSION(a,b,c,d))
+#endif
+
 // ----------------------------------------------------------------------------
 // QT Includes
 
@@ -39,7 +56,6 @@
 // ----------------------------------------------------------------------------
 // Project Includes
 
-#include "kbanking.h"
 #include <kmymoney/kmymoneyplugin.h>
 #include <kmymoney/mymoneyaccount.h>
 #include <kmymoney/mymoneykeyvaluecontainer.h>
@@ -146,9 +162,18 @@
     */
   bool updateAccount(const MyMoneyAccount& acc);
 
+  /**
+    * Trigger the password cache timer
+    */
+  void startPasswordTimer(void);
+
 protected slots:
   void slotSettings(void);
   void slotImport(void);
+  void slotClearPasswordCache(void);
+
+signals:
+  void queueChanged(void);
 
 private:
   class Private;
@@ -162,27 +187,45 @@
 };
 
 /**
-  * This class is the special implementation to glue the KBanking class
+  * This class is the special implementation to glue the AB_Banking class
   * with the KMyMoneyPlugin structure.
   */
-class KMyMoneyBanking : public KBanking
+class KMyMoneyBanking : public AB_Banking
 {
+  friend class KBankingPlugin;
 
 public:
   KMyMoneyBanking(KBankingPlugin* parent, const char* appname, const char* fname = 0);
   virtual ~KMyMoneyBanking() {};
 
-  bool importAccountInfo(AB_IMEXPORTER_ACCOUNTINFO *ai, uint32_t flags);
+  int executeQueue(AB_IMEXPORTER_CONTEXT *ctx);
+
+  int enqueueJob(AB_JOB *j);
+  int dequeueJob(AB_JOB *j);
+  std::list<AB_JOB*> getEnqueuedJobs();
+
+  bool askMapAccount(const char *id,
+                     const char *bankCode,
+                     const char *accountId);
+
+  virtual bool interactiveImport();
 
 protected:
+  int init();
+  int fini();
+
+  bool importAccountInfo(AB_IMEXPORTER_ACCOUNTINFO *ai, uint32_t flags);
   const AB_ACCOUNT_STATUS* _getAccountStatus(AB_IMEXPORTER_ACCOUNTINFO *ai);
   void _xaToStatement(MyMoneyStatement &ks,
                       const MyMoneyAccount&,
                       const AB_TRANSACTION *t);
+  void clearPasswordCache(void);
 
 private:
   KBankingPlugin* m_parent;
   QMap<QString, bool> m_hashMap;
+  AB_JOB_LIST2 *_jobQueue;
+
 };
 
 #endif
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/views/kbjobview.cpp kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/views/kbjobview.cpp
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/views/kbjobview.cpp	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/views/kbjobview.cpp	2011-01-15 11:56:31.998079514 +0100
@@ -38,14 +38,13 @@
 #include <KIconLoader>
 #include <KMessageBox>
 
-#include "kbanking.h"
 #include <aqbanking/jobgetbalance.h>
 #include <aqbanking/jobgettransactions.h>
 
 #include <gwenhywfar/debug.h>
 
 
-KBJobView::KBJobView(KBanking *kb,
+KBJobView::KBJobView(KMyMoneyBanking *kb,
                      QWidget* parent,
                      const char* name,
                      Qt::WFlags fl) :
@@ -64,8 +63,6 @@
   m_jobList = new KBJobListView(jobBox);
   jobBoxLayout->addWidget(m_jobList);
 
-  QObject::connect(m_app->flagStaff(), SIGNAL(signalQueueUpdated()),
-                   this, SLOT(slotQueueUpdated()));
   QObject::connect(executeButton, SIGNAL(clicked()),
                    this, SLOT(slotExecute()));
   QObject::connect(dequeueButton, SIGNAL(clicked()),
@@ -154,9 +151,6 @@
     DBG_ERROR(0, "Error: %d", rv);
   }
   AB_ImExporterContext_free(ctx);
-
-  // let App emit signals to inform account views
-  m_app->accountsUpdated();
 }
 
 
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/views/kbjobview.h kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/views/kbjobview.h
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/views/kbjobview.h	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/views/kbjobview.h	2011-01-15 11:56:31.997453173 +0100
@@ -32,14 +32,14 @@
 
 
 #include "kbjoblist.h"
-#include "kbanking.h"
+#include "mymoneybanking.h"
 
 
 class KBJobView: public QWidget, public Ui::KBJobViewUi
 {
   Q_OBJECT
 public:
-  explicit KBJobView(KBanking *kb,
+  explicit KBJobView(KMyMoneyBanking *kb,
                      QWidget* parent = 0, const char* name = 0, Qt::WFlags fl = 0);
   ~KBJobView();
 
@@ -47,7 +47,7 @@
   bool fini();
 
 private:
-  KBanking *m_app;
+  KMyMoneyBanking *m_app;
   KBJobListView *m_jobList;
 
 protected slots:
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/widgets/CMakeLists.txt kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/widgets/CMakeLists.txt
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/widgets/CMakeLists.txt	2010-12-23 10:21:40.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/widgets/CMakeLists.txt	2011-01-15 11:56:31.998079514 +0100
@@ -2,6 +2,7 @@
 ########### next target ###############
 
 SET(kmm_kbanking_widgets_la_SOURCES
+    kbaccountlist.cpp
     kbjoblist.cpp
     )
 
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/widgets/kbaccountlist.cpp kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/widgets/kbaccountlist.cpp
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/widgets/kbaccountlist.cpp	1970-01-01 01:00:00.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/widgets/kbaccountlist.cpp	2011-01-15 11:56:31.998079514 +0100
@@ -0,0 +1,253 @@
+/***************************************************************************
+    begin       : Mon Mar 01 2004
+    copyright   : (C) 2004 by Martin Preuss
+    email       : martin@libchipcard.de
+
+ ***************************************************************************
+ *          Please see toplevel file COPYING for license details           *
+ ***************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include <config-kmymoney.h>
+#endif
+
+
+#include "kbaccountlist.h"
+#include <assert.h>
+#include <QtCore/qstring.h>
+
+
+
+KBAccountListViewItem::KBAccountListViewItem(KBAccountListView *parent,
+    AB_ACCOUNT *acc)
+    : QTreeWidgetItem(parent)
+    , _account(acc)
+{
+  assert(acc);
+  _populate();
+}
+
+
+
+KBAccountListViewItem::KBAccountListViewItem(const KBAccountListViewItem &item)
+    : QTreeWidgetItem(item)
+    , _account(0)
+{
+
+  if (item._account) {
+    _account = item._account;
+  }
+}
+
+
+KBAccountListViewItem::KBAccountListViewItem(KBAccountListView *parent,
+    QTreeWidgetItem *after,
+    AB_ACCOUNT *acc)
+    : QTreeWidgetItem(parent, after)
+    , _account(acc)
+{
+  assert(acc);
+  _populate();
+}
+
+
+
+KBAccountListViewItem::~KBAccountListViewItem()
+{
+}
+
+
+
+AB_ACCOUNT *KBAccountListViewItem::getAccount()
+{
+  return _account;
+}
+
+
+void KBAccountListViewItem::_populate()
+{
+  QString tmp;
+  int i;
+
+  assert(_account);
+
+  i = 0;
+
+  // unique id
+  setText(i++, QString::number(AB_Account_GetUniqueId(_account)));
+
+  // bank code
+  setText(i++, QString::fromUtf8(AB_Account_GetBankCode(_account)));
+
+  // bank name
+  tmp = AB_Account_GetBankName(_account);
+  if (tmp.isEmpty())
+    tmp = "(unnamed)";
+  setText(i++, tmp);
+
+  // account id
+  setText(i++, QString::fromUtf8(AB_Account_GetAccountNumber(_account)));
+
+  // account name
+  tmp = QString::fromUtf8(AB_Account_GetAccountName(_account));
+  if (tmp.isEmpty())
+    tmp = "(unnamed)";
+  setText(i++, tmp);
+
+  tmp = QString::fromUtf8(AB_Account_GetOwnerName(_account));
+  if (tmp.isEmpty())
+    tmp = "";
+  setText(i++, tmp);
+
+  tmp = QString::fromUtf8(AB_Provider_GetName(AB_Account_GetProvider(_account)));
+  if (tmp.isEmpty())
+    tmp = "(unknown)";
+  setText(i++, tmp);
+
+}
+
+bool KBAccountListViewItem::operator< (const QTreeWidgetItem & other) const
+{
+  bool ok1, ok2;
+  int column = treeWidget() ? treeWidget()->sortColumn() : 0;
+  int a = text(column).toInt(&ok1);
+  int b = other.text(column).toInt(&ok2);
+  if (ok1 && ok2)
+    return a < b;
+  return QTreeWidgetItem::operator<(other);
+}
+
+
+QString KBAccountListViewItem::key(int column, bool) const
+{
+  QString result;
+
+  if (column == 0) {
+    ulong i;
+    bool ok;
+
+    // id
+    i = text(column).toULong(&ok);
+    if (ok) {
+      char numbuf[32];
+
+      snprintf(numbuf, sizeof(numbuf), "%012lu", i);
+      result = QString(numbuf);
+    } else
+      result = text(column);
+  } else
+    result = text(column);
+
+  return result;
+}
+
+
+
+
+
+
+
+
+
+KBAccountListView::KBAccountListView(QWidget *parent)
+    : QTreeWidget(parent)
+{
+  setAllColumnsShowFocus(true);
+  setColumnCount(7);
+  QStringList header;
+  header << QWidget::tr("Id");
+  header << QWidget::tr("Institute Code");
+  header << QWidget::tr("Institute Name");
+  header << QWidget::tr("Account Number");
+  header << QWidget::tr("Account Name");
+  header << QWidget::tr("Owner");
+  header << QWidget::tr("Backend");
+  setHeaderLabels(header);
+
+  setSortingEnabled(true);
+  sortItems(0, Qt::AscendingOrder);
+}
+
+
+
+KBAccountListView::~KBAccountListView()
+{
+}
+
+
+
+void KBAccountListView::addAccount(AB_ACCOUNT *acc)
+{
+  KBAccountListViewItem *entry;
+
+  entry = new KBAccountListViewItem(this, acc);
+}
+
+
+
+void KBAccountListView::addAccounts(const std::list<AB_ACCOUNT*> &accs)
+{
+  std::list<AB_ACCOUNT*>::const_iterator it;
+
+  for (it = accs.begin(); it != accs.end(); it++) {
+    KBAccountListViewItem *entry;
+
+    entry = new KBAccountListViewItem(this, *it);
+  } /* for */
+}
+
+
+
+AB_ACCOUNT *KBAccountListView::getCurrentAccount()
+{
+  KBAccountListViewItem *entry;
+
+  entry = dynamic_cast<KBAccountListViewItem*>(currentItem());
+  if (!entry) {
+    return 0;
+  }
+  return entry->getAccount();
+}
+
+
+
+std::list<AB_ACCOUNT*> KBAccountListView::getSelectedAccounts()
+{
+  std::list<AB_ACCOUNT*> accs;
+  KBAccountListViewItem *entry;
+
+  // Create an iterator and give the listview as argument
+  QTreeWidgetItemIterator it(this);
+  // iterate through all items of the listview
+  for (; *it; ++it) {
+    if ((*it)->isSelected()) {
+      entry = dynamic_cast<KBAccountListViewItem*>(*it);
+      if (entry)
+        accs.push_back(entry->getAccount());
+    }
+  } // for
+
+  return accs;
+}
+
+
+
+std::list<AB_ACCOUNT*> KBAccountListView::getSortedAccounts()
+{
+  std::list<AB_ACCOUNT*> accs;
+  KBAccountListViewItem *entry;
+
+  // Create an iterator and give the listview as argument
+  QTreeWidgetItemIterator it(this);
+  // iterate through all items of the listview
+  for (; *it; ++it) {
+    entry = dynamic_cast<KBAccountListViewItem*>(*it);
+    if (entry)
+      accs.push_back(entry->getAccount());
+  } // for
+
+  return accs;
+}
+
+
+
diff -U 3 -H -d -r -N -- kmymoney-4.5.2/kmymoney/plugins/kbanking/widgets/kbaccountlist.h kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/widgets/kbaccountlist.h
--- kmymoney-4.5.2/kmymoney/plugins/kbanking/widgets/kbaccountlist.h	1970-01-01 01:00:00.000000000 +0100
+++ kmymoney-4.5.2-kbanking5/kmymoney/plugins/kbanking/widgets/kbaccountlist.h	2011-01-15 11:56:31.998079514 +0100
@@ -0,0 +1,71 @@
+/***************************************************************************
+    begin       : Mon Mar 01 2004
+    copyright   : (C) 2004 by Martin Preuss
+    email       : martin@libchipcard.de
+
+ ***************************************************************************
+ *          Please see toplevel file COPYING for license details           *
+ ***************************************************************************/
+
+#ifndef Q4BANKING_ACCOUNTLIST_H
+#define Q4BANKING_ACCOUNTLIST_H
+
+
+#include <QTreeWidget>
+
+#include <aqbanking/account.h>
+
+#include <list>
+
+class KBAccountListView;
+class KBAccountListViewItem;
+
+
+class KBAccountListViewItem: public QTreeWidgetItem
+{
+private:
+  AB_ACCOUNT *_account;
+
+  void _populate();
+  bool operator< (const QTreeWidgetItem & other) const;   //!< correctly sort text columns, which contain numbers
+
+public:
+  KBAccountListViewItem(KBAccountListView *parent, AB_ACCOUNT *acc);
+  KBAccountListViewItem(KBAccountListView *parent,
+                        QTreeWidgetItem *after,
+                        AB_ACCOUNT *acc);
+  KBAccountListViewItem(const KBAccountListViewItem &item);
+
+  virtual ~KBAccountListViewItem();
+
+  AB_ACCOUNT *getAccount();
+
+  QString key(int column, bool ascending) const;
+};
+
+
+
+class KBAccountListView: public QTreeWidget
+{
+private:
+public:
+  KBAccountListView(QWidget *parent = 0);
+  virtual ~KBAccountListView();
+
+  void addAccount(AB_ACCOUNT *acc);
+  void addAccounts(const std::list<AB_ACCOUNT*> &accs);
+
+  AB_ACCOUNT *getCurrentAccount();
+  std::list<AB_ACCOUNT*> getSelectedAccounts();
+
+  std::list<AB_ACCOUNT*> getSortedAccounts();
+
+};
+
+
+
+
+#endif /* QBANKING_ACCOUNTLIST_H */
+
+
+
openSUSE Build Service is sponsored by