<table><tr><td style="">broulik created this revision.<br />broulik added a reviewer: Plasma.<br />Herald added a project: Plasma.<br />Herald added a subscriber: plasma-devel.<br />broulik requested review of this revision.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D20265">View Revision</a></tr></table><br /><div><strong>REVISION SUMMARY</strong><div><p>Introduce libnotification</p>

<p>A library revolving around notifications.</p>

<p>This serves as a replacement for the notification dataengine and logic inside the notification plasmoid. Its architecture is inspired by libtaskmanager.</p>

<p>There's three main classes:</p>

<ul class="remarkup-list">
<li class="remarkup-list-item"><strong>Notifications</strong>: The main model providing notifications and jobs combined with fine-grained filter, grouping, and sorting capabilities. This is what you want to use for showing notifications. The model itself is very generic and doesn't make any assumptions on representation (e.g. popup or history) and it is up to the user to set the appropriate filters and other properties based on the user's preferences and desired presentation.</li>
<li class="remarkup-list-item"><strong>Settings</strong>: This encapsulates all global settings related to notifications. It will be used by the KCM to write into as well e.g. task manager and notification plasmoid to read settings from. It basically presents a "current state" in which the notification system is in, that includes do not disturb settings/mode.</li>
<li class="remarkup-list-item"><strong>Server</strong>: This class handles the DBus stuff and acts as a dumb proxy between DBus and the consumer, e.g. the <tt style="background: #ebebeb; font-size: 13px;">NotificationModel</tt> or the old dataengine.</li>
</ul>

<p>The old dataengine is wired up to the new <tt style="background: #ebebeb; font-size: 13px;">Server</tt> for compatibility. The grouping stuff in there has been dropped, the old plasmoid should otherwise continue to work as normal. The dataengine inhibition feature used by plasma-nm is defunct now, not sure how this could be implemented in the new system as the <tt style="background: #ebebeb; font-size: 13px;">Server</tt> knows nothing about inhibitions, it's all filtered in the models.</p></div></div><br /><div><strong>TEST PLAN</strong><div><p>Depends on <a href="https://phabricator.kde.org/D20196" style="background-color: #e7e7e7;
          border-color: #e7e7e7;
          border-radius: 3px;
          padding: 0 4px;
          font-weight: bold;
          color: black;text-decoration: none;">D20196</a> (for live signal of settings change, shouldnt really matter for testing)</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R120 Plasma Workspace</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D20265">https://phabricator.kde.org/D20265</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>CMakeLists.txt<br />
dataengines/notifications/CMakeLists.txt<br />
dataengines/notifications/notificationaction.cpp<br />
dataengines/notifications/notificationsengine.cpp<br />
dataengines/notifications/notificationsengine.h<br />
dataengines/notifications/org.freedesktop.Notifications.xml<br />
libnotificationmanager/CMakeLists.txt<br />
libnotificationmanager/LibNotificationManagerConfig.cmake.in<br />
libnotificationmanager/config-notificationmanager.h.cmake<br />
libnotificationmanager/dbus/org.freedesktop.Notifications.xml<br />
libnotificationmanager/declarative/CMakeLists.txt<br />
libnotificationmanager/declarative/notificationmanagerplugin.cpp<br />
libnotificationmanager/declarative/notificationmanagerplugin.h<br />
libnotificationmanager/declarative/qmldir<br />
libnotificationmanager/job.cpp<br />
libnotificationmanager/job.h<br />
libnotificationmanager/jobdetails.cpp<br />
libnotificationmanager/jobdetails.h<br />
libnotificationmanager/jobdetails_p.h<br />
libnotificationmanager/jobsmodel.cpp<br />
libnotificationmanager/jobsmodel.h<br />
libnotificationmanager/kcfg/badgesettings.kcfg<br />
libnotificationmanager/kcfg/badgesettings.kcfgc<br />
libnotificationmanager/kcfg/donotdisturbsettings.kcfg<br />
libnotificationmanager/kcfg/donotdisturbsettings.kcfgc<br />
libnotificationmanager/kcfg/jobsettings.kcfg<br />
libnotificationmanager/kcfg/jobsettings.kcfgc<br />
libnotificationmanager/kcfg/notificationsettings.kcfg<br />
libnotificationmanager/kcfg/notificationsettings.kcfgc<br />
libnotificationmanager/libnotificationmanager.categories<br />
libnotificationmanager/limitedrowcountproxymodel.cpp<br />
libnotificationmanager/limitedrowcountproxymodel_p.h<br />
libnotificationmanager/notification.cpp<br />
libnotificationmanager/notification.h<br />
libnotificationmanager/notification_p.h<br />
libnotificationmanager/notificationfilterproxymodel.cpp<br />
libnotificationmanager/notificationfilterproxymodel_p.h<br />
libnotificationmanager/notificationgroupcollapsingproxymodel.cpp<br />
libnotificationmanager/notificationgroupcollapsingproxymodel_p.h<br />
libnotificationmanager/notificationgroupingproxymodel.cpp<br />
libnotificationmanager/notificationgroupingproxymodel_p.h<br />
libnotificationmanager/notifications.cpp<br />
libnotificationmanager/notifications.h<br />
libnotificationmanager/notificationsmodel.cpp<br />
libnotificationmanager/notificationsmodel.h<br />
libnotificationmanager/notificationsortproxymodel.cpp<br />
libnotificationmanager/notificationsortproxymodel_p.h<br />
libnotificationmanager/plasmanotifyrc<br />
libnotificationmanager/server.cpp<br />
libnotificationmanager/server.h<br />
libnotificationmanager/server_p.cpp<br />
libnotificationmanager/server_p.h<br />
libnotificationmanager/settings.cpp<br />
libnotificationmanager/settings.h</div></div></div><br /><div><strong>To: </strong>broulik, Plasma<br /><strong>Cc: </strong>plasma-devel, jraleigh, GB_2, ragreen, Pitel, ZrenBot, lesliezhai, ali-mohamed, jensreuterberg, abetts, sebas, apol, mart<br /></div>