private ReleaseInfo CreateReleaseInfo(QueryResponseItem item)
        {
            var magnetUri = new Uri(_MagnetUri.Replace(KeyInfoHash, item.InfoHash));

            return(new ReleaseInfo
            {
                Title = item.Name,
                Category = MapTrackerCatToNewznab(item.Category.ToString()),
                Comments = item.Id == 0
                    ? null
                    : new Uri($"{SiteLink}description.php?id={item.Id}"),
                MagnetUri = magnetUri,
                InfoHash = item.InfoHash,
                PublishDate = DateTimeUtil.UnixTimestampToDateTime(item.Added),
                Guid = magnetUri,
                Seeders = item.Seeders,
                Peers = item.Seeders + item.Leechers,
                Size = item.Size,
                Files = item.NumFiles,
                DownloadVolumeFactor = 0,
                UploadVolumeFactor = 1,
                Imdb = string.IsNullOrEmpty(item.Imdb)
                    ? null
                    : ParseUtil.GetImdbID(item.Imdb)
            });
        }
Exemple #2
0
        List <QueryResponseItem> ParseQueryResponse(string seperatorTag, string resp, string[] fields)
        {
            List <QueryResponseItem> result = new List <QueryResponseItem>();

            int pos = resp.IndexOf(seperatorTag + "%3A");

            try {
                QueryResponseItem respItm = null;
                while (pos >= 0 && pos < resp.Length)
                {
                    int pos2 = resp.IndexOf("%3A", pos);
                    if (pos2 < 0)
                    {
                        break;
                    }

                    string tagName = resp.Substring(pos, pos2 - pos);
                    pos  = pos2 + 3;
                    pos2 = resp.IndexOf(" ", pos);
                    if (pos2 < 0)
                    {
                        pos2 = resp.Length;
                    }

                    string fieldValue = resp.Substring(pos, pos2 - pos);
                    if (tagName.Equals(seperatorTag))
                    {
                        respItm = new QueryResponseItem(fields.Length);
                        result.Add(respItm);
                    }

                    int fieldIdx = Array.IndexOf(fields, tagName);
                    if (fieldIdx >= 0)
                    {
                        respItm.Values[fieldIdx] = Util.UriDecode(fieldValue);
                    }

                    pos = pos2 + 1;
                }
            } catch (Exception ex) {
                Console.WriteLine("SqueezeCenter: Error parsing response:\n" + ex.ToString());
            }
            return(result);
        }
Exemple #3
0
        private ReleaseInfo CreateReleaseInfo(QueryResponseItem item)
        {
            var details = item.Id == 0 ? null : new Uri($"{SiteLink}description.php?id={item.Id}");
            var imdbId  = string.IsNullOrEmpty(item.Imdb) ? null : ParseUtil.GetImdbID(item.Imdb);

            return(new ReleaseInfo
            {
                Title = item.Name,
                Category = MapTrackerCatToNewznab(item.Category.ToString()),
                Guid = details,
                Details = details,
                InfoHash = item.InfoHash, // magnet link is auto generated from infohash
                PublishDate = DateTimeUtil.UnixTimestampToDateTime(item.Added),
                Seeders = item.Seeders,
                Peers = item.Seeders + item.Leechers,
                Size = item.Size,
                Files = item.NumFiles,
                DownloadVolumeFactor = 0,
                UploadVolumeFactor = 1,
                Imdb = imdbId
            });
        }
Exemple #4
0
        List<QueryResponseItem> ParseQueryResponse(string seperatorTag, string resp, string[] fields)
        {
            List<QueryResponseItem> result = new List<QueryResponseItem>();

            int pos = resp.IndexOf (seperatorTag + "%3A");

            try {
                QueryResponseItem respItm = null;
                while (pos >= 0 && pos < resp.Length) {
                    int pos2 = resp.IndexOf ("%3A", pos);
                    if (pos2 < 0)
                        break;

                    string tagName = resp.Substring (pos, pos2 - pos);
                    pos = pos2 + 3;
                    pos2 = resp.IndexOf (" ", pos);
                    if (pos2 < 0)
                        pos2 = resp.Length;

                    string fieldValue = resp.Substring (pos, pos2-pos);
                    if (tagName.Equals (seperatorTag)) {
                        respItm = new QueryResponseItem (fields.Length);
                        result.Add (respItm);
                    }

                    int fieldIdx = Array.IndexOf (fields, tagName);
                    if (fieldIdx >= 0)
                        respItm.Values[fieldIdx] = Util.UriDecode (fieldValue);

                    pos = pos2 + 1;
                }
            } catch(Exception ex) {
                Console.WriteLine ("SqueezeCenter: Error parsing response:\n" + ex.ToString ());
            }
            return result;
        }
