/// <summary>
        /// Processes a raw directory listing, and stores values into objects.
        /// </summary>
        /// <param name="directory_list">Directory list.</param>
        /// <param name="extension">File extension of associated screenshots.</param>
        /// <returns>Item objects.</returns>
        private Items processFileData(List<String> directory_list, String extension)
        {
            Items items = new Items();

            try
            {
                foreach (String line_detail in directory_list)
                {
                    Item item;
                    String filename;
                    String id;
                    DateTime modified;
                    int filesize;

                    filename = readFilename(line_detail);

                    if (filename.Contains(extension))
                    {
                        id = readId(filename);
                        modified = readModified(line_detail);
                        filesize = readFilesize(line_detail);

                        item = items.GetFileDetail(id, modified);

                        if (filename.Contains(retina_marker))
                        {
                            item.SizeRetina = filesize;
                        }
                        else
                        {
                            item.SizeNormal = filesize;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.ToString());
            }
            return items;
        }
        /// <summary>
        /// Analyzes an item collection, identifying which items to update.
        /// </summary>
        /// <param name="items">List of items.</param>
        /// <returns>List of item which require updating.</returns>
        private Items identifyUpdates(Items items)
        {
            Items items_to_update = new Items();

            try
            {
                foreach (Item item in items)
                {
                    Console.WriteLine(item.Id + " " + item.requiresUpdate(last_updated));

                    if (item.requiresUpdate(last_updated))
                    {
                        items_to_update.Add(item);
                    }
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.ToString());
            }
            return items_to_update;
        }
        /// <summary>
        /// Captures screenshots of websites, resizes and uploads to the server.
        /// </summary>
        /// <param name="items_to_update">List of items to capture, resize and upload.</param>
        private void captureAndUpload(Items items_to_update)
        {
            // Capture screenshots
            foreach (Item item in items_to_update)
            {
                if (item.Data != null)
                {
                    captureWebsite(item);
                }
            }

            // Resize screenshots, then upload
            foreach (Item item in items_to_update)
            {
                if (item.Updated)
                {
                    resizeThenUploadImages(item);
                }
            }
        }