public byte[] GetData()
        {
            var data = Data;

            if (data != null)
            {
                return(data);
            }

            if (_source != null)
            {
                data = _source.GetData();
                Data = data;

                if (!Settings.EnableSilentMode)
                {
                    XuaLogger.AutoTranslator.Debug($"Image loaded: {FileName}.");
                }
            }

            return(data);
        }
        private void RegisterImageFromStream(string fullFileName, ITranslatedImageSource source)
        {
            try
            {
                var fileName  = Path.GetFileNameWithoutExtension(fullFileName);
                var startHash = fileName.LastIndexOf("[");
                var endHash   = fileName.LastIndexOf("]");

                if (endHash > -1 && startHash > -1 && endHash > startHash)
                {
                    var takeFrom = startHash + 1;

                    // load based on whether or not the key is image hashed
                    var    parts = fileName.Substring(takeFrom, endHash - takeFrom).Split('-');
                    string key;
                    string originalHash;
                    if (parts.Length == 1)
                    {
                        key          = parts[0];
                        originalHash = parts[0];
                    }
                    else if (parts.Length == 2)
                    {
                        key          = parts[0];
                        originalHash = parts[1];
                    }
                    else
                    {
                        XuaLogger.AutoTranslator.Warn($"Image not loaded (unknown hash): {fullFileName}.");
                        return;
                    }

                    var data        = source.GetData();
                    var currentHash = HashHelper.Compute(data);
                    var isModified  = StringComparer.InvariantCultureIgnoreCase.Compare(originalHash, currentHash) != 0;

                    _keyToFileName[key] = fullFileName;

                    // only load images that someone has modified!
                    if (Settings.LoadUnmodifiedTextures || isModified)
                    {
                        RegisterTranslatedImage(fullFileName, key, data, source);

                        if (!Settings.EnableSilentMode)
                        {
                            XuaLogger.AutoTranslator.Debug($"Image loaded: {fullFileName}.");
                        }
                    }
                    else
                    {
                        RegisterUntranslatedImage(key);
                        XuaLogger.AutoTranslator.Warn($"Image not loaded (unmodified): {fullFileName}.");
                    }
                }
                else
                {
                    XuaLogger.AutoTranslator.Warn($"Image not loaded (no hash): {fullFileName}.");
                }
            }
            catch (Exception e)
            {
                XuaLogger.AutoTranslator.Error(e, "An error occurred while loading texture file: " + fullFileName);
            }
        }