Exemple #5
0
        public FilteredTransactionsResponseModel GetFilteredTransactions(RequestFilteredListModel model)
        {
            var res = new FilteredTransactionsResponseModel();

            using (var client = GetClientByModel(model))
            {
                var args = new API.FilteredTransactionsListGet_args();
                args.GeneralQuery         = new TransactionsQuery();
                args.GeneralQuery.Flag    = Convert.ToInt16((model.Flagg == "in") ? 1 : (model.Flagg == "out" ? 2 : 3));
                args.GeneralQuery.Queries = new List <SingleQuery>();
                foreach (var qry in model.Queries)
                {
                    //var nq = new SingleQuery();
                    var sq = new SingleQuery();
                    sq.FromId           = BCTransactionTools.GetTransactionIdByStr(qry.FromId == null ? "0.0" : qry.FromId);
                    sq.RequestedAddress = SimpleBase.Base58.Bitcoin.Decode(qry.Address).ToArray();
                    if (qry.TokenQueries != null)
                    {
                        sq.TokensList = new List <SingleTokenQuery>();
                        foreach (var tokenReq in qry.TokenQueries)
                        {
                            var sqt = new SingleTokenQuery();
                            sqt.FromId       = BCTransactionTools.GetTransactionIdByStr(tokenReq.FromId);
                            sqt.TokenAddress = SimpleBase.Base58.Bitcoin.Decode(tokenReq.TokenAddress).ToArray();
                            sq.TokensList.Add(sqt);
                        }
                    }
                    args.GeneralQuery.Queries.Add(sq);
                }

                var qResult = client.FilteredTransactionsListGet(args.GeneralQuery);
                if (model.Queries.Count() < qResult.QueryResponse.Count)
                {
                    throw new Exception("Query and response lists are not syncronized");
                }

                foreach (var qRep in qResult.QueryResponse)
                {
                    var qRes = new QueryResponseItem();
                    qRes.QueryAddress = SimpleBase.Base58.Bitcoin.Encode(qRep.RequestedAddress);
                    foreach (var tr in qRep.Transactions)
                    {
                        var newTr = new ShortTransactionInfo();
                        newTr.Amount   = BCTransactionTools.GetDecimalByAmount(tr.Amount);
                        newTr.Currency = Convert.ToUInt16(tr.Currency);
                        var feeStr = Utils.ConvertCommission(tr.Fee.Commission).Replace(",", ".");

                        var style = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
                        newTr.Fee = Decimal.Parse(feeStr, style, CultureInfo.InvariantCulture);

                        if (model.Flagg == "in")
                        {
                            newTr.Source = SimpleBase.Base58.Bitcoin.Encode(tr.Source);
                        }
                        else if (model.Flagg == "out")
                        {
                            newTr.Target = SimpleBase.Base58.Bitcoin.Encode(tr.Target);
                        }
                        else
                        {
                            newTr.Source = SimpleBase.Base58.Bitcoin.Encode(tr.Source);
                            newTr.Target = SimpleBase.Base58.Bitcoin.Encode(tr.Target);
                        }
                        newTr.TimeCreation  = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddSeconds(tr.TimeCreation / 1000);
                        newTr.TransactionId = Convert.ToString(tr.Id.PoolSeq) + "." + Convert.ToString(tr.Id.Index);
                        newTr.Type          = Convert.ToByte(tr.Type);
                        newTr.UserData      = SimpleBase.Base58.Bitcoin.Encode(tr.UserFields);
                        qRes.Transactions.Add(newTr);
                    }
                    if (qRep.TransfersList != null)
                    {
                        foreach (var tokenResp in qRep.TransfersList)
                        {
                            var SingleTokenResponse = new QueryTokenResponseItem();
                            SingleTokenResponse.TokenAddress = SimpleBase.Base58.Bitcoin.Encode(tokenResp.TokenAddress);
                            SingleTokenResponse.TokenName    = tokenResp.TokenName;
                            SingleTokenResponse.TokenTiker   = tokenResp.TokenTiker;
                            if (tokenResp.Transfers != null)
                            {
                                foreach (var singleTokenTransfer in tokenResp.Transfers)
                                {
                                    var singleTokenTransferResult = new TokenTransferInfo();
                                    singleTokenTransferResult.TokenAddress      = SimpleBase.Base58.Bitcoin.Encode(singleTokenTransfer.Token);
                                    singleTokenTransferResult.Sender            = SimpleBase.Base58.Bitcoin.Encode(singleTokenTransfer.Sender);
                                    singleTokenTransferResult.Receiver          = SimpleBase.Base58.Bitcoin.Encode(singleTokenTransfer.Receiver);
                                    singleTokenTransferResult.TransferInitiator = SimpleBase.Base58.Bitcoin.Encode(singleTokenTransfer.Initiator);
                                    singleTokenTransferResult.TokenCode         = singleTokenTransfer.Code;
                                    singleTokenTransferResult.TokenAmount       = Convert.ToDecimal(singleTokenTransfer.Amount, CultureInfo.InvariantCulture);
                                    singleTokenTransferResult.TransactionID     = Convert.ToString(singleTokenTransfer.Transaction.PoolSeq) + "." + Convert.ToString(singleTokenTransfer.Transaction.Index);
                                    singleTokenTransferResult.TimeCreation      = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddSeconds(singleTokenTransfer.Time / 1000);
                                    singleTokenTransferResult.UserData          = SimpleBase.Base58.Bitcoin.Encode(singleTokenTransfer.UserFields);
                                    if (singleTokenTransfer.Fee != null)
                                    {
                                        singleTokenTransferResult.Fee = Convert.ToDecimal(Utils.FeeByIndex(singleTokenTransfer.Fee.Commission), CultureInfo.InvariantCulture);
                                    }
                                    if (singleTokenTransfer.ExtraFee != null)
                                    {
                                        foreach (var it in singleTokenTransfer.ExtraFee)
                                        {
                                            var item = new EFeeItem();
                                            item.Fee     = Convert.ToDecimal(FormatAmount(it.Sum), CultureInfo.InvariantCulture);
                                            item.Comment = it.Comment;
                                            singleTokenTransferResult.ExtraFee.Add(item);
                                        }
                                    }
                                    SingleTokenResponse.Transfers.Add(singleTokenTransferResult);
                                }
                                qRes.TransfersList.Add(SingleTokenResponse);
                            }
                        }
                    }

                    res.QuerieResponses.Add(qRes);
                }
            }
            return(res);
        }