# Software Center - PackageKit Backend
### Design plan
This page presents architecture diagram, and explained code modifications planned as part of the Software Center PackageKit and AppStream proposal.
Please see [the Google Summer of Code proposal](proposal.html) for more details.
## Current status of the code
Simplified, and extracted from Michael Vogt `pk-abstraction` branch:
![current](software-center-current.png)
Rating and reviews, software channels, history are intentionally ignored for this point.
## Future
How should the abstraction work:
![proposal](software-center-proposal.png)
Code needs to be written for:
* an extension of `BaseInstallBackend` class, `PackageKitBackend` will wrap install/remove/etc calls around PackageKit;
* an extension of `PkgInfo` class, `PackageKitCache` will provide the same functionality as AptCache;
* a `SUSE` class extending `Distro` providing links to the PackageKit **install backend** and PackageKit **application cache**.
* Xapian database path should be set by `PkgInfo`, i.e. `/var/lib/pkit-xapian-index/`
Clarification is needed:
* there are `TransactionFinishedResult`, `TransactionProgress` classes wrapping around AptDaemon dbus Transaction objects; this should be abstractized, and implemented as PackageKit transactions? not necessary, because these are not exposed outside `AptdaemonBackend`;
* the _History_ feature in GUI, use a class `AptHistory` which parses apt logs (`/var/log/apt/`); this should be also abstractized, and implemented over PackageKit logs?
* where will fit the AppStream distro-match effort (an archive with collected package description and icons)? - this is the Package Info module.
## Future - revised
![revised](software-center-proposal-revised.png)