示例#1
0
        public void MogControl_LibraryListView_DragDrop(object sender, DragEventArgs args)
        {
            // Extract the filenames
            string[] filenames = (string[])args.Data.GetData("FileDrop", false);
            if (filenames != null && filenames.Length > 0)
            {
                bool bCopyFiles    = true;
                bool bAutoAddFiles = false;
                bool bPromptUser   = false;
                bool bCancel       = false;

                // Check if thes files are coming from the same spot?
                string classification     = this.CurrentClassification;
                string classificationPath = MOG_ControllerLibrary.ConstructPathFromLibraryClassification(classification);
                // Get the common directory scope of the items
                ArrayList items    = new ArrayList(filenames);
                string    rootPath = MOG_ControllerAsset.GetCommonDirectoryPath("", items);
                if (rootPath.StartsWith(classificationPath))
                {
                    bCopyFiles = false;
                }

                // Check if auto import is checked?
                if (this.LibraryExplorer.IsAutoImportChecked())
                {
                    // Automatically add the file on the server
                    bAutoAddFiles = true;
                    bPromptUser   = true;

                    // Check if these files are already within the library?
                    if (MOG_ControllerLibrary.IsPathWithinLibrary(rootPath))
                    {
                        // Ignore what the user specified and rely on the classification generated from the filenames
                        classification = "";
                        bPromptUser    = false;
                        bCopyFiles     = false;
                    }
                }

                // Promt the user for confirmation before we import these files
                if (bPromptUser)
                {
                    // Prompt the user and allow them to cancel
                    if (LibraryFileImporter.PromptUserForConfirmation(filenames, classification) == false)
                    {
                        bCancel = true;
                    }
                }

                // Make sure we haven't canceled
                if (!bCancel)
                {
                    if (bCopyFiles)
                    {
                        // Import the files
                        List <object> arguments = new List <object>();
                        arguments.Add(filenames);
                        arguments.Add(classification);
                        ProgressDialog progress = new ProgressDialog("Copying Files", "Please wait while the files are copied", LibraryFileImporter.CopyFiles, arguments, true);
                        progress.ShowDialog();
                    }
                }

                // Make sure we haven't canceled
                if (!bCancel)
                {
                    if (bAutoAddFiles)
                    {
                        // Import the files
                        List <object> arguments = new List <object>();
                        arguments.Add(filenames);
                        arguments.Add(classification);
                        ProgressDialog progress = new ProgressDialog("Copying Files", "Please wait while the files are copied", LibraryFileImporter.ImportFiles, arguments, true);
                        progress.ShowDialog();
                    }
                }

                // Refresh view
                this.LibraryExplorer.Refresh();
            }
        }
