Exemple #1
0
 protected override void OverrideExecute(DataPumpControllableExecutionContext context)
 {
     if (context.Source.ItemType == SourceFileItemType.NormalPath)
     {
         context.Source.Local = FileHelper.ConnectPath(_savePath, context.Source.Config.Replace('/', '\\'));
     }
 }
        public void InitExecution(DataPumpControllableExecutionContext context)
        {
            String destPath   = context.GetContextData <String>("destPath");
            String sourcePath = context.GetContextData <String>("sourcePath");

            string target = Path.Combine(destPath, "data");
            var    res    = IOSDeviceCoreDll.AnalyzeItunesBackupDATAPWD(sourcePath, target, (f, t, a) =>
            {
                //asyn.Advance(0, string.Format(LanguageHelper.Get("LANGKEY_HuiFuWenJian_01478"), f));
                return(0);
            }, (b) =>
            {
                var password = context.GetContextData <String>("password") ?? String.Empty;
                var pS       = Marshal.StringToHGlobalAnsi(password);
                Marshal.WriteIntPtr(b, pS);
                return(0);
            });

            if (0 == res)
            {
                string[] files = Directory.GetDirectories(target);
                foreach (string file in files)
                {
                    var fileName = Path.GetFileName(file);
                    //第三方应用
                    if (!fileName.Contains("com.apple.") && fileName.Contains("AppDomain-"))
                    {
                        var newFileName = fileName.Replace("AppDomain-", "");
                        Directory.Move(Path.Combine(target, fileName), Path.Combine(target, newFileName));
                    }
                }
            }
        }
 /// <summary>
 /// 使用特定的执行上下文执行服务。
 /// </summary>
 /// <param name="context">执行上下文。</param>
 protected override void ExecuteCore(DataPumpControllableExecutionContext context)
 {
     if (context.Source.ItemType == Domains.SourceFileItemType.NormalPath)
     {
         context.Source.Local = FileHelper.ConnectPath(context.GetContextData <String>("desctPath"), context.Source.Config);
     }
 }
        private Boolean Init(DataPumpControllableExecutionContext context)
        {
            //1.获取镜像文件路径
            String mirrorFile = context.PumpDescriptor.Source as String;

            if (String.IsNullOrWhiteSpace(mirrorFile))
            {
                return(false);
            }

            //2.解压
            String destPath = Path.Combine(context.TargetDirectory, $"IosData_{context.GetHashCode()}");

            if (Directory.Exists(destPath))
            {
                Directory.Delete(destPath, true);
            }
            ZipFile.ExtractToDirectory(mirrorFile, destPath);

            SetContextData(context, "destPath", destPath);
            //3.处理app文件夹
            var directories = Directory.GetDirectories(destPath);

            foreach (string path in directories)
            {
                if (path.Contains("AppDomain-"))
                {
                    Directory.Move(path, path.Replace("AppDomain-", String.Empty));
                }
            }
            return(true);
        }
Exemple #5
0
 protected override void OverrideExecute(DataPumpControllableExecutionContext context)
 {
     if (context.Source.ItemType == Domains.SourceFileItemType.NormalPath)
     {
         context.Source.Local = FileHelper.ConnectPath(_destPath, context.Source.Config);
     }
 }
Exemple #6
0
        private void HandleWithSDCardPath(Device device, DataPumpControllableExecutionContext context)
        {
            SourceFileItem source = context.Source;
            String         path   = FileHelper.ConnectLinuxPath(device.SDCardPath, source.SDCardConfig);

            source.Local = device.CopyFile(path, context.TargetDirectory, context.Reporter);
        }
Exemple #7
0
        /// <summary>
        /// 使用特定的执行上下文执行服务。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        protected override void ExecuteCore(DataPumpControllableExecutionContext context)
        {
            String dataSourcePath = context.PumpDescriptor.Source as String;
            String destDirectory  = context.Source.Local;

            ZipFile.ExtractToDirectory(dataSourcePath, destDirectory);
        }
