//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0008
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "Windows.Foundation.idl";
import "Windows.Storage.idl";
// Additional imports to ensure that all required headers are included
cpp_quote("#if defined(__cplusplus)")
cpp_quote("}")
cpp_quote("#endif // defined(__cplusplus)")
cpp_quote("#include <Windows.Foundation.h>")
cpp_quote("#if !defined(__windows2Estorage_h__)")
cpp_quote("#include <Windows.Storage.h>")
cpp_quote("#endif // !defined(__windows2Estorage_h__)")
cpp_quote("#if defined(__cplusplus)")
cpp_quote("extern \"C\" {")
cpp_quote("#endif // defined(__cplusplus)")

// Forward Declare
namespace Windows
{
    namespace Storage
    {
        interface IStorageFile;

        runtimeclass StorageFile;
    }
}
namespace Windows
{
    namespace Storage
    {
        namespace Provider
        {
            typedef enum CachedFileTarget CachedFileTarget;

            typedef enum UIStatus UIStatus;

            typedef enum FileUpdateStatus FileUpdateStatus;

            typedef enum CachedFileOptions CachedFileOptions;

            typedef enum ReadActivationMode ReadActivationMode;

            typedef enum WriteActivationMode WriteActivationMode;

            interface ICachedFileUpdaterUI;

            interface IFileUpdateRequestedEventArgs;

            interface IFileUpdateRequest;

            interface IFileUpdateRequestDeferral;

            interface ICachedFileUpdaterStatics;

            runtimeclass CachedFileUpdaterUI;

            runtimeclass FileUpdateRequestedEventArgs;

            runtimeclass FileUpdateRequest;

            runtimeclass FileUpdateRequestDeferral;

