Пример #1
0
 private void HandleProgressChanged(ProgressItem item)
 {
     //System.Console.WriteLine ("Changed value = {0}", item.Value);
     progress_dialog.Fraction = (photo_index - 1.0 + item.Value) / (double) selection.Count;
 }
Пример #2
0
        private void Upload()
        {
            progress_item = new ProgressItem ();
            progress_item.Changed += HandleProgressChanged;
            fr.Connection.OnUploadProgress += HandleFlickrProgress;

            System.Collections.ArrayList ids = new System.Collections.ArrayList ();
            IBrowsableItem [] photos = selection.Items;
            Array.Sort (photos, new DateComparer ());

            for (int index = 0; index < photos.Length; index++) {
                try {
                    IBrowsableItem photo = photos [index];
                    progress_dialog.Message = System.String.Format (
                                                Catalog.GetString ("Uploading picture \"{0}\""), photo.Name);

                    progress_dialog.Fraction = photo_index / (double)selection.Count;
                    photo_index++;
                    progress_dialog.ProgressText = System.String.Format (
                        Catalog.GetString ("{0} of {1}"), photo_index,
                        selection.Count);

                    info = new FileInfo (photo.DefaultVersionUri.LocalPath);
                    FilterSet stack = new FilterSet ();
                    if (scale)
                        stack.Add (new ResizeFilter ((uint)size));

                    string id = fr.Upload (photo, stack, is_public, is_family, is_friend);
                    ids.Add (id);

                    if (App.Instance.Database != null && photo is FSpot.Photo)
                        App.Instance.Database.Exports.Create ((photo as FSpot.Photo).Id,
                                          (photo as FSpot.Photo).DefaultVersionId,
                                          ExportStore.FlickrExportType,
                                          auth.User.UserId + ":" + auth.User.Username + ":" + current_service.Name + ":" + id);

                } catch (System.Exception e) {
                    progress_dialog.Message = String.Format (Catalog.GetString ("Error Uploading To {0}: {1}"),
                                         current_service.Name,
                                         e.Message);
                    progress_dialog.ProgressText = Catalog.GetString ("Error");
                    System.Console.WriteLine (e);

                    if (progress_dialog.PerformRetrySkip ()) {
                        index--;
                        photo_index--;
                    }
                }
            }
            progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
            progress_dialog.Fraction = 1.0;
            progress_dialog.ProgressText = Catalog.GetString ("Upload Complete");
            progress_dialog.ButtonLabel = Gtk.Stock.Ok;

            if (open && ids.Count != 0) {
                string view_url;
                if (current_service.Name == "Zooomr.com")
                    view_url = string.Format ("http://www.{0}/photos/{1}/", current_service.Name, auth.User.Username);
                else {
                    view_url = string.Format ("http://www.{0}/tools/uploader_edit.gne?ids", current_service.Name);
                    bool first = true;

                    foreach (string id in ids) {
                        view_url = view_url + (first ? "=" : ",") + id;
                        first = false;
                    }
                }

                GtkBeans.Global.ShowUri (Dialog.Screen, view_url);
            }
        }
Пример #3
0
	public HttpWebResponse Submit (Uri uri, FSpot.ProgressItem progress_item) 
	{
		this.Progress = progress_item;
		Request = (HttpWebRequest) WebRequest.Create (uri);
		CookieCollection cookie_collection = Cookies.GetCookies (uri);

		if (uri.UserInfo != null && uri.UserInfo != String.Empty) {
			NetworkCredential cred = new NetworkCredential ();
			cred.GetCredential (uri, "basic");
			CredentialCache credcache = new CredentialCache();
			credcache.Add(uri, "basic", cred);
			
			Request.PreAuthenticate = true;
			Request.Credentials = credcache;	
		}

		Request.ServicePoint.Expect100Continue = expect_continue;

		Request.CookieContainer = new CookieContainer ();
		foreach (Cookie c in cookie_collection) {
			if (SuppressCookiePath) 
				Request.CookieContainer.Add (new Cookie (c.Name, c.Value));
			else
				Request.CookieContainer.Add (c);
		}

		Request.Method = "POST";
		Request.Headers["Accept-Charset"] = "utf-8;";
		
		//Request.UserAgent = "F-Spot Gallery Remote Client";
		Request.UserAgent = "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7) Gecko/20040626 Firefox/0.9.1";

		Request.Proxy = WebProxy.GetDefaultProxy ();

		if (multipart) {
			GenerateBoundary ();
			Request.ContentType = "multipart/form-data; boundary=" + boundary;
			Request.Timeout = Request.Timeout * 3;

			long length = 0;
			for (int i = 0; i < Items.Count; i++) {
				FormItem item = (FormItem)Items[i];
				
				length += MultipartLength (item);
			}
			length += end_boundary.Length + 2;
			
			//Request.Headers["My-Content-Length"] = length.ToString ();
			if (Buffer == false) {
				Request.ContentLength = length;	
				Request.AllowWriteStreamBuffering = false;
			}
		} else {
			Request.ContentType = "application/x-www-form-urlencoded";
		}
		
		stream_writer = new StreamWriter (Request.GetRequestStream ());
		
		first_item = true;
		for (int i = 0; i < Items.Count; i++) {
			FormItem item = (FormItem)Items[i];
			
			Write (item);
		}
		
		if (multipart)
			stream_writer.Write (end_boundary + "\r\n");
		
		stream_writer.Flush ();
		stream_writer.Close ();

		HttpWebResponse response; 

		try {
			response = (HttpWebResponse) Request.GetResponse ();
			
			//Console.WriteLine ("found {0} cookies", response.Cookies.Count);
			
			foreach (Cookie c in response.Cookies) {
				Cookies.Add (c);
			}
		} catch (WebException e) {
			if (e.Status == WebExceptionStatus.ProtocolError 
			    && ((HttpWebResponse)e.Response).StatusCode == HttpStatusCode.ExpectationFailed && expect_continue) {
				e.Response.Close ();
				expect_continue = false;
				return Submit (uri, progress_item);
			}
			
			throw new WebException (Mono.Unix.Catalog.GetString ("Unhandled exception"), e);
		}

		return response;
	}