Example #1
0
        public bool CanWrite(IWriteContent content, FileWrite write)
        {
            long contentLength    = content.EndOffset.HasValue ? content.EndOffset.Value - content.StartOffset : 0;
            long contentEndOffset = content.StartOffset + contentLength;

            bool startsInRange = content.StartOffset > write.localStartOffset && content.StartOffset < write.localEndOffset;
            bool endsInRange   = contentEndOffset > write.localStartOffset && contentEndOffset < write.localEndOffset;

            // We're attempting to write to a section of the file that has been modified by another
            if (startsInRange || (content.Replace && endsInRange))
            {
                return(false);
            }

            return(true);
        }
Example #2
0
        public bool CanWrite(string targetFile, IWriteContent content)
        {
            // Check if we don't have any writes to the file yet
            if (!writeCache.TryGetValue(targetFile, out List <FileWrite> fileWrites))
            {
                return(true);
            }

            foreach (var write in fileWrites)
            {
                if (!CanWrite(content, write))
                {
                    return(false);
                }
            }

            return(true);
        }
Example #3
0
        public static bool HasEditCollision(GameModification currentMod, string file, IWriteContent content, FileWriterUtility fileWriter, List <FileModification> modifications, out ModCollision collision)
        {
            var actions = new ActionCollection(file, currentMod.Config.ModID, modifications);

            if (actions.moveAction != null)
            {
                return(AddModCollision(currentMod, ModInstallActionEnum.Edit, FileModificationType.Moved, actions.moveAction.ModID, ModCollisionSeverity.Clash, out collision));
            }

            if (actions.replaceAction != null)
            {
                return(AddModCollision(currentMod, ModInstallActionEnum.Edit, FileModificationType.Replaced, actions.replaceAction.ModID, ModCollisionSeverity.Clash, out collision));
            }

            if (actions.editAction != null && !fileWriter.CanWrite(file, content))
            {
                return(AddModCollision(currentMod, ModInstallActionEnum.Edit, FileModificationType.Edited, actions.editAction.ModID, ModCollisionSeverity.Clash, out collision));
            }

            if (actions.deleteAction != null)
            {
                return(AddModCollision(currentMod, ModInstallActionEnum.Edit, FileModificationType.Deleted, actions.deleteAction.ModID, ModCollisionSeverity.Clash, out collision));
            }

            collision = null;
            return(false);
        }