xpmgr/BuildTools/Include/SearchNotifications.idl

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);
};