示例#2
0
        private void CreateAssetConfigs_Worker(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            MOG_ControllerProject.LoginUser("Admin");

            // Construct a new common timestamp for all of these assets
            string timestamp = MOG_Time.GetVersionTimestamp();

            // Activate the properties cache to help save time during the importation process
            MOG_Properties.ActivatePropertiesCache(true);

            for (int nodeIndex = 0; nodeIndex < assetFilenameNodes.Count; nodeIndex++)
            {
                classTreeNode tn = assetFilenameNodes[nodeIndex] as classTreeNode;

                string fullAssetName = tn.FullPath;                //tn.Parent.FullPath + tn.Text;
                string fileList      = Utils.ArrayListToString(tn.importFiles, "");

                // Check if this is a library asset?
                bool bIsInLibrary = false;
                if (tn.TreeView != null)
                {
                    string fullPath = tn.FullPath + tn.TreeView.PathSeparator;
                    string testPath = tn.TreeView.PathSeparator + "Library" + tn.TreeView.PathSeparator;
                    if (fullPath.IndexOf(testPath, 0, StringComparison.CurrentCultureIgnoreCase) != -1)
                    {
                        bIsInLibrary = true;
                    }
                }

                MOG_Filename repositoryName = null;
                if (bIsInLibrary && tn.importFiles.Count > 0)
                {
                    // Use the timestamp of the file (Needed for out-of-date checks with library assets)
                    String   libraryTimestamp = "";
                    FileInfo file             = new FileInfo(tn.importFiles[0] as string);
                    if (file != null && file.Exists)
                    {
                        libraryTimestamp = MOG_Time.GetVersionTimestamp(file.LastWriteTime);
                    }
                    repositoryName = MOG_ControllerRepository.GetAssetBlessedVersionPath(new MOG_Filename(fullAssetName), libraryTimestamp);
                }
                else
                {
                    // Use the common timestamp for all the assets
                    repositoryName = MOG_ControllerRepository.GetAssetBlessedVersionPath(new MOG_Filename(fullAssetName), timestamp);
                }

                MOG_Filename createdAssetFilename = null;

                string message = "Importing:\n" +
                                 "     " + repositoryName.GetAssetClassification() + "\n" +
                                 "     " + repositoryName.GetAssetName();
                worker.ReportProgress(nodeIndex * 100 / assetFilenameNodes.Count, message);

                if (worker.CancellationPending)
                {
                    if (Utils.ShowMessageBoxConfirmation("Are you sure you want to cancel asset importation?", "Cancel Asset Importation?") == MOGPromptResult.Yes)
                    {
                        return;
                    }
                }

                try
                {
                    string dirScope = MOG_ControllerAsset.GetCommonDirectoryPath(this.projectRootPath, tn.importFiles);

                    // Construct our list non-inherited asset assuming none
                    ArrayList props = null;
                    if (tn.props != null)
                    {
                        // Ask the tn.props for the list of non-inherited properties
                        props = tn.props.GetNonInheritedProperties();
                    }
                    else
                    {
                        props = new ArrayList();

                        // Setup SyncTargetPath Property
                        string assetDirectoryScope = MOG_ControllerAsset.GetCommonDirectoryPath(this.projectRootPath, tn.importFiles);
                        if (assetDirectoryScope.Length > this.projectRootPath.Length)
                        {
                            string syncTargetPath = assetDirectoryScope.Substring(this.projectRootPath.Length + 1);
                            props.Add(MOG.MOG_PropertyFactory.MOG_Sync_OptionsProperties.New_SyncTargetPath(syncTargetPath));
                        }
                    }

                    // Proceed to import the asset
                    createdAssetFilename = MOG_ControllerAsset.CreateAsset(repositoryName, dirScope, tn.importFiles, null, props, false, false);
                    if (createdAssetFilename == null)
                    {
                        // it's probably a network problem (TODO: Check for sure)

                        // build a list of files for error message
                        string files = "\n\nFiles contained in " + tn.Text + "\n";
                        foreach (string fname in tn.importFiles)
                        {
                            files += "\t" + fname + "\n";
                        }

                        MOGPromptResult r = MOG_Prompt.PromptResponse("Import Error", "Importation of " + tn.FullPath + " failed.  Please ensure that the file is accessible and click Retry." + files, MOGPromptButtons.AbortRetryIgnore);
                        if (r == MOGPromptResult.Retry)
                        {
                            --nodeIndex;                                        // stay on the same node (continue auto-increments)
                            continue;
                        }
                        else if (r == MOGPromptResult.Abort)
                        {
                            RaiseAssetImport_Finish();
                            MOG_Prompt.PromptResponse("Cancelled", "Importation Cancelled", Environment.StackTrace, MOGPromptButtons.OK, MOG_ALERT_LEVEL.MESSAGE);
                            return;
                        }
                        else if (r == MOGPromptResult.Ignore)
                        {
                            continue;
                        }
                    }

                    // Schedule this asset for posting under this project name
                    MOG_ControllerProject.AddAssetForPosting(createdAssetFilename, MOG_ControllerProject.GetProjectName());
                }
                catch (Exception ex)
                {
                    MOG_Report.ReportMessage("Create Asset", "Could not correctly create asset.\nMessage=" + ex.Message, ex.StackTrace, MOG_ALERT_LEVEL.CRITICAL);
                    continue;
                }
            }

            // Shut off the properties cache
            MOG_Properties.ActivatePropertiesCache(false);
        }