Exemple #8
0
 /// <summary>
 /// 使用特定的执行上下文执行服务。
 /// </summary>
 /// <param name="context">执行上下文。</param>
 protected override void ExecuteCore(DataPumpControllableExecutionContext context)
 {
     String destDirectory = context.Source.Local;
     //BlackBerryDeviceManager deviceManager = BlackBerryDeviceManager.Instance;
     //deviceManager.DataPumpType = true;
     //deviceManager.CopyFile((Device)context.Metadata.Source, "", destDirectory, context.Reporter);
 }
Exemple #9
0
        private void InitStrategy(DataPumpControllableExecutionContext context)
        {
            if (ItunsBackFileStategy.IsItunsBackFile(context, out String backFilePath))
            {
                if (!(_strategy is ItunsBackFileStategy))
                {
                    _strategy = new ItunsBackFileStategy();
                }
            }
            else if (KuPaiBackFileStategy.IsKuPaiBackFile(context, out backFilePath))
            {
                if (!(_strategy is KuPaiBackFileStategy))
                {
                    _strategy = new KuPaiBackFileStategy();
                }
            }
            else
            {
                if (!(_strategy is AppDataStategy))
                {
                    _strategy = new AppDataStategy();
                }
            }

            _strategy?.InitExecution(context);
        }
 /// <summary>
 /// 初始化当前的执行流程。
 /// </summary>
 /// <param name="context">执行上下文。</param>
 /// <returns>成功返回true;否则返回false。</returns>
 protected override Boolean InitExecutionContext(DataPumpControllableExecutionContext context)
 {
     if (context.Source == null)
     {
         return(false);
     }
     context.Source.Local = _destDirectory;
     return(true);
 }
Exemple #11
0
        /// <summary>
        /// 使用特定的执行上下文执行服务。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        protected override void ExecuteCore(DataPumpControllableExecutionContext context)
        {
            String savePath = context.GetContextData <String>("savePath");

            if (context.Source.ItemType == SourceFileItemType.NormalPath)
            {
                context.Source.Local = FileHelper.ConnectPath(savePath, context.Source.Config);
            }
        }
Exemple #12
0
        /// <summary>
        /// 创建实现了 IFileSystemDevice 接口的类型实例。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        /// <returns>实现了 IFileSystemDevice 接口的类型实例。</returns>
        protected override IFileSystemDevice CreateFileSystemDevice(DataPumpControllableExecutionContext context)
        {
            IFileSystemDevice device = new CellbriteDevice(context.PumpDescriptor.Source.ToString())
            {
                Source    = context.PumpDescriptor.Source,
                ScanModel = (Byte)context.PumpDescriptor.ScanModel
            };

            return(device);
        }
Exemple #13
0
        /// <summary>
        /// 创建实现了 IFileSystemDevice 接口的类型实例。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        /// <returns>实现了 IFileSystemDevice 接口的类型实例。</returns>
        protected virtual IFileSystemDevice CreateFileSystemDevice(DataPumpControllableExecutionContext context)
        {
            IFileSystemDevice device = new MirrorDevice
            {
                Source    = context.PumpDescriptor,
                ScanModel = (Byte)context.PumpDescriptor.ScanModel
            };

            return(device);
        }
        /// <summary>
        /// 创建实现了 IFileSystemDevice 接口的类型实例。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        /// <returns>实现了 IFileSystemDevice 接口的类型实例。</returns>
        protected override IFileSystemDevice CreateFileSystemDevice(DataPumpControllableExecutionContext context)
        {
            IFileSystemDevice device = new SDCardDevice
            {
                Source    = context.PumpDescriptor,
                ScanModel = (Byte)context.PumpDescriptor.ScanModel
            };

            return(device);
        }
