diff --git a/headers/os/app/Roster.h b/headers/os/app/Roster.h index 2d6dc33a83..c63a068bb3 100644 --- a/headers/os/app/Roster.h +++ b/headers/os/app/Roster.h @@ -157,6 +157,7 @@ private: friend status_t _send_to_roster_(BMessage *, BMessage *, bool); friend bool _is_valid_roster_mess_(bool); friend void BPrivate::init_registrar_roster(BMessenger, BMessenger); + friend class GetRecentTester; class ArgVector; @@ -212,6 +213,8 @@ private: void ClearRecentDocuments() const; void ClearRecentFolders() const; void ClearRecentApps() const; + void LoadRecentLists(const char *file) const; + void SaveRecentLists(const char *file) const; BMessenger fMess; BMessenger fMimeMess; diff --git a/src/kits/app/Roster.cpp b/src/kits/app/Roster.cpp index 5b137a4699..2aa121983f 100644 --- a/src/kits/app/Roster.cpp +++ b/src/kits/app/Roster.cpp @@ -2209,6 +2209,9 @@ BRoster::AddToRecentApps(const char *appSig) const void BRoster::ClearRecentDocuments() const { + BMessage request(B_REG_CLEAR_RECENT_DOCUMENTS); + BMessage reply; + fMess.SendMessage(&request, &reply); } /*! \brief Sends a request to the roster to clear the recent @@ -2217,6 +2220,9 @@ BRoster::ClearRecentDocuments() const void BRoster::ClearRecentFolders() const { + BMessage request(B_REG_CLEAR_RECENT_FOLDERS); + BMessage reply; + fMess.SendMessage(&request, &reply); } /*! \brief Sends a request to the roster to clear the recent @@ -2225,6 +2231,71 @@ BRoster::ClearRecentFolders() const void BRoster::ClearRecentApps() const { + BMessage request(B_REG_CLEAR_RECENT_APPS); + BMessage reply; + fMess.SendMessage(&request, &reply); +} + +// LoadRecentLists +/*! \brief Loads the system's recently used document, folder, and + application lists from the specified file. + + \note The current lists are cleared before loading the new lists + + \param filename The name of the file to load from +*/ +void +BRoster::LoadRecentLists(const char *filename) const +{ + status_t error = B_OK; + // compose the request message + BMessage request(B_REG_LOAD_RECENT_LISTS); + if (error == B_OK) + error = request.AddString("filename", filename); + // send the request + BMessage reply; + if (error == B_OK) + error = fMess.SendMessage(&request, &reply); + // evaluate the reply + status_t result; + if (error == B_OK) + error = reply.what == B_REG_RESULT ? B_OK : B_BAD_REPLY; + if (error == B_OK) + error = reply.FindInt32("result", &result); + if (error == B_OK) + error = result; + // Nothing to return... how sad :-( + // return error; +} + +// SaveRecentLists +/*! \brief Saves the system's recently used document, folder, and + application lists to the specified file. + + \param filename The name of the file to save to +*/ +void +BRoster::SaveRecentLists(const char *filename) const +{ + status_t error = B_OK; + // compose the request message + BMessage request(B_REG_SAVE_RECENT_LISTS); + if (error == B_OK) + error = request.AddString("filename", filename); + // send the request + BMessage reply; + if (error == B_OK) + error = fMess.SendMessage(&request, &reply); + // evaluate the reply + status_t result; + if (error == B_OK) + error = reply.what == B_REG_RESULT ? B_OK : B_BAD_REPLY; + if (error == B_OK) + error = reply.FindInt32("result", &result); + if (error == B_OK) + error = result; + // Nothing to return... how sad :-( + // return error; } /*-----------------------------------------------------*/ diff --git a/src/servers/registrar/Registrar.cpp b/src/servers/registrar/Registrar.cpp index 384a1bed79..fc0a686b1f 100644 --- a/src/servers/registrar/Registrar.cpp +++ b/src/servers/registrar/Registrar.cpp @@ -156,13 +156,19 @@ Registrar::MessageReceived(BMessage *message) fRoster->HandleAddToRecentApps(message); break; case B_REG_CLEAR_RECENT_DOCUMENTS: - fRoster->HandleClearRecentDocuments(message); + fRoster->ClearRecentDocuments(); break; case B_REG_CLEAR_RECENT_FOLDERS: - fRoster->HandleClearRecentFolders(message); + fRoster->ClearRecentFolders(); break; case B_REG_CLEAR_RECENT_APPS: - fRoster->HandleClearRecentApps(message); + fRoster->ClearRecentApps(); + break; + case B_REG_LOAD_RECENT_LISTS: + fRoster->HandleLoadRecentLists(message); + break; + case B_REG_SAVE_RECENT_LISTS: + fRoster->HandleSaveRecentLists(message); break; // message runner requests case B_REG_REGISTER_MESSAGE_RUNNER: diff --git a/src/servers/registrar/TRoster.cpp b/src/servers/registrar/TRoster.cpp index 4e3b12ef03..b5588a62af 100644 --- a/src/servers/registrar/TRoster.cpp +++ b/src/servers/registrar/TRoster.cpp @@ -794,7 +794,8 @@ TRoster::HandleStopWatching(BMessage *request) /*! \brief Handles a GetRecentDocuments() request. \param request The request message */ -void TRoster::HandleGetRecentDocuments(BMessage *request) +void +TRoster::HandleGetRecentDocuments(BMessage *request) { FUNCTION_START(); _HandleGetRecentEntries(request); @@ -805,7 +806,8 @@ void TRoster::HandleGetRecentDocuments(BMessage *request) /*! \brief Handles a GetRecentFolders() request. \param request The request message */ -void TRoster::HandleGetRecentFolders(BMessage *request) +void +TRoster::HandleGetRecentFolders(BMessage *request) { FUNCTION_START(); _HandleGetRecentEntries(request); @@ -816,7 +818,8 @@ void TRoster::HandleGetRecentFolders(BMessage *request) /*! \brief Handles a GetRecentApps() request. \param request The request message */ -void TRoster::HandleGetRecentApps(BMessage *request) +void +TRoster::HandleGetRecentApps(BMessage *request) { FUNCTION_START(); @@ -841,7 +844,8 @@ void TRoster::HandleGetRecentApps(BMessage *request) /*! \brief Handles an AddToRecentDocuments() request. \param request The request message */ -void TRoster::HandleAddToRecentDocuments(BMessage *request) +void +TRoster::HandleAddToRecentDocuments(BMessage *request) { FUNCTION_START(); @@ -859,7 +863,6 @@ void TRoster::HandleAddToRecentDocuments(BMessage *request) error = request->FindString("app sig", &appSig); if (!error) error = fRecentDocuments.Add(&ref, appSig); - error = B_ERROR; reply.AddInt32("result", error); request->SendReply(&reply); @@ -870,7 +873,8 @@ void TRoster::HandleAddToRecentDocuments(BMessage *request) /*! \brief Handles an AddToRecentFolders() request. \param request The request message */ -void TRoster::HandleAddToRecentFolders(BMessage *request) +void +TRoster::HandleAddToRecentFolders(BMessage *request) { FUNCTION_START(); @@ -888,7 +892,6 @@ void TRoster::HandleAddToRecentFolders(BMessage *request) error = request->FindString("app sig", &appSig); if (!error) error = fRecentFolders.Add(&ref, appSig); - error = B_ERROR; reply.AddInt32("result", error); request->SendReply(&reply); @@ -899,32 +902,97 @@ void TRoster::HandleAddToRecentFolders(BMessage *request) /*! \brief Handles an AddToRecentApps() request. \param request The request message */ -void TRoster::HandleAddToRecentApps(BMessage *request) +void +TRoster::HandleAddToRecentApps(BMessage *request) { + FUNCTION_START(); + + if (!request) { + D(PRINT(("WARNING: TRoster::HandleAddToRecentApps(NULL) called\n"))); + return; + } + + const char *appSig; + BMessage reply(B_REG_RESULT); + + status_t error = request->FindString("app sig", &appSig); + if (!error) + error = fRecentApps.Add(appSig); + reply.AddInt32("result", error); + request->SendReply(&reply); + + FUNCTION_END(); } -// HandleClearRecentDocuments -/*! \brief Handles a ClearRecentDocuments() request. - \param request The request message -*/ -void TRoster::HandleClearRecentDocuments(BMessage *request) +void +TRoster::HandleLoadRecentLists(BMessage *request) { + FUNCTION_START(); + + if (!request) { + D(PRINT(("WARNING: TRoster::HandleLoadRecentLists(NULL) called\n"))); + return; + } + + const char *filename; + BMessage reply(B_REG_RESULT); + + status_t error = request->FindString("filename", &filename); + if (!error) + error = _LoadRosterSettings(filename); + reply.AddInt32("result", error); + request->SendReply(&reply); + + FUNCTION_END(); } -// HandleClearRecentFolders -/*! \brief Handles a ClearRecentFolders() request. - \param request The request message -*/ -void TRoster::HandleClearRecentFolders(BMessage *request) +void +TRoster::HandleSaveRecentLists(BMessage *request) { + FUNCTION_START(); + + if (!request) { + D(PRINT(("WARNING: TRoster::HandleSaveRecentLists(NULL) called\n"))); + return; + } + + const char *filename; + BMessage reply(B_REG_RESULT); + + status_t error = request->FindString("filename", &filename); + if (!error) + error = _SaveRosterSettings(filename); + reply.AddInt32("result", error); + request->SendReply(&reply); + + FUNCTION_END(); } -// HandleClearRecentApps -/*! \brief Handles a ClearRecentApps() request. - \param request The request message +// ClearRecentDocuments +/*! \brief Clears the current list of recent documents */ -void TRoster::HandleClearRecentApps(BMessage *request) +void +TRoster::ClearRecentDocuments() { + fRecentDocuments.Clear(); +} + +// ClearRecentFolders +/*! \brief Clears the current list of recent folders +*/ +void +TRoster::ClearRecentFolders() +{ + fRecentFolders.Clear(); +} + +// ClearRecentApps +/*! \brief Clears the current list of recent apps +*/ +void +TRoster::ClearRecentApps() +{ + fRecentApps.Clear(); } // Init diff --git a/src/servers/registrar/TRoster.h b/src/servers/registrar/TRoster.h index 29cbcf4256..128916aeea 100644 --- a/src/servers/registrar/TRoster.h +++ b/src/servers/registrar/TRoster.h @@ -75,9 +75,12 @@ public: void HandleAddToRecentDocuments(BMessage *request); void HandleAddToRecentFolders(BMessage *request); void HandleAddToRecentApps(BMessage *request); - void HandleClearRecentDocuments(BMessage *request); - void HandleClearRecentFolders(BMessage *request); - void HandleClearRecentApps(BMessage *request); + void HandleLoadRecentLists(BMessage *request); + void HandleSaveRecentLists(BMessage *request); + + void ClearRecentDocuments(); + void ClearRecentFolders(); + void ClearRecentApps(); status_t Init();