示例#1
0
        public bool Upload(ICaptureDetails captureDetails, Image image)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                BackgroundForm backgroundForm = BackgroundForm.ShowAndWait(Attributes.Name, lang.GetString(LangKey.communication_wait));

                host.SaveToStream(image, stream, config.UploadFormat, config.UploadJpegQuality);
                byte[] buffer = stream.GetBuffer();

                try
                {
                    string     filename    = Path.GetFileName(host.GetFilename(config.UploadFormat, captureDetails));
                    string     contentType = "image/" + config.UploadFormat.ToString();
                    PicasaInfo picasaInfo  = PicasaUtils.UploadToPicasa(buffer, captureDetails.DateTime.ToString(), filename, contentType);
                    if (config.PicasaUploadHistory == null)
                    {
                        config.PicasaUploadHistory = new Dictionary <string, string>();
                    }

                    if (picasaInfo.ID != null)
                    {
                        LOG.InfoFormat("Storing Picasa upload for id {0}", picasaInfo.ID);

                        config.PicasaUploadHistory.Add(picasaInfo.ID, picasaInfo.ID);
                        config.runtimePicasaHistory.Add(picasaInfo.ID, picasaInfo);
                    }

                    picasaInfo.Image = PicasaUtils.CreateThumbnail(image, 90, 90);
                    // Make sure the configuration is save, so we don't lose the deleteHash
                    IniConfig.Save();
                    // Make sure the history is loaded, will be done only once
                    PicasaUtils.LoadHistory();

                    // Show
                    if (config.AfterUploadOpenHistory)
                    {
                        PicasaHistory.ShowHistory();
                    }

                    if (config.AfterUploadLinkToClipBoard)
                    {
                        Clipboard.SetText(picasaInfo.LinkUrl(config.PictureDisplaySize));
                    }
                    return(true);
                }
                catch (Google.GData.Client.InvalidCredentialsException eLo)
                {
                    MessageBox.Show(lang.GetString(LangKey.InvalidCredentials));
                }
                catch (Exception e)
                {
                    MessageBox.Show(lang.GetString(LangKey.upload_failure) + " " + e.ToString());
                }
                finally
                {
                    backgroundForm.CloseDialog();
                }
            }
            return(false);
        }
        public static void LoadHistory()
        {
            if (config.runtimePicasaHistory == null)
            {
                return;
            }
            if (config.PicasaUploadHistory == null)
            {
                return;
            }

            if (config.runtimePicasaHistory.Count == config.PicasaUploadHistory.Count)
            {
                return;
            }
            // Load the Picasa history
            List <string> hashes = new List <string>();

            foreach (string hash in config.PicasaUploadHistory.Keys)
            {
                hashes.Add(hash);
            }

            bool saveNeeded = false;

            foreach (string hash in hashes)
            {
                if (config.runtimePicasaHistory.ContainsKey(hash))
                {
                    // Already loaded
                    continue;
                }
                try {
                    PicasaInfo imgurInfo = PicasaUtils.RetrievePicasaInfo(hash);
                    if (imgurInfo != null)
                    {
                        PicasaUtils.RetrievePicasaThumbnail(imgurInfo);
                        config.runtimePicasaHistory.Add(hash, imgurInfo);
                    }
                    else
                    {
                        LOG.DebugFormat("Deleting not found Picasa {0} from config.", hash);
                        config.PicasaUploadHistory.Remove(hash);
                        saveNeeded = true;
                    }
                } catch (Exception e) {
                    LOG.Error("Problem loading Picasa history for hash " + hash, e);
                }
            }
            if (saveNeeded)
            {
                // Save needed changes
                IniConfig.Save();
            }
        }
        public static void RetrievePicasaThumbnail(PicasaInfo imgurInfo)
        {
            LOG.InfoFormat("Retrieving Picasa image for {0} with url {1}", imgurInfo.ID, imgurInfo);
            HttpWebRequest webRequest = (HttpWebRequest)NetworkHelper.CreatedWebRequest(imgurInfo.SquareThumbnailUrl);

            webRequest.Method = "GET";
            webRequest.ServicePoint.Expect100Continue = false;

            using (WebResponse response = webRequest.GetResponse()) {
                Stream responseStream = response.GetResponseStream();
                imgurInfo.Image = Image.FromStream(responseStream);
            }
            return;
        }
        public static void DeletePicasaImage(PicasaInfo picasaInfo)
        {
            // Make sure we remove it from the history, if no error occured
            config.runtimePicasaHistory.Remove(picasaInfo.ID);
            config.PicasaUploadHistory.Remove(picasaInfo.ID);

            PicasaEntry picasaEntry = RetrievePicasaEntry(picasaInfo.ID);

            if (picasaEntry != null)
            {
                picasaEntry.Delete();
            }

            picasaInfo.Image = null;
        }
        public static PicasaInfo RetrievePicasaInfo(PicasaEntry picasaEntry)
        {
            PhotoAccessor photoAccessor = new PhotoAccessor(picasaEntry);

            LOG.InfoFormat("Retrieving Picasa info for {0}", photoAccessor.Id);

            PicasaInfo picasaInfo = new PicasaInfo();

            picasaInfo.ID                 = photoAccessor.Id;
            picasaInfo.Title              = picasaEntry.Title.Text;
            picasaInfo.Timestamp          = picasaEntry.Updated;
            picasaInfo.Description        = picasaEntry.Summary.Text;
            picasaInfo.SquareThumbnailUrl = picasaEntry.Media.Thumbnails[0].Url;
            picasaInfo.OriginalUrl        = picasaEntry.Media.Content.Url;

            List <AtomLink> links = picasaEntry.Links.Where(r => r.Type.Equals("text/html", StringComparison.OrdinalIgnoreCase)).ToList();

            picasaInfo.WebUrl = string.Empty;
            if (links.Count > 0)
            {
                picasaInfo.WebUrl = links.First().HRef.ToString();
            }
            return(picasaInfo);
        }
        public static void DeletePicasaImage(PicasaInfo picasaInfo)
        {
            // Make sure we remove it from the history, if no error occured
            config.runtimePicasaHistory.Remove(picasaInfo.ID);
            config.PicasaUploadHistory.Remove(picasaInfo.ID);

            PicasaEntry picasaEntry = RetrievePicasaEntry(picasaInfo.ID);
            if (picasaEntry != null)
            {
                picasaEntry.Delete();
            }

            picasaInfo.Image = null;
        }
        public static void RetrievePicasaThumbnail(PicasaInfo imgurInfo)
        {
            LOG.InfoFormat("Retrieving Picasa image for {0} with url {1}", imgurInfo.ID, imgurInfo);
            HttpWebRequest webRequest = (HttpWebRequest)NetworkHelper.CreatedWebRequest(imgurInfo.SquareThumbnailUrl);
            webRequest.Method = "GET";
            webRequest.ServicePoint.Expect100Continue = false;

            using (WebResponse response = webRequest.GetResponse()) {
                Stream responseStream = response.GetResponseStream();
                imgurInfo.Image = Image.FromStream(responseStream);
            }
            return;
        }
        public static PicasaInfo RetrievePicasaInfo(PicasaEntry picasaEntry)
        {
            PhotoAccessor photoAccessor = new PhotoAccessor(picasaEntry);

            LOG.InfoFormat("Retrieving Picasa info for {0}", photoAccessor.Id);

            PicasaInfo picasaInfo = new PicasaInfo();

            picasaInfo.ID = photoAccessor.Id;
            picasaInfo.Title = picasaEntry.Title.Text;
            picasaInfo.Timestamp = picasaEntry.Updated;
            picasaInfo.Description = picasaEntry.Summary.Text;
            picasaInfo.SquareThumbnailUrl = picasaEntry.Media.Thumbnails[0].Url;
            picasaInfo.OriginalUrl = picasaEntry.Media.Content.Url;

            List<AtomLink> links = picasaEntry.Links.Where(r => r.Type.Equals("text/html", StringComparison.OrdinalIgnoreCase)).ToList();
            picasaInfo.WebUrl = string.Empty;
            if (links.Count > 0)
            {
                picasaInfo.WebUrl = links.First().HRef.ToString();
            }
            return picasaInfo;
        }