mirror of https://github.com/UMSKT/xpmgr.git
223 lines
7.2 KiB
Plaintext
223 lines
7.2 KiB
Plaintext
//+----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (c) 2005 Microsoft Corporation.
|
|
//
|
|
// File: SearchNotifications.idl
|
|
//
|
|
// Purpose: Search Notifications Interface Description
|
|
//
|
|
// History: 08/13/2005 louisg Modified
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Change Notifications
|
|
//
|
|
// A change notification happens when an item changes and it needs
|
|
// to be reindexed.
|
|
//
|
|
|
|
|
|
//
|
|
// Kind of change
|
|
//
|
|
typedef [v1_enum] enum _SEARCH_KIND_OF_CHANGE {
|
|
SEARCH_CHANGE_ADD = 0,
|
|
SEARCH_CHANGE_DELETE = 1,
|
|
SEARCH_CHANGE_MODIFY = 2,
|
|
|
|
//
|
|
// Item has been moved or renamed
|
|
//
|
|
SEARCH_CHANGE_MOVE_RENAME = 3,
|
|
|
|
//
|
|
// This is a directory--optimization since crawl needs to define it
|
|
//
|
|
SEARCH_CHANGE_SEMANTICS_DIRECTORY = 0x40000,
|
|
|
|
//
|
|
// Only index directory properties
|
|
//
|
|
SEARCH_CHANGE_SEMANTICS_SHALLOW = 0x80000,
|
|
|
|
//
|
|
// Update security only--optimization
|
|
//
|
|
SEARCH_CHANGE_SEMANTICS_UPDATE_SECURITY = 0x400000,
|
|
|
|
} SEARCH_KIND_OF_CHANGE;
|
|
|
|
typedef enum _SEARCH_NOTIFICATION_PRIORITY {
|
|
SEARCH_NORMAL_PRIORITY = 0,
|
|
SEARCH_HIGH_PRIORITY = 1
|
|
} SEARCH_NOTIFICATION_PRIORITY;
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// ISearchItemsChangedSink - This interface allows passing on change
|
|
// notifications to the indexer; i.e.,
|
|
// to alert the indexer that an item needs to be
|
|
// updated
|
|
//
|
|
[
|
|
object,
|
|
uuid(AB310581-AC80-11D1-8DF3-00C04FB6EF58),
|
|
pointer_default(unique)
|
|
]
|
|
interface ISearchItemsChangedSink: IUnknown
|
|
{
|
|
// Indicate hierarchical scopes that are being monitored.
|
|
// IMPLEMENTATION: Incrementals will skip these scopes once
|
|
// specified. Also starting monitoring will no longer
|
|
// automatically kick off an incremental.
|
|
HRESULT StartedMonitoringScope([in, string] LPCWSTR pszURL);
|
|
HRESULT StoppedMonitoringScope([in, string] LPCWSTR pszURL);
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Pusher Notifications
|
|
//
|
|
// Client gets status updates as notification goes through the pipeline,
|
|
// but has to resubmit in the case of crawler failure.
|
|
//
|
|
|
|
//
|
|
// Information about change
|
|
// There is no longer a logical URL passed in here because the indexer does not track
|
|
// it anyway. The only real purpose was for status.
|
|
//
|
|
typedef struct _SEARCH_ITEM_CHANGE
|
|
{
|
|
SEARCH_KIND_OF_CHANGE Change;
|
|
//
|
|
// High priority is done before normal priority is done before incrementals
|
|
//
|
|
SEARCH_NOTIFICATION_PRIORITY Priority;
|
|
BLOB *pUserData;
|
|
LPWSTR lpwszURL;
|
|
[unique] LPWSTR lpwszOldURL; //valid only for moves
|
|
} SEARCH_ITEM_CHANGE;
|
|
|
|
//
|
|
// Notification providers call this in order to get the indexer to
|
|
// index some changed items.
|
|
//
|
|
// IMPLEMENTATION: When there are multiple notifications we need
|
|
// to make sure that a URL ends up in the highest priorty queue.
|
|
//
|
|
HRESULT OnItemsChanged([in] DWORD dwNumberOfChanges,
|
|
[in, size_is(dwNumberOfChanges)] SEARCH_ITEM_CHANGE rgDataChangeEntries[],
|
|
//
|
|
// Doc IDs that will be passed
|
|
// back when finished
|
|
//
|
|
[out, size_is(dwNumberOfChanges)] DWORD rgdwDocIds[],
|
|
//
|
|
// This indicates whether or not each URL was
|
|
// accepted for indexing
|
|
//
|
|
[out, size_is(dwNumberOfChanges)] HRESULT rghrCompletionCodes[]);
|
|
|
|
|
|
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// ISearchPersistentItemsChangedSink - This interface allows passing on change
|
|
// notifications to the indexer; i.e.,
|
|
// to alert the indexer that an item needs
|
|
// to be updated
|
|
//
|
|
[
|
|
object,
|
|
uuid(A2FFDF9B-4758-4F84-B729-DF81A1A0612F),
|
|
pointer_default(unique)
|
|
]
|
|
interface ISearchPersistentItemsChangedSink: IUnknown
|
|
{
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Persistent Notifications
|
|
//
|
|
// Client will not receive status as notification progresses,
|
|
// but notifications are persisted and do not need to be resubmitted
|
|
// as a recovery crawl will pick them up.
|
|
//
|
|
|
|
//
|
|
// Indicate hierarchical scopes that are being monitored.
|
|
// IMPLEMENTATION: Incrementals will skip these scopes once
|
|
// specified. Also starting monitoring will no longer
|
|
// automatically kick off an incremental.
|
|
//
|
|
HRESULT StartedMonitoringScope([in, string] LPCWSTR pszURL);
|
|
HRESULT StoppedMonitoringScope([in, string] LPCWSTR pszURL);
|
|
|
|
//
|
|
// Information about change
|
|
// There is no longer a logical URL passed in here because the indexer does not track
|
|
// it anyway. The only real purpose was for status.
|
|
//
|
|
typedef struct _SEARCH_ITEM_PERSISTENT_CHANGE
|
|
{
|
|
SEARCH_KIND_OF_CHANGE Change;
|
|
LPWSTR URL;
|
|
[unique] LPWSTR OldURL; //valid only for moves
|
|
//
|
|
// High priority is done before normal priority is done before incrementals
|
|
//
|
|
SEARCH_NOTIFICATION_PRIORITY Priority;
|
|
} SEARCH_ITEM_PERSISTENT_CHANGE;
|
|
|
|
HRESULT OnItemsChanged([in] DWORD dwNumberOfChanges,
|
|
[in, size_is(dwNumberOfChanges)] SEARCH_ITEM_PERSISTENT_CHANGE DataChangeEntries[],
|
|
//
|
|
// This indicates whether or not each URL was
|
|
// accepted for indexing
|
|
//
|
|
[out, size_is(dwNumberOfChanges)] HRESULT hrCompletionCodes[]);
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Index Notifications
|
|
//
|
|
// These notifications happen when an item has been successfully
|
|
// indexed. The structure is registered on the catalog via
|
|
// RegisterViewForNotification() and these methods are called by the
|
|
// indexer to notify a client when a change occurs.
|
|
//
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// ISearchViewChangedSink
|
|
//
|
|
[
|
|
object,
|
|
uuid(AB310581-AC80-11D1-8DF3-00C04FB6EF65),
|
|
pointer_default(unique)
|
|
]
|
|
interface ISearchViewChangedSink: IUnknown
|
|
{
|
|
//
|
|
// Get the ITEMID that changed, the kind of change and whether or
|
|
// not the change is in the registered view. If there is no
|
|
// registered view, then this is alway FALSE.
|
|
//
|
|
HRESULT OnChange([in] ITEMID *pdwDocID,
|
|
[in] SEARCH_ITEM_CHANGE *pChange,
|
|
[in] BOOL *pfInView);
|
|
};
|
|
|
|
|
|
|