示例#1
0
        public CallbackStatus UpdateProgress_Callback(ProgressMsg msg, object info, object progctx)
        {
            CallbackTested tested = progctx as CallbackTested;

            Assert.IsNotNull(tested);

            switch (msg)
            {
            case ProgressMsg.UPDATE_BEGIN_COMMAND:
            case ProgressMsg.UPDATE_END_COMMAND:
            {
                ProgressInfo_Update m = (ProgressInfo_Update)info;

                Assert.IsNotNull(m);
                tested.Set();

                UpdateCommand cmd = m.Command;
                switch (cmd.Op)
                {
                case UpdateOp.ADD:
                {
                    var add = cmd.Add;
                    Console.WriteLine($"ADD [{add.FsSourcePath}] -> [{add.WimTargetPath}]");
                }
                break;

                case UpdateOp.DELETE:
                {
                    var del = cmd.Delete;
                    Console.WriteLine($"DELETE [{del.WimPath}]");
                }
                break;

                case UpdateOp.RENAME:
                {
                    var ren = cmd.Rename;
                    Console.WriteLine($"RENAME [{ren.WimSourcePath}] -> [{ren.WimTargetPath}]");
                }
                break;
                }
            }
            break;

            default:
                break;
            }
            return(CallbackStatus.CONTINUE);
        }
示例#2
0
        public static CallbackStatus UpdateProgressCallback(ProgressMsg msg, object info, object progctx)
        {
            CallbackTested tested = progctx as CallbackTested;

            Assert.IsNotNull(tested);

            switch (msg)
            {
            case ProgressMsg.UpdateBeginCommand:
            case ProgressMsg.UpdateEndCommand:
            {
                UpdateProgress m = (UpdateProgress)info;
                Assert.IsNotNull(m);

                tested.Set();

                UpdateCommand cmd = m.Command;
                Console.WriteLine($"Commands = {m.CompletedCommands}/{m.TotalCommands}");
                switch (cmd.Op)
                {
                case UpdateOp.Add:
                {
                    AddCommand add = cmd.Add;
                    Console.WriteLine($"ADD [{add.FsSourcePath}] -> [{add.WimTargetPath}]");
                }
                break;

                case UpdateOp.Delete:
                {
                    DeleteCommand del = cmd.Delete;
                    Console.WriteLine($"DELETE [{del.WimPath}]");
                }
                break;

                case UpdateOp.Rename:
                {
                    RenameCommand ren = cmd.Rename;
                    Console.WriteLine($"RENAME [{ren.WimSourcePath}] -> [{ren.WimTargetPath}]");
                }
                break;
                }
            }
            break;
            }

            return(CallbackStatus.Continue);
        }
示例#3
0
        private static CallbackStatus UpdatedStatusCallback(ProgressMsg msg, object info, object progctx,
                                                            IDownloadProgress progressObserver)
        {
            if (info is ProgressInfo_Extract m)
            {
                ulong percentComplete = 0;

                switch (msg)
                {
                case ProgressMsg.EXTRACT_FILE_STRUCTURE:

                    if (0 < m.EndFileCount)
                    {
                        percentComplete = m.CurrentFileCount * 10 / m.EndFileCount;
                    }

                    break;

                case ProgressMsg.EXTRACT_STREAMS:

                    if (0 < m.TotalBytes)
                    {
                        percentComplete = 10 + m.CompletedBytes * 80 / m.TotalBytes;
                    }

                    break;

                case ProgressMsg.EXTRACT_METADATA:

                    if (0 < m.EndFileCount)
                    {
                        percentComplete = 90 + m.CurrentFileCount * 10 / m.EndFileCount;
                    }

                    break;
                }

                progressObserver.Percentage.OnNext((double)percentComplete / 100);
            }


            return(CallbackStatus.CONTINUE);
        }
示例#4
0
        private CallbackStatus NativeCallback(ProgressMsg msgType, IntPtr info, IntPtr progctx)
        {
            object pInfo = null;

            if (_callback == null)
            {
                return(CallbackStatus.Continue);
            }

            switch (msgType)
            {
            case ProgressMsg.WriteStreams:
                pInfo = Marshal.PtrToStructure <WriteStreamsProgress>(info);
                break;

            case ProgressMsg.ScanBegin:
            case ProgressMsg.ScanDEntry:
            case ProgressMsg.ScanEnd:
                pInfo = Marshal.PtrToStructure <ScanProgress>(info);
                break;

            case ProgressMsg.ExtractSpwmPartBegin:
            case ProgressMsg.ExtractImageBegin:
            case ProgressMsg.ExtractTreeBegin:
            case ProgressMsg.ExtractFileStructure:
            case ProgressMsg.ExtractStreams:
            case ProgressMsg.ExtractMetadata:
            case ProgressMsg.ExtractTreeEnd:
            case ProgressMsg.ExtractImageEnd:
                pInfo = Marshal.PtrToStructure <ExtractProgress>(info);
                break;

            case ProgressMsg.Rename:
                pInfo = Marshal.PtrToStructure <RenameProgress>(info);
                break;

            case ProgressMsg.UpdateBeginCommand:
            case ProgressMsg.UpdateEndCommand:
                UpdateProgressBase _base = Marshal.PtrToStructure <UpdateProgressBase>(info);
                pInfo = _base.ToManaged();
                break;

            case ProgressMsg.VerifyIntegrity:
            case ProgressMsg.CalcIntegrity:
                pInfo = Marshal.PtrToStructure <IntegrityProgress>(info);
                break;

            case ProgressMsg.SplitBeginPart:
            case ProgressMsg.SplitEndPart:
                pInfo = Marshal.PtrToStructure <SplitProgress>(info);
                break;

            case ProgressMsg.ReplaceFileInWim:
                pInfo = Marshal.PtrToStructure <ReplaceProgress>(info);
                break;

            case ProgressMsg.WimBootExclude:
                pInfo = Marshal.PtrToStructure <WimBootExcludeProgress>(info);
                break;

            case ProgressMsg.UnmountBegin:
                pInfo = Marshal.PtrToStructure <UnmountProgress>(info);
                break;

            case ProgressMsg.DoneWithFile:
                pInfo = Marshal.PtrToStructure <DoneWithFileProgress>(info);
                break;

            case ProgressMsg.BeginVerifyImage:
            case ProgressMsg.EndVerifyImage:
                pInfo = Marshal.PtrToStructure <VerifyImageProgress>(info);
                break;

            case ProgressMsg.VerifyStreams:
                pInfo = Marshal.PtrToStructure <VerifyStreamsProgress>(info);
                break;

            case ProgressMsg.TestFileExclusion:
                pInfo = Marshal.PtrToStructure <TestFileExclusionProgress>(info);
                break;

            case ProgressMsg.HandleError:
                pInfo = Marshal.PtrToStructure <HandleErrorProgress>(info);
                break;
            }

            return(_callback(msgType, pInfo, _userData));
        }