            runtimeclass CachedFileUpdater;
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Storage
    {
        namespace Provider
        {
            declare
            {
                interface Windows.Foundation.IAsyncOperation<Windows.Storage.Provider.FileUpdateStatus>;

                interface Windows.Foundation.TypedEventHandler<Windows.Storage.Provider.CachedFileUpdaterUI*, IInspectable*>;

                interface Windows.Foundation.TypedEventHandler<Windows.Storage.Provider.CachedFileUpdaterUI*, Windows.Storage.Provider.FileUpdateRequestedEventArgs*>;
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Storage
    {
        namespace Provider
        {
            [version(0x06020000)]
            enum CachedFileTarget
            {
                Local  = 0,
                Remote = 1
            };

            [version(0x06020000)]
            enum UIStatus
            {
                Unavailable = 0,
                Hidden      = 1,
                Visible     = 2,
                Complete    = 3
            };

            [version(0x06020000)]
            enum FileUpdateStatus
            {
                Incomplete           = 0,
                Complete             = 1,
                UserInputNeeded      = 2,
                CurrentlyUnavailable = 3,
                Failed               = 4,
                CompleteAndRenamed   = 5
            };

            [flags]
            [version(0x06020000)]
            enum CachedFileOptions
            {
                None                     = 0x0,
                RequireUpdateOnAccess    = 0x1,
                UseCachedFileWhenOffline = 0x2,
                DenyAccessWhenOffline    = 0x4
            };

            [version(0x06020000)]
            enum ReadActivationMode
            {
                NotNeeded    = 0,
                BeforeAccess = 1
            };

            [version(0x06020000)]
            enum WriteActivationMode
            {
                ReadOnly   = 0,
                NotNeeded  = 1,
                AfterWrite = 2
            };

            [uuid(9E6F41E6-BAF2-4A97-B600-9333F5DF80FD)]
            [exclusiveto(Windows.Storage.Provider.CachedFileUpdaterUI)]
            [version(0x06020000)]
            interface ICachedFileUpdaterUI : IInspectable
            {
                [propget] HRESULT Title([out] [retval] HSTRING* value);
                [propput] HRESULT Title([in] HSTRING value);
                [propget] HRESULT UpdateTarget([out] [retval] Windows.Storage.Provider.CachedFileTarget* value);
                [eventadd] HRESULT FileUpdateRequested([in] Windows.Foundation.TypedEventHandler<Windows.Storage.Provider.CachedFileUpdaterUI*, Windows.Storage.Provider.FileUpdateRequestedEventArgs*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT FileUpdateRequested([in] EventRegistrationToken token);
                [eventadd] HRESULT UIRequested([in] Windows.Foundation.TypedEventHandler<Windows.Storage.Provider.CachedFileUpdaterUI*, IInspectable*>* handler, [out] [retval] EventRegistrationToken* token);
                [eventremove] HRESULT UIRequested([in] EventRegistrationToken token);
                [propget] HRESULT UIStatus([out] [retval] Windows.Storage.Provider.UIStatus* value);
            }

            [uuid(7B0A9342-3905-438D-AAEF-78AE265F8DD2)]
            [exclusiveto(Windows.Storage.Provider.FileUpdateRequestedEventArgs)]
            [version(0x06020000)]
            interface IFileUpdateRequestedEventArgs : IInspectable
            {
                [propget] HRESULT Request([out] [retval] Windows.Storage.Provider.FileUpdateRequest** value);
            }

            [uuid(40C82536-C1FE-4D93-A792-1E736BC70837)]
            [version(0x06020000)]
            [exclusiveto(Windows.Storage.Provider.FileUpdateRequest)]
            interface IFileUpdateRequest : IInspectable
            {
                [propget] HRESULT ContentId([out] [retval] HSTRING* value);
                [propget] HRESULT File([out] [retval] Windows.Storage.StorageFile** value);
                [propget] HRESULT Status([out] [retval] Windows.Storage.Provider.FileUpdateStatus* value);
                [propput] HRESULT Status([in] Windows.Storage.Provider.FileUpdateStatus value);
                HRESULT GetDeferral([out] [retval] Windows.Storage.Provider.FileUpdateRequestDeferral** value);
                HRESULT UpdateLocalFile([in] Windows.Storage.IStorageFile* value);
            }

            [uuid(FFCEDB2B-8ADE-44A5-BB00-164C4E72F13A)]
            [version(0x06020000)]
            [exclusiveto(Windows.Storage.Provider.FileUpdateRequestDeferral)]
            interface IFileUpdateRequestDeferral : IInspectable
            {
                HRESULT Complete();
            }

            [uuid(9FC90920-7BCF-4888-A81E-102D7034D7CE)]
            [version(0x06020000)]
            [exclusiveto(Windows.Storage.Provider.CachedFileUpdater)]
            interface ICachedFileUpdaterStatics : IInspectable
            {
                HRESULT SetUpdateInformation([in] Windows.Storage.IStorageFile* file, [in] HSTRING contentId, [in] Windows.Storage.Provider.ReadActivationMode readMode, [in] Windows.Storage.Provider.WriteActivationMode writeMode, [in] Windows.Storage.Provider.CachedFileOptions options);
            }

            [version(0x06020000)]
            runtimeclass CachedFileUpdaterUI
            {
                [default] interface Windows.Storage.Provider.ICachedFileUpdaterUI;
            }

            [version(0x06020000)]
            runtimeclass FileUpdateRequestedEventArgs
            {
                [default] interface Windows.Storage.Provider.IFileUpdateRequestedEventArgs;
            }

            [version(0x06020000)]
            runtimeclass FileUpdateRequest
            {
                [default] interface Windows.Storage.Provider.IFileUpdateRequest;
            }

            [version(0x06020000)]
            runtimeclass FileUpdateRequestDeferral
            {
                [default] interface Windows.Storage.Provider.IFileUpdateRequestDeferral;
            }

            [marshaling_behavior(agile)]
            [version(0x06020000)]
            [static(Windows.Storage.Provider.ICachedFileUpdaterStatics, 0x06020000)]
            runtimeclass CachedFileUpdater
            {
            }
        }
    }
}
