Ejemplo n.º 1
0
        public static TorrentVideoFileInfo Parse(string torrentFileName)
        {
            var dto = new TorrentVideoFileInfo();

            foreach (var pattern in TorrentVideoFileNamingPattern.Patterns)
            {
                torrentFileName = torrentFileName.ParsePatterns(dto, pattern.Key, pattern.Value);
            }
            dto.Title = torrentFileName.ParseTitle();
            return(dto);
        }
Ejemplo n.º 2
0
        private static string ParsePatterns(this string torrentFileName, TorrentVideoFileInfo dto, Expression <Func <TorrentVideoFileInfo, object> > property,
                                            string pattern)
        {
            var result = Regex.Match(torrentFileName, pattern);

            if (result.Success)
            {
                var match = result.Groups.Count > 1 ? result.Groups[2].Value : result.Groups[0].Value;
                var raw   = result.Groups.Count > 1 ? result.Groups[1].Value : result.Groups[0].Value;

                if (TryAssignValue(dto, property, match))
                {
                    torrentFileName = string.Join("", torrentFileName.Split(new[] { raw }, StringSplitOptions.RemoveEmptyEntries));
                }
            }
            return(torrentFileName);
        }
Ejemplo n.º 3
0
        public static bool TryAssignValue(TorrentVideoFileInfo dto, Expression <Func <TorrentVideoFileInfo, object> > property, string match)
        {
            var key = (property.Body is MemberExpression)
                                ? (property.Body as MemberExpression).Member.Name
                                : ((property.Body as UnaryExpression).Operand as MemberExpression).Member.Name;

            var dtoExpression      = Expression.Constant(dto);
            var propertyExpression = Expression.PropertyOrField(dtoExpression, key);

            if (!TryGetConvertExpression(match, propertyExpression.Type))
            {
                return(false);
            }
            var matchExpression    = Expression.Constant(match);
            var convertExpression  = GetConvertExpression(matchExpression, propertyExpression.Type);
            var assignExpression   = Expression.Assign(propertyExpression, convertExpression);
            var lambda             = Expression.Lambda(assignExpression);
            var compiledExpression = lambda.Compile();

            compiledExpression.DynamicInvoke();
            return(true);
        }