Author: pulkomandy Date: 2011-11-03 13:49:18 +0100 (Thu, 03 Nov 2011) New Revision: 43159 Changeset: https://dev.haiku-os.org/changeset/43159 Added: haiku/trunk/headers/private/notification/ haiku/trunk/src/servers/notification/AppUsage.cpp haiku/trunk/src/servers/notification/NotificationReceived.cpp haiku/trunk/src/servers/notification/Notifications.cpp Modified: haiku/trunk/src/servers/notification/Jamfile Log: * revert '43157 as the files are actually needed. I still don't understand how I managed to build everything without them ... * Move the files shared between server and preflet to the server folder. Copied: haiku/trunk/src/servers/notification/AppUsage.cpp (from rev 43156, haiku/trunk/src/kits/notification/AppUsage.cpp) =================================================================== --- haiku/trunk/src/servers/notification/AppUsage.cpp (rev 0) +++ haiku/trunk/src/servers/notification/AppUsage.cpp 2011-11-03 12:49:18 UTC (rev 43159) @@ -0,0 +1,193 @@ +/* + * Copyright 2010, Haiku, Inc. All Rights Reserved. + * Copyright 2008-2009, Pier Luigi Fiorini. All Rights Reserved. + * Copyright 2004-2008, Michael Davidson. All Rights Reserved. + * Copyright 2004-2007, Mikael Eiman. All Rights Reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Michael Davidson, slaad@xxxxxxxxxxx + * Mikael Eiman, mikael@xxxxxxxx + * Pier Luigi Fiorini, pierluigi.fiorini@xxxxxxxxx + */ + +#include <Message.h> + +#include <AppUsage.h> +#include <NotificationReceived.h> + +const type_code kTypeCode = 'ipau'; + + +AppUsage::AppUsage() + : + fName(""), + fAllow(true) +{ +} + + +AppUsage::AppUsage(const char* name, bool allow) + : + fName(name), + fAllow(allow) +{ +} + + +AppUsage::~AppUsage() +{ + notification_t::iterator nIt; + for (nIt = fNotifications.begin(); nIt != fNotifications.end(); nIt++) + delete nIt->second; +} + + +bool +AppUsage::AllowsTypeCode(type_code code) const +{ + return code == kTypeCode; +} + + +status_t +AppUsage::Flatten(void* buffer, ssize_t numBytes) const +{ + BMessage msg; + msg.AddString("signature", fName); + msg.AddBool("allow", fAllow); + + notification_t::const_iterator nIt; + for (nIt = fNotifications.begin(); nIt != fNotifications.end(); nIt++) + msg.AddFlat("notification", nIt->second); + + if (numBytes < msg.FlattenedSize()) + return B_ERROR; + + return msg.Flatten((char*)buffer, numBytes); +} + + +ssize_t +AppUsage::FlattenedSize() const +{ + BMessage msg; + msg.AddString("signature", fName); + msg.AddBool("allow", fAllow); + + notification_t::const_iterator nIt; + for (nIt = fNotifications.begin(); nIt != fNotifications.end(); nIt++) + msg.AddFlat("notification", nIt->second); + + return msg.FlattenedSize(); +} + + +bool +AppUsage::IsFixedSize() const +{ + return false; +} + + +type_code +AppUsage::TypeCode() const +{ + return kTypeCode; +} + + +status_t +AppUsage::Unflatten(type_code code, const void* buffer, + ssize_t numBytes) +{ + if (code != kTypeCode) + return B_ERROR; + + BMessage msg; + status_t status = B_ERROR; + + status = msg.Unflatten((const char*)buffer); + + if (status == B_OK) { + msg.FindString("signature", &fName); + msg.FindBool("allow", &fAllow); + + type_code type; + int32 count = 0; + + status = msg.GetInfo("notification", &type, &count); + if (status != B_OK) + return status; + + for (int32 i = 0; i < count; i++) { + NotificationReceived *notification = new NotificationReceived(); + msg.FindFlat("notification", i, notification); + fNotifications[notification->Title()] = notification; + } + + status = B_OK; + } + + return status; +} + + +const char* +AppUsage::Name() +{ + return fName.String(); +} + + +bool +AppUsage::Allowed(const char* title, notification_type type) +{ + bool allowed = fAllow; + + if (allowed) { + notification_t::iterator nIt = fNotifications.find(title); + if (nIt == fNotifications.end()) { + allowed = true; + fNotifications[title] = new NotificationReceived(title, type); + } else { + allowed = nIt->second->Allowed(); + nIt->second->UpdateTimeStamp(); + nIt->second->SetType(type); + } + } + + return allowed; +} + + +bool +AppUsage::Allowed() +{ + return fAllow; +} + + +NotificationReceived* +AppUsage::NotificationAt(int32 index) +{ + notification_t::iterator nIt = fNotifications.begin(); + for (int32 i = 0; i < index; i++) + nIt++; + + return nIt->second; +} + + +int32 +AppUsage::Notifications() +{ + return fNotifications.size(); +} + + +void +AppUsage::AddNotification(NotificationReceived* notification) +{ + fNotifications[notification->Title()] = notification; +} Modified: haiku/trunk/src/servers/notification/Jamfile =================================================================== --- haiku/trunk/src/servers/notification/Jamfile 2011-11-03 12:21:06 UTC (rev 43158) +++ haiku/trunk/src/servers/notification/Jamfile 2011-11-03 12:49:18 UTC (rev 43159) @@ -19,4 +19,11 @@ NotificationWindow.cpp ; +# Stuff shared with the preflet +StaticLibrary libnotification.a : + AppUsage.cpp + NotificationReceived.cpp + Notifications.cpp +; + Depends notification_server : libnotification.a ; Copied: haiku/trunk/src/servers/notification/NotificationReceived.cpp (from rev 43156, haiku/trunk/src/kits/notification/NotificationReceived.cpp) =================================================================== --- haiku/trunk/src/servers/notification/NotificationReceived.cpp (rev 0) +++ haiku/trunk/src/servers/notification/NotificationReceived.cpp 2011-11-03 12:49:18 UTC (rev 43159) @@ -0,0 +1,164 @@ +/* + * Copyright 2010, Haiku, Inc. All Rights Reserved. + * Copyright 2008-2009, Pier Luigi Fiorini. All Rights Reserved. + * Copyright 2004-2008, Michael Davidson. All Rights Reserved. + * Copyright 2004-2007, Mikael Eiman. All Rights Reserved. + * Distributed under the terms of the MIT License. + * + * Authors: + * Michael Davidson, slaad@xxxxxxxxxxx + * Mikael Eiman, mikael@xxxxxxxx + * Pier Luigi Fiorini, pierluigi.fiorini@xxxxxxxxx + */ + +#include <Message.h> +#include <Notification.h> +#include <NotificationReceived.h> + +const type_code kTypeCode = 'ipnt'; + + +NotificationReceived::NotificationReceived() + : + fTitle(""), + fType(B_INFORMATION_NOTIFICATION), + fEnabled(false), + fLastReceived(time(NULL)) +{ +} + + +NotificationReceived::NotificationReceived(const char* title, + notification_type type, bool enabled) + : + fTitle(title), + fType(type), + fEnabled(enabled), + fLastReceived(time(NULL)) +{ +} + + +NotificationReceived::~NotificationReceived() +{ +} + + +bool +NotificationReceived::AllowsTypeCode(type_code code) const +{ + return code == kTypeCode; +} + + +status_t +NotificationReceived::Flatten(void* buffer, ssize_t numBytes) const +{ + BMessage msg; + msg.AddString("notify_title", fTitle); + msg.AddInt32("notify_type", (int32)fType); + msg.AddInt32("notify_lastreceived", (int32)fLastReceived); + msg.AddBool("notify_enabled", fEnabled); + + if (numBytes < msg.FlattenedSize()) + return B_ERROR; + + return msg.Flatten((char*)buffer, numBytes); +} + + +ssize_t +NotificationReceived::FlattenedSize() const +{ + BMessage msg; + msg.AddString("notify_title", fTitle); + msg.AddInt32("notify_type", (int32)fType); + msg.AddInt32("notify_lastreceived", (int32)fLastReceived); + msg.AddBool("notify_enabled", fEnabled); + + return msg.FlattenedSize(); +} + + +bool +NotificationReceived::IsFixedSize() const +{ + return false; +} + + +type_code +NotificationReceived::TypeCode() const +{ + return kTypeCode; +} + + +status_t +NotificationReceived::Unflatten(type_code code, const void* buffer, + ssize_t numBytes) +{ + if (code != kTypeCode) + return B_ERROR; + + BMessage msg; + status_t error = msg.Unflatten((const char*)buffer); + + if (error == B_OK) { + msg.FindString("notify_title", &fTitle); + msg.FindInt32("notify_type", (int32 *)&fType); + msg.FindInt32("notify_lastreceived", (int32 *)&fLastReceived); + msg.FindBool("notify_enabled", &fEnabled); + } + + return error; +} + + +const char* +NotificationReceived::Title() +{ + return fTitle.String(); +} + + +notification_type +NotificationReceived::Type() +{ + return fType; +} + + +void +NotificationReceived::SetType(notification_type type) +{ + fType = type; +} + + +time_t +NotificationReceived::LastReceived() +{ + return fLastReceived; +} + + +bool +NotificationReceived::Allowed() +{ + return fEnabled; +} + + +void +NotificationReceived::UpdateTimeStamp() +{ + fLastReceived = time(NULL); +} + + +void +NotificationReceived::SetTimeStamp(time_t time) +{ + fLastReceived = time; +} Copied: haiku/trunk/src/servers/notification/Notifications.cpp (from rev 43156, haiku/trunk/src/kits/notification/Notifications.cpp) =================================================================== --- haiku/trunk/src/servers/notification/Notifications.cpp (rev 0) +++ haiku/trunk/src/servers/notification/Notifications.cpp 2011-11-03 12:49:18 UTC (rev 43159) @@ -0,0 +1,22 @@ +/* + * Copyright 2010, Haiku, Inc. All Rights Reserved. + * Distributed under the terms of the MIT License. + */ + + +#include <Notifications.h> + + +// Settings constants +const char* kSettingsDirectory = "system/notifications"; +const char* kFiltersSettings = "filters"; +const char* kGeneralSettings = "general"; +const char* kDisplaySettings = "display"; + +// General settings +const char* kAutoStartName = "auto-start"; +const char* kTimeoutName = "timeout"; + +// Display settings +const char* kWidthName = "width"; +const char* kIconSizeName = "icon size";