Exemple #15
0
        /// <summary>
        /// 初始化当前的执行流程。当执行该方法时,会获取镜像的文件系统信息。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        /// <returns>成功返回true;否则返回false。</returns>
        protected sealed override Boolean InitExecution(DataPumpControllableExecutionContext context)
        {
            IFileSystemDevice device = CreateFileSystemDevice(context);

            if (device == null)
            {
                return(false);
            }
            SetContextData(context, FileSystemDeviceKey, device);
            return(FileService.GetFileSystem(device, ((DataPumpControllableExecutionContext)context).Reporter) != null);
        }
Exemple #16
0
        /// <summary>
        /// 初始化执行上下文。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        /// <returns>成功返回true;否则返回false。</returns>
        protected override Boolean InitExecutionContext(DataPumpControllableExecutionContext context)
        {
            String sourcePath = context.Source.ToSafeString();

            if (sourcePath == String.Empty || !Directory.Exists(sourcePath))
            {
                return(false);
            }
            context.SetContextData("sourcePath", sourcePath);
            return(true);
        }
        public static Boolean IsItunsBackFile(DataPumpControllableExecutionContext context, out String backFilePath)
        {
            String path = context.GetContextData <String>("sourcePath");
            string key  = "Manifest.mbdb";

            var res = Directory.GetFiles(path, key, SearchOption.AllDirectories);

            if (res.IsValid())
            {
                foreach (var resPath in res)
                {
                    if (!File.Exists(resPath.Replace(key, "Info.plist")))
                    {
                        continue;
                    }
                    if (!File.Exists(resPath.Replace(key, "Manifest.plist")))
                    {
                        continue;
                    }
                    if (!File.Exists(resPath.Replace(key, "Status.plist")))
                    {
                        continue;
                    }
                    backFilePath = new FileInfo(resPath).DirectoryName;
                    return(true);
                }
            }

            key = "Manifest.db";
            res = Directory.GetFiles(path, key, SearchOption.AllDirectories);
            if (res.IsValid())
            {
                foreach (var resPath in res)
                {
                    if (!File.Exists(resPath.Replace(key, "Info.plist")))
                    {
                        continue;
                    }
                    if (!File.Exists(resPath.Replace(key, "Manifest.plist")))
                    {
                        continue;
                    }
                    if (!File.Exists(resPath.Replace(key, "Status.plist")))
                    {
                        continue;
                    }
                    backFilePath = new FileInfo(resPath).DirectoryName;
                    return(true);
                }
            }
            backFilePath = null;
            return(false);
        }
