示例#1
0
        //public async Task GetMetadata(byte[] asset)
        //{
        //    var key = Convert.ToBase64String(asset);

        //    if (_Cache.ContainsKey(key))
        //        return;

        //    var assetMetadata = new AssetMetadata() { Asset = asset, Display = key };

        //    _Cache.TryAdd(key, assetMetadata);
        //    AssetMatadataChanged(assetMetadata); // firstly, with initial Display
        //    await GetAssetMatadataAsync(assetMetadata);
        //    AssetMatadataChanged(assetMetadata); // again, now with updated Display
        //}

        public void GetMetadata(string key, byte[] asset)
        {
            Task.Factory.StartNew(async() => {
                var assetMetadata = new AssetMetadata()
                {
                    Asset = asset, Display = key
                };

                _Cache.TryAdd(key, assetMetadata);

                await GetAssetMatadataAsync(assetMetadata);

                try
                {
                    if (AssetMatadataChanged != null)
                    {
                        AssetMatadataChanged(assetMetadata);
                    }
                }
                catch (Exception e)
                {
                    InfrastructureTrace.Information($"Error invoking subscriber: {e.Message}");
                }
            });
        }
示例#2
0
        async Task GetAssetMatadataAsync(AssetMetadata assetMetadata)
        {
            var uri = new Uri(string.Format($"http://{Utils.Config("assetsDiscovery")}/AssetMetadata/Index/" + HttpServerUtility.UrlTokenEncode(assetMetadata.Asset)));

            InfrastructureTrace.Information($"Loading asset metadata from web: {uri.AbsoluteUri}");
            using (var response = await new HttpClient().GetAsync(uri.AbsoluteUri))
            {
                if (response.IsSuccessStatusCode)
                {
                    var remoteString = await response.Content.ReadAsStringAsync();

                    try
                    {
                        //Version currentVersion = null;
                        //Version remoteVersion = null;

                        var remoteJson = JsonConvert.DeserializeObject <AssetMetadataJson>(remoteString);

                        //currentVersion = _Cache.Value.ContainsKey(_hash) ? new Version(_Cache.Value[_hash].version) : new Version();
                        //remoteVersion = remoteJson.version == null ? new Version() : new Version(remoteJson.version);

                        //TODO: check if newer version
                        //if (remoteVersion > currentVersion)

                        //TODO: fetch image

                        if (string.IsNullOrWhiteSpace(remoteJson.name))
                        {
                            //assetMetadata.Display += " (No metadada)";
                        }
                        else
                        {
                            lock (_lock)
                            {
                                assetMetadata.Display = remoteJson.name;
                                _CacheJsonStore.Value[Convert.ToBase64String(assetMetadata.Asset)] = remoteJson;
                                _CacheJsonStore.Save();
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        InfrastructureTrace.Information($"Error fetching asset metadata from url: {uri.AbsoluteUri}");
                        assetMetadata.Display += " (Metadata error)";
                    }
                }
                else
                {
                    assetMetadata.Display += " (Network error)";
                }
            }
        }
示例#3
0
        public AssetsMetadata(WalletManager wallet)
        {
            try
            {
                string directory = Utils.PathCombine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), Utils.Config("assetsDir"));
                _CacheJsonStore.FileName = Utils.PathCombine(directory, "metadata.json");
                _CacheJsonStore.Value.ToList().ForEach(t => _Cache.TryAdd(t.Key, new AssetMetadata()
                {
                    Asset = Convert.FromBase64String(t.Key), Display = t.Value.name
                }));
                _Cache.TryAdd(Convert.ToBase64String(Consensus.Tests.zhash), new AssetMetadata()
                {
                    Asset = Consensus.Tests.zhash, Display = ZEN
                });

                wallet.OnItems += OnItems;
            } catch (Exception e)
            {
                InfrastructureTrace.Error("AssetsMetadata ctor", e);
            }
        }