예제 #1
0
        private static ResourceItem CopyDir(ResourceFolder parent, FileOptionHelp.FileData dirPath, ref ImportResourceResult importResult, List <FileOptionHelp.FileData> dealDithFiles, IProgressMonitor monitor)
        {
            ResourceFolder resourceFolder = (ResourceFolder)null;

            if (importResult.Token.IsCancellationRequested)
            {
                return((ResourceItem)resourceFolder);
            }
            ResourceFolder parent1;

            if (dirPath.FilePath.IsChildPathOf(parent.BaseDirectory))
            {
                if (!FileOptionHelp.VerifyPath(dirPath.FilePath))
                {
                    monitor.Step(1);
                    monitor.ReportError(string.Format(LanguageInfo.MessageBox199_PathContainsChinese, (object)dirPath.FilePath), (Exception)null);
                    return((ResourceItem)null);
                }
                ResourceItem importRoot = (ResourceItem)null;
                parent1 = Services.ProjectOperations.AddResourceItem(parent, dirPath.FilePath, monitor, out importRoot) as ResourceFolder;
                importResult.AddResourcePanelItems.Add(importRoot);
            }
            else
            {
                FilePath filePath = parent.BaseDirectory.Combine(new string[1] {
                    dirPath.Name
                });
                if (!FileOptionHelp.VerifyPath(filePath))
                {
                    monitor.Step(1);
                    monitor.ReportError(string.Format(LanguageInfo.MessageBox199_PathContainsChinese, (object)dirPath.FilePath), (Exception)null);
                    return((ResourceItem)null);
                }
                if (!Directory.Exists((string)filePath))
                {
                    Directory.CreateDirectory((string)filePath);
                }
                parent1 = Services.ProjectOperations.AddResourceItem(parent, filePath, monitor) as ResourceFolder;
            }
            DirectoryInfo directoryInfo1 = new DirectoryInfo((string)dirPath.FilePath);

            FileInfo[]      files       = directoryInfo1.GetFiles();
            DirectoryInfo[] directories = directoryInfo1.GetDirectories();
            SortedSet <FileOptionHelp.FileData> fileDatas = FileOptionHelp.CreateFileDatas(((IEnumerable <FileInfo>)files).Select <FileInfo, string>((Func <FileInfo, string>)(a => a.FullName)));

            foreach (DirectoryInfo directoryInfo2 in directories)
            {
                if (!directoryInfo2.Attributes.HasFlag((Enum)FileAttributes.Hidden))
                {
                    FileOptionHelp.FileData dirPath1 = new FileOptionHelp.FileData(directoryInfo2.FullName);
                    FileOptionHelp.CopyDir(parent1, dirPath1, ref importResult, dealDithFiles, monitor);
                }
            }
            foreach (FileOptionHelp.FileData filePath in fileDatas)
            {
                if (!filePath.Attributes.HasFlag((Enum)FileAttributes.Hidden))
                {
                    FileOptionHelp.CopyFile(parent1, filePath, ref importResult, dealDithFiles, monitor);
                }
            }
            return((ResourceItem)parent1);
        }