Exemple #18
0
        /// <summary>
        /// 使用特定的执行上下文执行服务。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        protected override void ExecuteCore(DataPumpControllableExecutionContext context)
        {
            Device device = (Device)Metadata.Source;

            AndroidHelper.Instance.BackupAndResolve(device, FileHelper.ConnectPath(_savePath, $"{device.SerialNumber}.rar"));

            String content = String.Empty;

            foreach (String command in Commands)
            {
                content = AndroidHelper.Instance.ExecuteSPFAppCommand(device, command);
                File.WriteAllText(FileHelper.ConnectPath(_savePath, $"{command}.txt"), content);
            }
        }
        /// <summary>
        /// 使用特定的执行上下文执行服务。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        protected override void ExecuteCore(DataPumpControllableExecutionContext context)
        {
            SourceFileItem source = context.Source;

            if (source.ItemType == SourceFileItemType.NormalPath)
            {
                string path = source.Config.TrimEnd("#F");
                if (path.StartsWith("/data/data/"))
                {
                    path = ("/data/" + path.TrimStart("/data/data/"));
                }
                path         = path.Replace("/", @"\");
                source.Local = FileHelper.ConnectPath(context.TargetDirectory, path);
            }
        }
        public static Boolean IsKuPaiBackFile(DataPumpControllableExecutionContext context, out String backFilePath)
        {
            String path = context.GetContextData <String>("sourcePath");
            string key  = "recentcalls.zip";

            var res = Directory.GetFiles(path, key, SearchOption.AllDirectories);

            if (res.IsValid())
            {
                backFilePath = new FileInfo(res[0]).DirectoryName;
                return(true);
            }
            backFilePath = null;
            return(false);
        }
Exemple #21
0
        /// <summary>
        /// 使用特定的执行上下文执行服务。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        protected override void ExecuteCore(DataPumpControllableExecutionContext context)
        {
            String destPath = context.GetContextData <String>("destPath");
            Device device   = context.GetContextData <Device>("device");

            AndroidHelper.Instance.BackupAndResolve(device, FileHelper.ConnectPath(destPath, $"{device.SerialNumber}.rar"));

            String content = String.Empty;

            foreach (String command in Commands)
            {
                content = AndroidHelper.Instance.ExecuteSPFAppCommand(device, command);
                File.WriteAllText(FileHelper.ConnectPath(destPath, $"{command}.txt"), content);
            }
        }
Exemple #22
0
        private MTPDevice GetMTPDevice(DataPumpControllableExecutionContext context)
        {
            Device device = context.PumpDescriptor.Source as Device;

            if (device == null)
            {
                return(null);
            }
            MTPDevice mtpDevice = MtpDeviceManager.Instance.GetMTPDevice(device);

            if (mtpDevice != null)
            {
                mtpDevice.RootFileNode = MtpDeviceManager.Instance.GetRootFileNode(mtpDevice, context.Reporter);
            }
            return(mtpDevice);
        }
        public void Process(DataPumpControllableExecutionContext context)
        {
            if (context.Source.ItemType == Domains.SourceFileItemType.NormalPath)
            {
                String destPath = context.GetContextData <String>("destPath");

                string path = context.Source.Config.TrimEnd("#F");
                if (path.StartsWith("/data/data/"))
                {
                    path = ("/data/" + path.TrimStart("/data/data/"));
                }
                path = path.Replace("/", @"\");

                context.Source.Local = FileHelper.ConnectPath(destPath, "data", path);
            }
        }
        /// <summary>
        /// 使用特定的执行上下文执行服务。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        protected sealed override void ExecuteCore(DataPumpControllableExecutionContext context)
        {
            switch (context.Source.ItemType)
            {
            case SourceFileItemType.FileExtension:
                HandleWithFileExtension(context);
                break;

            case SourceFileItemType.NormalPath:
                HandleWithNormalPath(context);
                break;

            default:
                throw new NotSupportedException();
            }
        }
Exemple #25
0
        /// <summary>
        /// 初始化当前的执行流程。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        /// <returns>成功返回true;否则返回false。</returns>
        protected override Boolean InitExecution(DataPumpControllableExecutionContext context)
        {
            String dataSourcePath = context.PumpDescriptor.Source as String;

            if (String.IsNullOrWhiteSpace(dataSourcePath))
            {
                return(false);
            }
            String destDirectory = FileHelper.ConnectPath(context.TargetDirectory, $"BlackBerry_{dataSourcePath.GetHashCode()}");

            if (Directory.Exists(destDirectory))
            {
                Directory.Delete(destDirectory, true);
            }
            Directory.CreateDirectory(destDirectory);
            context.Source.Local = destDirectory;
            return(true);
        }
Exemple #26
0
        /// <summary>
        /// 创建实现了 IFileSystemDevice 接口的类型实例。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        /// <returns>实现了 IFileSystemDevice 接口的类型实例。</returns>
        protected override IFileSystemDevice CreateFileSystemDevice(DataPumpControllableExecutionContext context)
        {
            Device device = context.PumpDescriptor.Source as Device;

            if (device == null)
            {
                return(null);
            }
            IFileSystemDevice fsDevice = new CottageDevice
            {
                FlshType  = device.FlshType,
                DevType   = device.DevType,
                Source    = context.PumpDescriptor.Source,
                ScanModel = (Byte)context.PumpDescriptor.ScanModel
            };

            return(fsDevice);
        }
Exemple #27
0
 /// <summary>
 /// 初始化当前的执行流程。
 /// </summary>
 /// <param name="context">执行上下文。</param>
 /// <returns>成功返回true;否则返回false。</returns>
 protected override Boolean InitExecution(DataPumpControllableExecutionContext context)
 {
     if (context.PumpDescriptor.Source is Device device)
     {
         String path = FileHelper.GetPhysicalPath(@"Toolkits\app\SPFSocket.apk");
         if (AndroidHelper.Instance.InstallPackage(path, device))
         {
             path = FileHelper.ConnectPath(context.TargetDirectory, $"AndroidData_{context.GetHashCode()}");
             if (Directory.Exists(path))
             {
                 Directory.Delete(path, true);
             }
             FileHelper.CreateDirectory(path);
             SetContextData(context, "destPath", path);
             SetContextData(context, "device", device);
         }
     }
     return(false);
 }
Exemple #28
0
        /// <summary>
        /// 使用特定的执行上下文执行服务。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        protected override void ExecuteCore(DataPumpControllableExecutionContext context)
        {
            SourceFileItem source = context.Source;

            if (source.ItemType != SourceFileItemType.FileExtension)
            {
                throw new InvalidOperationException("Only support FileExtension");
            }
            MTPDevice mtpDevice = GetMTPDevice();

            if (mtpDevice == null)
            {
                return;
            }
            //2.解析文件类型和文件后缀名列表
            var filetype   = Regex.Match(source.Config, @"^\$(\S+),").Groups[1].Value;
            var extensions = source.Config.Substring(filetype.Length).Split(';').Select(ex => string.Format(".{0}", ex));
            //3.获取文件列表
            var fileNodes = mtpDevice.GetFiles(extensions);
            //4.拷贝文件
            String sourcePath;
            String destPath;

            foreach (var fileNode in fileNodes)
            {
                sourcePath = fileNode.GetFullPath();
                destPath   = Path.Combine(Metadata.SourceStorePath, filetype, sourcePath);
                FileHelper.CreateDirectory(destPath);
                if (MtpDeviceManager.Instance.CopyFileFromDevice(mtpDevice, fileNode, destPath))
                {
                    var copyfile = new FileInfo(Path.Combine(destPath, fileNode.Name));
                    if (copyfile.Exists)
                    {
                        //修改文件的 创建时间、最后修改时间、最后访问时间
                        MtpDeviceManager.Instance.GetDate(mtpDevice, fileNode);

                        File.SetCreationTime(copyfile.FullName, CovertMTPDateTime(fileNode.DateCreated));
                        File.SetLastWriteTime(copyfile.FullName, CovertMTPDateTime(fileNode.DateModified));
                        File.SetLastAccessTime(copyfile.FullName, CovertMTPDateTime(fileNode.DateAuthored));
                    }
                }
            }
        }
Exemple #29
0
        /// <summary>
        /// 初始化当前的执行流程。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        /// <returns>成功返回true;否则返回false。</returns>
        protected override Boolean InitExecution(DataPumpControllableExecutionContext context)
        {
            if (!(context.PumpDescriptor.Source is Device))
            {
                return(false);
            }
            if (context.Source == null)
            {
                return(false);
            }
            String destDirectory = FileHelper.ConnectPath(context.TargetDirectory, $"BlackBerry_{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")}");

            if (Directory.Exists(destDirectory))
            {
                Directory.Delete(destDirectory, true);
            }
            Directory.CreateDirectory(destDirectory);
            context.Source.Local = destDirectory;
            return(true);
        }
Exemple #30
0
        /// <summary>
        /// 使用特定的执行上下文执行服务。
        /// </summary>
        /// <param name="context">执行上下文。</param>
        protected override void ExecuteCore(DataPumpControllableExecutionContext context)
        {
            Device device = context.PumpDescriptor.Source as Device;

            if (device == null)
            {
                return;
            }
            switch (context.Source.ItemType)
            {
            case SourceFileItemType.AndroidSDCardPath:
                HandleWithSDCardPath(device, context);
                break;

            case SourceFileItemType.NormalPath:
                HandleWithNormalPath(device, context);
                break;

            default:
                throw new NotSupportedException();
            }
        }