示例#3
0
        private bool EncodeAll(TreeNodeCollection nodes, BackgroundWorker worker)
        {
            foreach (classTreeNode ctn in nodes)
            {
                if (worker != null)
                {
                    // Check for user initiated cancel
                    if (worker.CancellationPending)
                    {
                        return(false);
                    }

                    // Report progress to the user
                    worker.ReportProgress(0, ctn.FullPath);
                }

                if (!ctn.FilledIn)
                {
                    if (ctn.assetTreeNode != null)
                    {
                        // kill dummy node
                        ctn.Nodes.Clear();

                        // populate properties
                        if (ctn.props == null)
                        {
                            // Get the classification's properties that we can edit
                            ctn.props = MOG_Properties.OpenClassificationProperties(ctn.FullPath.Replace("\\", "~"));
                            ctn.props.SetImmeadiateMode(true);
                        }

                        // add converted children
                        foreach (AssetTreeNode atn in ctn.assetTreeNode.Nodes)
                        {
                            ctn.Nodes.Add(EncodeNode(atn, ctn.props));
                        }

                        // Setup SyncTargetPath Property of this classification
                        // First, we need to build a complete list of all the files being imported in this classification
                        ArrayList allImportFiles = new ArrayList();
                        foreach (classTreeNode ttn in ctn.Nodes)
                        {
                            allImportFiles.AddRange(ttn.importFiles);
                        }
                        // Check if we have any contained items?
                        if (allImportFiles.Count > 0)
                        {
                            // Scan for the highest common path amoung these files
                            string assetDirectoryPath = MOG_ControllerAsset.GetCommonDirectoryPath(this.projectRootPath, allImportFiles);
                            // Check if this command path is longer than the projectRootPath?
                            if (assetDirectoryPath.Length > this.projectRootPath.Length)
                            {
                                // Trim off the projectRootPath to obtain our desiredSyncTargetPath
                                string desiredSyncTargetPath = assetDirectoryPath.Substring(this.projectRootPath.Length + 1);
                                // Add the detected SyncTargetPath to this classification
                                ctn.props.SyncTargetPath = desiredSyncTargetPath;
                            }
                        }
                        else
                        {
                            // build synctargetpath
                            if (ctn.assetTreeNode.FileFullPath != "" &&                                         // "" indicates don't set sync data path
                                ctn.assetTreeNode.FileFullPath != "<empty>")                                    // "<empty>" indicates don't set sync data path
                            {
                                string syncDataPath = ctn.assetTreeNode.FileFullPath;
                                if (syncDataPath.ToLower().StartsWith(this.projectRootPath.ToLower()))
                                {
                                    syncDataPath = syncDataPath.Substring(this.projectRootPath.Length).Trim("\\".ToCharArray());
                                }

                                // Check if the syncTargetPath was resolved to nothing?
                                if (syncDataPath == "")
                                {
                                    // Force the syncTargetPath to 'Nothing' so it will resemble the resolved syncDataPath and not simply inherit
                                    syncDataPath = "Nothing";
                                }

                                ctn.props.SyncTargetPath = syncDataPath;
                            }
                        }

                        // mark this node as filled-in
                        ctn.FilledIn      = true;
                        ctn.assetTreeNode = null;
                    }
                }

                // recurse
                if (!EncodeAll(ctn.Nodes, worker))
                {
                    return(false);
                }
            }

            return(true);
        }