예제 #2
0
        private static ResourceItem CopyFile(ResourceFolder parent, FileOptionHelp.FileData filePath, ref ImportResourceResult importResult, List <FileOptionHelp.FileData> dealDithFiles, IProgressMonitor monitor)
        {
            ResourceItem result;

            try
            {
                if (importResult.Token.IsCancellationRequested)
                {
                    result = null;
                }
                else
                {
                    bool flag = false;
                    if (null != importResult.FileTypeSuffix)
                    {
                        flag = true;
                        if (importResult.FileTypeSuffix.Contains(filePath.FilePath.Extension))
                        {
                            flag = false;
                        }
                    }
                    flag |= filePath.FilePath.Extension.Equals(".ccs", StringComparison.OrdinalIgnoreCase);
                    if (flag)
                    {
                        monitor.Step(1);
                        result = null;
                    }
                    else if (dealDithFiles.Contains(filePath))
                    {
                        result = null;
                    }
                    else
                    {
                        List <string> list = FileOptionHelp.ProcessPairResources(filePath.FilePath);
                        if (list != null)
                        {
                            filePath.CanRename = false;
                        }
                        FilePath filePath2 = parent.BaseDirectory.Combine(new string[]
                        {
                            filePath.Name
                        });
                        DialogResult dialogRes = new DialogResult();
                        if (!FileOptionHelp.VerifyPath(filePath2))
                        {
                            monitor.Step(1);
                            monitor.ReportError(string.Format(LanguageInfo.MessageBox199_PathContainsChinese, filePath.FilePath), null);
                            result = null;
                        }
                        else if (filePath.FilePath.IsChildPathOf(parent.BaseDirectory))
                        {
                            if (!FileOptionHelp.VerifyPath(filePath.FilePath))
                            {
                                monitor.Step(1);
                                monitor.ReportError(string.Format(LanguageInfo.MessageBox199_PathContainsChinese, filePath.FilePath), null);
                                result = null;
                            }
                            else
                            {
                                ResourceItem resourceItem  = null;
                                ResourceItem resourceItem2 = Services.ProjectOperations.AddResourceItem(parent, filePath.FilePath, monitor, out resourceItem);
                                if (resourceItem != null)
                                {
                                    if (resourceItem.Parent != parent)
                                    {
                                        importResult.AddResourcePanelItems.Add(resourceItem.Parent);
                                    }
                                    else
                                    {
                                        importResult.AddResourcePanelItems.Add(resourceItem);
                                    }
                                }
                                File.SetAttributes(filePath.FilePath, FileAttributes.Normal);
                                result = resourceItem2;
                            }
                        }
                        else
                        {
                            if (File.Exists(filePath2))
                            {
                                if (!importResult.DialogResult.IsChangedAll)
                                {
                                    if (FileOptionHelp.IsMainThread())
                                    {
                                        ImportFileDialog importFileDialog = new ImportFileDialog(Services.MainWindow, filePath.CanRename);
                                        importFileDialog.RefreshMessage(filePath.Name);
                                        dialogRes = importFileDialog.ShowRun();
                                    }
                                    else
                                    {
                                        AutoResetEvent autoReset = new AutoResetEvent(false);
                                        GLib.Timeout.Add(0u, delegate
                                        {
                                            ImportFileDialog importFileDialog2 = new ImportFileDialog(Services.MainWindow, filePath.CanRename);
                                            importFileDialog2.RefreshMessage(filePath.Name);
                                            dialogRes = importFileDialog2.ShowRun();
                                            autoReset.Set();
                                            return(false);
                                        });
                                        autoReset.WaitOne();
                                    }
                                    importResult.DialogResult = dialogRes;
                                }
                                switch (importResult.DialogResult.ButtonResult)
                                {
                                case EImportFileButtonResult.KeepBoth:
                                    if (filePath.CanRename)
                                    {
                                        filePath2 = FileOptionHelp.RenameFile(filePath2);
                                    }
                                    else
                                    {
                                        monitor.ReportWarning(string.Format(LanguageInfo.MessageBox200_CannotRename, filePath.FilePath));
                                    }
                                    break;

                                case EImportFileButtonResult.Skip:
                                    result = null;
                                    return(result);
                                }
                            }
                            if (list != null)
                            {
                                string text = FileOptionHelp.CheckFiles(list);
                                if (!string.IsNullOrWhiteSpace(text))
                                {
                                    monitor.Step(1);
                                    string message = string.Format(LanguageInfo.MessageBox195_NoMatchPng, filePath.FilePath, text);
                                    monitor.ReportWarning(message);
                                    result = null;
                                    return(result);
                                }
                                foreach (FilePath current in list)
                                {
                                    FilePath filePath3 = current.ToRelative(filePath.FilePath.ParentDirectory).ToAbsolute(parent.BaseDirectory);
                                    string   path      = filePath3.ParentDirectory;
                                    if (!Directory.Exists(path))
                                    {
                                        Directory.CreateDirectory(path);
                                    }
                                    FileService.CopyFile(current, filePath3);
                                    File.SetAttributes(filePath3, FileAttributes.Normal);
                                    dealDithFiles.Add(new FileOptionHelp.FileData(current));
                                }
                            }
                            FileService.CopyFile(filePath.FilePath, filePath2);
                            File.SetAttributes(filePath2, FileAttributes.Normal);
                            ResourceItem resourceItem3 = Services.ProjectOperations.AddResourceItem(parent, filePath2, monitor);
                            if (resourceItem3 is Project && importResult.DialogResult.ButtonResult == EImportFileButtonResult.Replace)
                            {
                                ((Project)resourceItem3).Reload(monitor);
                            }
                            result = resourceItem3;
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                monitor.Step(1);
                monitor.ReportError(string.Format(LanguageInfo.Output_ImportFailed, filePath.FilePath), exception);
                result = null;
            }
            return(result);
        }