Beispiel #1
0
        public DateTime?GetBookmark(string sourcePath)
        {
            var doc = LoadBookmarks(m_destinationPath);

            XElement bookmark =
                (from el in doc.Element(c_bookmarksEle).Elements(c_itemEle)
                 where el.Element(c_srcPathEle).Value.Equals(sourcePath, StringComparison.OrdinalIgnoreCase)
                 select el).FirstOrDefault();

            if (bookmark == null)
            {
                return(null);
            }

            DateTag dt;

            if (!DateTag.TryParse(bookmark.Element(c_newestEle).Value, out dt))
            {
                return(null);
            }
            dt.ResolveTimeZone(TimeZoneInfo.Local);
            return(dt.Date);
        }
Beispiel #2
0
        /// <summary>
        /// Recursively evaluates the template nodes returned from the bot
        /// </summary>
        /// <param name="node">the node to evaluate</param>
        /// <param name="request">the request from the user</param>
        /// <param name="result">the result to be sent to the user</param>
        /// <param name="user">the user who originated the request</param>
        /// <returns>the output string</returns>
        private string ProcessNode(XmlNode node, Request request, Result result, User user)
        {
            StringBuilder newInnerText = new StringBuilder();

            if (node.HasChildNodes)
            {
                // recursively check
                foreach (XmlNode childNode in node.ChildNodes)
                {
                    childNode.InnerText = this.ProcessNode(childNode, request, result, user);
                }
            }

            // process the node itself
            AIMLTagHandler tagHandler = null;

            switch (node.Name.ToLower())
            {
            case "bot":
                tagHandler = new BotTag(this, user, request, result, node);
                break;

            case "condition":
                tagHandler = new ConditionTag(this, user, request, result, node);
                break;

            case "date":
                tagHandler = new DateTag(this, user, request, result, node);
                break;

            case "formal":
                tagHandler = new FormalTag(this, user, request, result, node);
                break;

            case "gender":
                tagHandler = new GenderTag(this, user, request, result, node);
                break;

            case "get":
                tagHandler = new GetTag(this, user, request, result, node);
                break;

            case "gossip":
                tagHandler = new GossipTag(this, user, request, result, node);
                break;

            case "id":
                tagHandler = new IdTag(this, user, request, result, node);
                break;

            case "input":
                tagHandler = new InputTag(this, user, request, result, node);
                break;

            case "javascript":
                tagHandler = new JavascriptTag(this, user, request, result, node);
                break;

            case "learn":
                tagHandler = new LearnTag(this, user, request, result, node);
                break;

            case "lowercase":
                tagHandler = new LowercaseTag(this, user, request, result, node);
                break;

            case "person":
                tagHandler = new PersonTag(this, user, request, result, node);
                break;

            case "person2":
                tagHandler = new Person2Tag(this, user, request, result, node);
                break;

            case "random":
                tagHandler = new RandomTag(this, user, request, result, node);
                break;

            case "sentence":
                tagHandler = new SentenceTag(this, user, request, result, node);
                break;

            case "set":
                tagHandler = new SetTag(this, user, request, result, node);
                break;

            case "size":
                tagHandler = new SizeTag(this, user, request, result, node);
                break;

            case "sr":
                tagHandler = new SrTag(this, user, request, result, node);
                break;

            case "srai":
                tagHandler = new SraiTag(this, user, request, result, node);
                break;

            case "star":
                tagHandler = new StarTag(this, user, request, result, node);
                break;

            case "system":
                tagHandler = new SystemTag(this, user, request, result, node);
                break;

            case "that":
                tagHandler = new ThatTag(this, user, request, result, node);
                break;

            case "thatstar":
                tagHandler = new ThatStarTag(this, user, request, result, node);
                break;

            case "think":
                tagHandler = new ThinkTag(this, user, request, result, node);
                break;

            case "topicstar":
                tagHandler = new TopicStarTag(this, user, request, result, node);
                break;

            case "uppercase":
                tagHandler = new UppercaseTag(this, user, request, result, node);
                break;

            case "version":
                tagHandler = new VersionTag(this, user, request, result, node);
                break;

            default:
                tagHandler = this.GetBespokeTags(user, request, result, node);
                break;
            }
            if (object.Equals(null, tagHandler))
            {
                return(node.InnerText);
            }
            else
            {
                return(tagHandler.Transform());
            }
        }
Beispiel #3
0
        protected virtual void LoadMetadata()
        {
            if (m_uri == null)
            {
                return;
            }

            try
            {
                using (var ps = WinShell.PropertyStore.Open(m_uri.LocalPath, false))
                {
                    // See if timezone and precision info are included
                    int         precision = 0;
                    TimeZoneTag tz        = null;
                    foreach (var pair in MetaTag.Extract(ps.GetValue(s_pkComment) as string))
                    {
                        if (pair.Key.Equals("datePrecision", StringComparison.OrdinalIgnoreCase))
                        {
                            if (!int.TryParse(pair.Value, out precision))
                            {
                                precision = 0;
                            }
                        }

                        if (pair.Key.Equals("timezone", StringComparison.OrdinalIgnoreCase))
                        {
                            if (!TimeZoneTag.TryParse(pair.Value, out tz))
                            {
                                tz = null;
                            }
                        }
                    }

                    // Get the date the photo or video was taken.
                    {
                        object date = ps.GetValue(s_pkDateTaken);
                        if (date == null)
                        {
                            date = ps.GetValue(s_pkDateEncoded);
                        }
                        if (date != null && date is DateTime)
                        {
                            var dt = new DateTag((DateTime)date, tz, precision);
                            dt = dt.ResolveTimeZone(TimeZoneInfo.Local);
                            var ci = CultureInfo.CurrentCulture;

                            // Use my preferred format if US English
                            string format = ci.Name.Equals(c_usCultureName, StringComparison.Ordinal)
                                ? c_usOverrideDateFormat
                                : ci.DateTimeFormat.FullDateTimePattern;

                            m_dateTaken = dt.ToString(format, ci);
                        }
                    }

                    var tags = new List <string>();

                    // Get title
                    string title = ps.GetValue(s_pkTitle) as string;
                    if (!string.IsNullOrEmpty(title))
                    {
                        tags.Add(title);
                    }

                    // Get keywords
                    var keywords = ps.GetValue(s_pkKeywords) as IEnumerable <string>;
                    if (keywords != null)
                    {
                        tags.AddRange(keywords);
                    }

                    if (tags.Count > 0)
                    {
                        Tags = tags;
                    }
                }
            }
            catch (Exception err)
            {
                Debug.WriteLine(err.ToString());
            }
        }