示例#5
0
        private CallbackStatus NativeCallback(ProgressMsg msgType, IntPtr info, IntPtr progctx)
        {
            object pInfo = null;

            if (_callback != null)
            {
                switch (msgType)
                {
                case ProgressMsg.WRITE_STREAMS:
                    pInfo = (ProgressInfo_WriteStreams)Marshal.PtrToStructure(info, typeof(ProgressInfo_WriteStreams));
                    break;

                case ProgressMsg.SCAN_BEGIN:
                case ProgressMsg.SCAN_DENTRY:
                case ProgressMsg.SCAN_END:
                    pInfo = (ProgressInfo_Scan)Marshal.PtrToStructure(info, typeof(ProgressInfo_Scan));
                    break;

                case ProgressMsg.EXTRACT_SPWM_PART_BEGIN:
                case ProgressMsg.EXTRACT_IMAGE_BEGIN:
                case ProgressMsg.EXTRACT_TREE_BEGIN:
                case ProgressMsg.EXTRACT_FILE_STRUCTURE:
                case ProgressMsg.EXTRACT_STREAMS:
                case ProgressMsg.EXTRACT_METADATA:
                case ProgressMsg.EXTRACT_TREE_END:
                case ProgressMsg.EXTRACT_IMAGE_END:
                    pInfo = (ProgressInfo_Extract)Marshal.PtrToStructure(info, typeof(ProgressInfo_Extract));
                    break;

                case ProgressMsg.RENAME:
                    pInfo = (ProgressInfo_Rename)Marshal.PtrToStructure(info, typeof(ProgressInfo_Rename));
                    break;

                case ProgressMsg.UPDATE_BEGIN_COMMAND:
                case ProgressMsg.UPDATE_END_COMMAND:
                    ProgressInfo_UpdateBase _base = (ProgressInfo_UpdateBase)Marshal.PtrToStructure(info, typeof(ProgressInfo_UpdateBase));
                    pInfo = _base.ToManaged();
                    break;

                case ProgressMsg.VERIFY_INTEGRITY:
                case ProgressMsg.CALC_INTEGRITY:
                    pInfo = (ProgressInfo_Integrity)Marshal.PtrToStructure(info, typeof(ProgressInfo_Integrity));
                    break;

                case ProgressMsg.SPLIT_BEGIN_PART:
                case ProgressMsg.SPLIT_END_PART:
                    pInfo = (ProgressInfo_Split)Marshal.PtrToStructure(info, typeof(ProgressInfo_Split));
                    break;

                case ProgressMsg.REPLACE_FILE_IN_WIM:
                    pInfo = (ProgressInfo_Replace)Marshal.PtrToStructure(info, typeof(ProgressInfo_Replace));
                    break;

                case ProgressMsg.WIMBOOT_EXCLUDE:
                    pInfo = (ProgressInfo_WimBootExclude)Marshal.PtrToStructure(info, typeof(ProgressInfo_WimBootExclude));
                    break;

                case ProgressMsg.UNMOUNT_BEGIN:
                    pInfo = (ProgressInfo_Unmount)Marshal.PtrToStructure(info, typeof(ProgressInfo_Unmount));
                    break;

                case ProgressMsg.DONE_WITH_FILE:
                    pInfo = (ProgressInfo_DoneWithFile)Marshal.PtrToStructure(info, typeof(ProgressInfo_DoneWithFile));
                    break;

                case ProgressMsg.BEGIN_VERIFY_IMAGE:
                case ProgressMsg.END_VERIFY_IMAGE:
                    pInfo = (ProgressInfo_VerifyImage)Marshal.PtrToStructure(info, typeof(ProgressInfo_VerifyImage));
                    break;

                case ProgressMsg.VERIFY_STREAMS:
                    pInfo = (ProgressInfo_VerifyStreams)Marshal.PtrToStructure(info, typeof(ProgressInfo_VerifyStreams));
                    break;

                case ProgressMsg.TEST_FILE_EXCLUSION:
                    pInfo = (ProgressInfo_TestFileExclusion)Marshal.PtrToStructure(info, typeof(ProgressInfo_TestFileExclusion));
                    break;

                case ProgressMsg.HANDLE_ERROR:
                    pInfo = (ProgressInfo_HandleError)Marshal.PtrToStructure(info, typeof(ProgressInfo_HandleError));
                    break;
                }

                return(_callback(msgType, pInfo, _userData));
            }
            else
            {
                return(CallbackStatus.CONTINUE);
            }
        }