示例#4
0
        public void MogControl_LibraryTreeView_DragDrop(object sender, DragEventArgs args)
        {
            if (this.dragOverNode != null)
            {
                // Restore node's original colors
                this.dragOverNode.BackColor = SystemColors.Window;
                this.dragOverNode.ForeColor = SystemColors.ControlText;
            }

            // Get node we want to drop at
            TreeNode targetNode = this.GetNodeAt(this.PointToClient(new Point(args.X, args.Y)));

            // and select it so it'll show up in the ListView
            this.SelectedNode = targetNode;

            if (args.Data.GetDataPresent("FileDrop"))
            {
                // Extract the filenames and import
                string[] filenames = (string[])args.Data.GetData("FileDrop", false);
                if (filenames != null && filenames.Length > 0)
                {
                    bool bCopyFiles    = true;
                    bool bAutoAddFiles = false;
                    bool bPromptUser   = false;
                    bool bCancel       = false;

                    // Check if thes files are coming from the same spot?
                    string classification     = targetNode.FullPath;
                    string classificationPath = MOG_ControllerLibrary.ConstructPathFromLibraryClassification(classification);
                    // Get the common directory scope of the items
                    ArrayList items    = new ArrayList(filenames);
                    string    rootPath = MOG_ControllerAsset.GetCommonDirectoryPath("", items);
                    if (rootPath.StartsWith(classificationPath))
                    {
                        bCopyFiles = false;
                    }

                    // Check if auto import is checked?
                    if (this.LibraryExplorer.IsAutoImportChecked())
                    {
                        // Automatically add the file on the server
                        bAutoAddFiles = true;
                        bPromptUser   = true;

                        // Check if these files are already within the library?
                        if (MOG_ControllerLibrary.IsPathWithinLibrary(rootPath))
                        {
                            // Ignore what the user specified and rely on the classification generated from the filenames
                            classification = "";
                            bPromptUser    = false;
                            bCopyFiles     = false;
                        }
                    }

                    // Promt the user for confirmation before we import these files
                    if (bPromptUser)
                    {
                        // Prompt the user and allow them to cancel
                        if (LibraryFileImporter.PromptUserForConfirmation(filenames, classification) == false)
                        {
                            bCancel = true;
                        }
                    }

                    // Make sure we haven't canceled
                    if (!bCancel)
                    {
                        if (bCopyFiles)
                        {
                            // Import the files
                            List <object> arguments = new List <object>();
                            arguments.Add(filenames);
                            arguments.Add(classification);
                            ProgressDialog progress = new ProgressDialog("Copying Files", "Please wait while the files are copied", LibraryFileImporter.CopyFiles, arguments, true);
                            progress.ShowDialog();
                        }
                    }

                    // Make sure we haven't canceled
                    if (!bCancel)
                    {
                        if (bAutoAddFiles)
                        {
                            // Import the files
                            List <object> arguments = new List <object>();
                            arguments.Add(filenames);
                            arguments.Add(classification);
                            ProgressDialog progress = new ProgressDialog("Copying Files", "Please wait while the files are copied", LibraryFileImporter.ImportFiles, arguments, true);
                            progress.ShowDialog();
                        }
                    }

                    // Refresh view
                    DeInitialize();
                    Initialize();
                }
            }
            else if (args.Data.GetDataPresent("LibraryListItems"))
            {
                ArrayList items = args.Data.GetData("LibraryListItems") as ArrayList;

                foreach (string item in items)
                {
                    // Move library asset here
                    MOG_Filename assetName = new MOG_Filename(item);
                    // Check if this was an asset?
                    if (assetName.GetFilenameType() == MOG_FILENAME_TYPE.MOG_FILENAME_Asset)
                    {
                        bool success = MOG_ControllerProject.GetProject().AssetRename(assetName.GetAssetFullName(), SelectedNode.FullPath + assetName.GetAssetName());
                        // Make sure we unsync this asset just in case it had already been synced
                        MOG_ControllerLibrary.Unsync(assetName);
                    }
                    // Check if this was a file?
                    else if (DosUtils.FileExistFast(item))
                    {
                        string dstPath   = MOG_ControllerLibrary.ConstructPathFromLibraryClassification(SelectedNode.FullPath);
                        string dstTarget = Path.Combine(dstPath, Path.GetFileName(item));
                        DosUtils.FileMoveFast(item, dstTarget, true);
                    }
                }
            }
            else if (args.Data.GetDataPresent("LibraryTreeNode"))
            {
                string classification = args.Data.GetData("LibraryTreeNode") as string;

                if (classification != null && classification.Length > 0)
                {
                    //Move classification here
                    string[] parts = classification.Split("~".ToCharArray());
                    if (parts.Length > 0)
                    {
                        string lastPart = parts[parts.Length - 1];

                        bool success = MOG_ControllerProject.GetProject().ClassificationRename(classification, SelectedNode.FullPath + "~" + lastPart);
                    }
                    else
                    {
                        MOG_Prompt.PromptResponse("Cannot move classification", "MOG was unable to move the classification", Environment.StackTrace, MOGPromptButtons.OK);
                    }
                }
            }
        }