forked from mirrors/gecko-dev
139 lines
4.6 KiB
C++
139 lines
4.6 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim:expandtab:shiftwidth=2:tabstop=2:
|
|
*/
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef __nsGNOMEShellSearchProvider_h__
|
|
#define __nsGNOMEShellSearchProvider_h__
|
|
|
|
#include "nsINavHistoryService.h"
|
|
#include "nsUnixRemoteServer.h"
|
|
#include "nsString.h"
|
|
#include "nsCOMPtr.h"
|
|
#include "mozilla/UniquePtr.h"
|
|
#include "nsGNOMEShellDBusHelper.h"
|
|
|
|
class nsGNOMEShellSearchProvider;
|
|
|
|
class GnomeHistoryIcon {
|
|
public:
|
|
GnomeHistoryIcon() : mTimeStamp(-1), mWidth(0), mHeight(0){};
|
|
|
|
// From which search is this icon
|
|
void Set(int aTimeStamp, mozilla::UniquePtr<uint8_t[]> aData, int aWidth,
|
|
int aHeight) {
|
|
mTimeStamp = aTimeStamp;
|
|
mWidth = aWidth;
|
|
mHeight = aHeight;
|
|
mData = std::move(aData);
|
|
}
|
|
|
|
bool IsLoaded() { return mData && mWidth > 0 && mHeight > 0; }
|
|
int GetTimeStamp() { return mTimeStamp; }
|
|
uint8_t* GetData() { return mData.get(); }
|
|
int GetWidth() { return mWidth; }
|
|
int GetHeight() { return mHeight; }
|
|
|
|
private:
|
|
int mTimeStamp;
|
|
mozilla::UniquePtr<uint8_t[]> mData;
|
|
int mWidth;
|
|
int mHeight;
|
|
};
|
|
|
|
// nsGNOMEShellHistorySearchResult is a container with contains search results
|
|
// which are files asynchronously by nsGNOMEShellHistoryService.
|
|
// The search results can be opened by Firefox then.
|
|
class nsGNOMEShellHistorySearchResult : public nsUnixRemoteServer {
|
|
public:
|
|
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(nsGNOMEShellHistorySearchResult)
|
|
|
|
nsGNOMEShellHistorySearchResult(nsGNOMEShellSearchProvider* aSearchProvider,
|
|
DBusConnection* aConnection, int aTimeStamp)
|
|
: mSearchProvider(aSearchProvider),
|
|
mReply(nullptr),
|
|
mConnection(aConnection),
|
|
mTimeStamp(aTimeStamp){};
|
|
|
|
void SetReply(DBusMessage* aReply) { mReply = aReply; }
|
|
void SetSearchTerm(const char* aSearchTerm) {
|
|
mSearchTerm = nsAutoCString(aSearchTerm);
|
|
}
|
|
DBusConnection* GetDBusConnection() { return mConnection; }
|
|
void SetTimeStamp(int aTimeStamp) { mTimeStamp = aTimeStamp; }
|
|
int GetTimeStamp() { return mTimeStamp; }
|
|
nsAutoCString& GetSearchTerm() { return mSearchTerm; }
|
|
|
|
// Receive (asynchronously) history search results from history service.
|
|
// This is called asynchronously by nsGNOMEShellHistoryService
|
|
// when we have search results available.
|
|
void ReceiveSearchResultContainer(
|
|
nsCOMPtr<nsINavHistoryContainerResultNode> aHistResultContainer);
|
|
|
|
nsCOMPtr<nsINavHistoryContainerResultNode> GetSearchResultContainer() {
|
|
return mHistResultContainer;
|
|
}
|
|
void HandleCommandLine(const char* aBuffer, uint32_t aTimestamp) {
|
|
nsUnixRemoteServer::HandleCommandLine(aBuffer, aTimestamp);
|
|
}
|
|
|
|
void SetHistoryIcon(int aTimeStamp, mozilla::UniquePtr<uint8_t[]> aData,
|
|
int aWidth, int aHeight, int aIconIndex);
|
|
GnomeHistoryIcon* GetHistoryIcon(int aIconIndex);
|
|
|
|
private:
|
|
void HandleSearchResultReply();
|
|
|
|
~nsGNOMEShellHistorySearchResult() = default;
|
|
|
|
private:
|
|
nsGNOMEShellSearchProvider* mSearchProvider;
|
|
nsCOMPtr<nsINavHistoryContainerResultNode> mHistResultContainer;
|
|
nsAutoCString mSearchTerm;
|
|
DBusMessage* mReply;
|
|
DBusConnection* mConnection;
|
|
int mTimeStamp;
|
|
GnomeHistoryIcon mHistoryIcons[MAX_SEARCH_RESULTS_NUM];
|
|
};
|
|
|
|
class nsGNOMEShellHistoryService {
|
|
public:
|
|
nsresult QueryHistory(RefPtr<nsGNOMEShellHistorySearchResult> aSearchResult);
|
|
|
|
private:
|
|
nsCOMPtr<nsINavHistoryService> mHistoryService;
|
|
};
|
|
|
|
class nsGNOMEShellSearchProvider {
|
|
public:
|
|
nsGNOMEShellSearchProvider()
|
|
: mConnection(nullptr), mSearchResultTimeStamp(0) {}
|
|
~nsGNOMEShellSearchProvider() { Shutdown(); }
|
|
|
|
nsresult Startup();
|
|
void Shutdown();
|
|
|
|
DBusHandlerResult HandleDBusMessage(DBusConnection* aConnection,
|
|
DBusMessage* msg);
|
|
void UnregisterDBusInterface(DBusConnection* aConnection);
|
|
|
|
bool SetSearchResult(RefPtr<nsGNOMEShellHistorySearchResult> aSearchResult);
|
|
|
|
private:
|
|
DBusHandlerResult HandleSearchResultSet(DBusMessage* msg,
|
|
bool aInitialSearch);
|
|
DBusHandlerResult HandleResultMetas(DBusMessage* msg);
|
|
DBusHandlerResult ActivateResult(DBusMessage* msg);
|
|
DBusHandlerResult LaunchSearch(DBusMessage* msg);
|
|
|
|
// The connection is owned by DBus library
|
|
RefPtr<DBusConnection> mConnection;
|
|
RefPtr<nsGNOMEShellHistorySearchResult> mSearchResult;
|
|
int mSearchResultTimeStamp;
|
|
};
|
|
|
|
nsGNOMEShellHistoryService* GetGNOMEShellHistoryService();
|
|
|
|
#endif // __nsGNOMEShellSearchProvider_h__
|