123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- using IDE.ui;
- using System;
- using System.IO;
- using Beefy.utils;
- using System.Collections.Generic;
- using System.Security.Cryptography;
- using IDE.util;
- namespace IDE
- {
- [AllowDuplicates]
- public enum LineEndingKind
- {
- Unknown,
- Lf, // \n
- CrLf, // \r\n
- Cr, // \r
- #if BF_PLATFORM_WINDOWS
- Default = CrLf,
- #else
- Default = Lf,
- #endif
- }
- public class FileEditData
- {
- public int mRefCount = 1;
- public String mSavedContent ~ delete _;
- public IdSpan mSavedCharIdData = IdSpan() ~ _.Dispose();
- public List<ProjectSource> mProjectSources = new List<ProjectSource>() ~ delete _;
- public Event<Action> mEditWidgetCreatedEvent ~ _.Dispose();
- public LineEndingKind mLineEndingKind;
- public SourceEditWidget mEditWidget;
- public int32 mLastFileTextVersion;
- public bool mOwnsEditWidget;
- public String mFilePath ~ delete _;
- public String mQueuedContent ~ delete _;
- public bool mHadRefusedFileChange;
- public bool mFileDeleted;
- public MD5Hash mMD5Hash;
- public SHA256Hash mSHA256Hash;
- public this()
- {
- }
- public void SetSavedData(String savedContent, IdSpan savedIdSpan)
- {
- if (savedContent != null)
- {
- if (mSavedContent == null)
- mSavedContent = new String();
- mSavedContent.Set(savedContent);
- }
- else
- {
- delete mSavedContent;
- mSavedContent = null;
- }
- mSavedCharIdData.Dispose();
- mSavedCharIdData = savedIdSpan.Duplicate();
- }
- public bool HasTextChanged()
- {
- if (mEditWidget == null)
- return false;
- return mLastFileTextVersion != mEditWidget.Content.mData.mCurTextVersionId;
- }
-
- public bool Reload()
- {
- mHadRefusedFileChange = false;
- if (mEditWidget == null)
- {
- if (mQueuedContent != null)
- {
- var span = IdSpan.GetDefault((int32)mQueuedContent.Length);
- SetSavedData(mQueuedContent, span);
- span.Dispose();
- DeleteAndNullify!(mQueuedContent);
- }
- }
- else
- {
- var editWidgetContent = (SourceEditWidgetContent)mEditWidget.mEditWidgetContent;
- mFileDeleted = !editWidgetContent.Reload(mFilePath, mQueuedContent);
- /*if (editWidgetContent.mSourceViewPanel.LoadedHash.GetKind() == mLoadedHash.GetKind())
- editWidgetContent.mSourceViewPanel.LoadedHash = mLoadedHash;*/
- mLastFileTextVersion = mEditWidget.Content.mData.mCurTextVersionId;
- }
- return true;
- }
-
- public bool IsFileDeleted()
- {
- if (mFileDeleted) // Double check
- mFileDeleted = !File.Exists(mFilePath);
- return mFileDeleted;
- }
- public bool IsLocked()
- {
- if (mEditWidget != null)
- {
- if (let sourceEditWidgetContent = mEditWidget.mEditWidgetContent as SourceEditWidgetContent)
- {
- if (sourceEditWidgetContent.mSourceViewPanel != null)
- {
- if (sourceEditWidgetContent.mSourceViewPanel.IsReadOnly)
- return true;
- }
- }
- }
- for (var projectSource in mProjectSources)
- {
- if (projectSource.mProject.mLocked)
- return true;
- }
- return false;
- }
-
- public ~this()
- {
- if (mOwnsEditWidget)
- delete mEditWidget;
- }
- public void Ref()
- {
- mRefCount++;
- }
- public void Deref()
- {
- if (--mRefCount == 0)
- delete this;
- }
-
- public void BuildHash(StringView contents)
- {
- mMD5Hash = Security.Cryptography.MD5.Hash(.((uint8*)contents.Ptr, contents.Length));
- mSHA256Hash = Security.Cryptography.SHA256.Hash(.((uint8*)contents.Ptr, contents.Length));
- }
- public bool CheckHash(SourceHash sourceHash)
- {
- switch (sourceHash)
- {
- case .MD5(let hash): return hash == mMD5Hash;
- case .SHA256(let hash): return hash == mSHA256Hash;
- default: return false;
- }
- }
- }
- }
|