f-spot r3640 - in trunk: . SmugMugNet extensions extensions/DefaultExporters extensions/FlickrExport extensions/FlickrExport/FlickrNet extensions/SmugMugExport extensions/SmugMugExport/SmugMugNet src
- From: sdelcroix svn gnome org
- To: svn-commits-list gnome org
- Subject: f-spot r3640 - in trunk: . SmugMugNet extensions extensions/DefaultExporters extensions/FlickrExport extensions/FlickrExport/FlickrNet extensions/SmugMugExport extensions/SmugMugExport/SmugMugNet src
- Date: Fri, 8 Feb 2008 14:42:33 +0000 (GMT)
Author: sdelcroix
Date: Fri Feb 8 14:42:33 2008
New Revision: 3640
URL: http://svn.gnome.org/viewvc/f-spot?rev=3640&view=rev
Log:
2008-02-08 Lorenzo Milesi <maxxer yetopen it>
* SmugMugNet/*:
* src/SmugMugExport.cs:
* src/f-spot.glade:
* configure.in:
* Makefile.include:
* Makefile.am: remove SmugMug export from the codebase
Added:
trunk/extensions/SmugMugExport/
trunk/extensions/SmugMugExport/Makefile.am
trunk/extensions/SmugMugExport/SmugMugExport.addin.xml
trunk/extensions/SmugMugExport/SmugMugExport.cs
trunk/extensions/SmugMugExport/SmugMugExport.glade
trunk/extensions/SmugMugExport/SmugMugNet/
trunk/extensions/SmugMugExport/SmugMugNet/Makefile
trunk/extensions/SmugMugExport/SmugMugNet/Makefile.am
trunk/extensions/SmugMugExport/SmugMugNet/NoCheckCertificatePolicy.cs
trunk/extensions/SmugMugExport/SmugMugNet/SmugMugApi.cs
Removed:
trunk/SmugMugNet/
trunk/src/SmugMugExport.cs
Modified:
trunk/ChangeLog
trunk/Makefile.am
trunk/Makefile.include
trunk/configure.in
trunk/extensions/ChangeLog
trunk/extensions/DefaultExporters/DefaultExporters.addin.xml
trunk/extensions/FlickrExport/FlickrNet/Makefile.in
trunk/extensions/FlickrExport/Makefile.in
trunk/extensions/Makefile.am
trunk/src/Makefile.am
trunk/src/f-spot.glade
Modified: trunk/Makefile.am
==============================================================================
--- trunk/Makefile.am (original)
+++ trunk/Makefile.am Fri Feb 8 14:42:33 2008
@@ -2,7 +2,6 @@
$(DIR_DBUS) \
$(DIR_DBUS_GLIB)\
docs \
- SmugMugNet \
glitz-sharp \
google-sharp \
gnome-keyring-sharp \
@@ -23,7 +22,6 @@
dbus-sharp \
dbus-sharp-glib \
docs \
- SmugMugNet \
glitz-sharp \
google-sharp \
gnome-keyring-sharp \
Modified: trunk/Makefile.include
==============================================================================
--- trunk/Makefile.include (original)
+++ trunk/Makefile.include Fri Feb 8 14:42:33 2008
@@ -17,7 +17,6 @@
DIR_LIBEOG = $(top_builddir)/libeog
DIR_LIBFSPOT = $(top_builddir)/libfspot
DIR_SEMWEB = $(top_builddir)/semweb
-DIR_SMUGMUG = $(top_builddir)/SmugMugNet
DIR_SRC = $(top_builddir)/src
DIR_TAO_OPENGL = $(top_builddir)/Tao/Tao.OpenGl
DIR_TAO_GLU = $(top_builddir)/Tao/Tao.OpenGl.Glu
@@ -35,7 +34,6 @@
-r:$(DIR_ADDINS_SETUP)/Mono.Addins.Setup.dll \
-r:$(DIR_ADDINS_GUI)/Mono.Addins.Gui.dll
LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_SMUGMUG = -r:$(DIR_SMUGMUG)/SmugMugNet.dll
LINK_TAO = \
-r:$(DIR_TAO_OPENGL)/Tao.OpenGl.dll \
-r:$(DIR_TAO_GLU)/Tao.OpenGl.Glu.dll \
Modified: trunk/configure.in
==============================================================================
--- trunk/configure.in (original)
+++ trunk/configure.in Fri Feb 8 14:42:33 2008
@@ -265,7 +265,6 @@
dbus-sharp/Makefile
dbus-sharp-glib/Makefile
docs/Makefile
-SmugMugNet/Makefile
google-sharp/Makefile
gnome-keyring-sharp/Makefile
icons/Makefile
@@ -298,6 +297,8 @@
extensions/FlickrExport/FlickrNet/Makefile
extensions/GalleryExport/Makefile
extensions/FolderExport/Makefile
+extensions/SmugMugExport/SmugMugNet/Makefile
+extensions/SmugMugExport/Makefile
f-spot.pc
f-spot.spec
f-spot.desktop.in
Modified: trunk/extensions/DefaultExporters/DefaultExporters.addin.xml
==============================================================================
--- trunk/extensions/DefaultExporters/DefaultExporters.addin.xml (original)
+++ trunk/extensions/DefaultExporters/DefaultExporters.addin.xml Fri Feb 8 14:42:33 2008
@@ -1,5 +1,5 @@
<Addin namespace="FSpot"
- version="1.3"
+ version="1.4"
name="Default Exporters"
description="This extension contains all the default exporters for f-spot. Most of them will be moved out of this extension in the future, and, at that time, this extension will be deprecated."
author="F-Spot team"
@@ -13,7 +13,6 @@
<Extension path = "/FSpot/Menus/Exports">
<ExportMenuItem id="PicasaWeb" _label = "_PicasaWeb..." class = "FSpot.GoogleExport" />
- <ExportMenuItem id="SmugMug" _label = "_SmugMug..." class = "FSpot.SmugMugExport" />
<ExportMenuItem id="CD" _label = "_CD..." class = "FSpot.CDExport" />
</Extension>
</Addin>
Modified: trunk/extensions/FlickrExport/FlickrNet/Makefile.in
==============================================================================
--- trunk/extensions/FlickrExport/FlickrNet/Makefile.in (original)
+++ trunk/extensions/FlickrExport/FlickrNet/Makefile.in Fri Feb 8 14:42:33 2008
@@ -274,7 +274,6 @@
DIR_LIBEOG = $(top_builddir)/libeog
DIR_LIBFSPOT = $(top_builddir)/libfspot
DIR_SEMWEB = $(top_builddir)/semweb
-DIR_SMUGMUG = $(top_builddir)/SmugMugNet
DIR_SRC = $(top_builddir)/src
DIR_TAO_OPENGL = $(top_builddir)/Tao/Tao.OpenGl
DIR_TAO_GLU = $(top_builddir)/Tao/Tao.OpenGl.Glu
@@ -290,7 +289,6 @@
-r:$(DIR_ADDINS_GUI)/Mono.Addins.Gui.dll
LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_SMUGMUG = -r:$(DIR_SMUGMUG)/SmugMugNet.dll
LINK_TAO = \
-r:$(DIR_TAO_OPENGL)/Tao.OpenGl.dll \
-r:$(DIR_TAO_GLU)/Tao.OpenGl.Glu.dll \
Modified: trunk/extensions/FlickrExport/Makefile.in
==============================================================================
--- trunk/extensions/FlickrExport/Makefile.in (original)
+++ trunk/extensions/FlickrExport/Makefile.in Fri Feb 8 14:42:33 2008
@@ -286,7 +286,6 @@
DIR_LIBEOG = $(top_builddir)/libeog
DIR_LIBFSPOT = $(top_builddir)/libfspot
DIR_SEMWEB = $(top_builddir)/semweb
-DIR_SMUGMUG = $(top_builddir)/SmugMugNet
DIR_SRC = $(top_builddir)/src
DIR_TAO_OPENGL = $(top_builddir)/Tao/Tao.OpenGl
DIR_TAO_GLU = $(top_builddir)/Tao/Tao.OpenGl.Glu
@@ -302,7 +301,6 @@
-r:$(DIR_ADDINS_GUI)/Mono.Addins.Gui.dll
LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
-LINK_SMUGMUG = -r:$(DIR_SMUGMUG)/SmugMugNet.dll
LINK_TAO = \
-r:$(DIR_TAO_OPENGL)/Tao.OpenGl.dll \
-r:$(DIR_TAO_GLU)/Tao.OpenGl.Glu.dll \
Modified: trunk/extensions/Makefile.am
==============================================================================
--- trunk/extensions/Makefile.am (original)
+++ trunk/extensions/Makefile.am Fri Feb 8 14:42:33 2008
@@ -2,6 +2,7 @@
GalleryExport \
FlickrExport \
FolderExport \
+ SmugMugExport \
DefaultExporters
addinsdir = $(pkglibdir)
Added: trunk/extensions/SmugMugExport/Makefile.am
==============================================================================
--- (empty file)
+++ trunk/extensions/SmugMugExport/Makefile.am Fri Feb 8 14:42:33 2008
@@ -0,0 +1,57 @@
+include $(top_srcdir)/Makefile.include
+
+PLUGIN_NAME = SmugMugExport
+
+PLUGIN_MANIFEST = $(PLUGIN_NAME).addin.xml
+
+PLUGIN_ASSEMBLY = $(PLUGIN_NAME).dll
+
+PLUGIN_SOURCES = \
+ $(srcdir)/SmugMugExport.cs
+
+REFS = \
+ -r:../../src/f-spot.exe \
+ -r:../../src/FSpot.Core.dll \
+ -r:../../src/FSpot.Utils.dll \
+ -r:../../semweb/SemWeb.dll \
+ -r:SmugMugNet/SmugMugNet.dll \
+ $(LINK_KEYRING) \
+ -r:Mono.Posix
+
+PKGS = \
+ -pkg:gtk-sharp-2.0 \
+ -pkg:glade-sharp-2.0
+
+RESOURCES = \
+ -resource:$(srcdir)/$(PLUGIN_MANIFEST) \
+ -resource:$(srcdir)/$(PLUGIN_NAME).glade
+
+SUBDIRS = \
+ SmugMugNet
+
+
+all: $(PLUGIN_ASSEMBLY)
+
+mpack: $(PLUGIN_ASSEMBLY)
+ mautil p $(PLUGIN_ASSEMBLY)
+
+$(PLUGIN_ASSEMBLY): $(PLUGIN_SOURCES) $(PLUGIN_MANIFEST)
+ $(CSC_LIB) -out:$@ $(PLUGIN_SOURCES) $(REFS) $(PKGS) $(ASSEMBLIES) $(RESOURCES)
+
+plugindir = $(pkglibdir)/extensions
+
+install-data-hook:
+ rm -f $(plugindir)/$(PLUGIN_NAME).addin.xml
+
+plugin_DATA = \
+ $(PLUGIN_ASSEMBLY)
+
+EXTRA_DIST = \
+ $(PLUGIN_SOURCES) \
+ $(PLUGIN_MANIFEST) \
+ $(PLUGIN_NAME).glade
+
+CLEANFILES = \
+ $(PLUGIN_ASSEMBLY) \
+ $(PLUGIN_ASSEMBLY).mdb \
+ *.mpack
Added: trunk/extensions/SmugMugExport/SmugMugExport.addin.xml
==============================================================================
--- (empty file)
+++ trunk/extensions/SmugMugExport/SmugMugExport.addin.xml Fri Feb 8 14:42:33 2008
@@ -0,0 +1,17 @@
+<Addin namespace="FSpot"
+ version="1.0"
+ name="SmugMug Export"
+ description="This extension allows you to export your photos to SmugMug."
+ author="F-Spot team"
+ url="http://f-spot.org"
+ defaultEnabled="true"
+ category="Export">
+
+ <Dependencies>
+ <Addin id="Core" version="0.4.0.0"/>
+ </Dependencies>
+
+ <Extension path = "/FSpot/Menus/Exports">
+ <ExportMenuItem id="SmugMug" _label = "_SmugMug..." class = "FSpotSmugMugExport.SmugMugExport" />
+ </Extension>
+</Addin>
Added: trunk/extensions/SmugMugExport/SmugMugExport.cs
==============================================================================
--- (empty file)
+++ trunk/extensions/SmugMugExport/SmugMugExport.cs Fri Feb 8 14:42:33 2008
@@ -0,0 +1,842 @@
+/*
+ * SmugMugExport.cs
+ *
+ * Authors:
+ * Thomas Van Machelen <thomas vanmachelen gmail com>
+ *
+ * Based on PicasaWebExport code from Stephane Delcroix.
+ *
+ * Copyright (C) 2006 Thomas Van Machelen
+ */
+
+using System;
+using System.Net;
+using System.IO;
+using System.Text;
+using System.Threading;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Web;
+using Mono.Unix;
+using Gtk;
+
+using FSpot;
+using FSpot.Filters;
+using FSpot.Widgets;
+using FSpot.Utils;
+
+using Gnome.Keyring;
+using SmugMugNet;
+
+namespace FSpotSmugMugExport {
+ public class SmugMugAccount {
+ private string username;
+ private string password;
+ private string token;
+ private bool connected;
+ private SmugMugApi smugmug_proxy;
+
+ public SmugMugAccount (string username, string password)
+ {
+ this.username = username;
+ this.password = password;
+ }
+
+ public SmugMugApi Connect ()
+ {
+ System.Console.WriteLine ("SmugMug.Connect() {0}", username);
+ SmugMugApi proxy = new SmugMugApi (username, password);
+ ServicePointManager.CertificatePolicy = new NoCheckCertificatePolicy ();
+ proxy.Login ();
+
+ this.smugmug_proxy = proxy;
+ return proxy;
+ }
+
+ private void MarkChanged()
+ {
+ smugmug_proxy = null;
+ connected = false;
+ }
+
+ public bool Connected {
+ get {
+ return (smugmug_proxy != null);
+ }
+ }
+
+ public string Username {
+ get {
+ return username;
+ }
+ set {
+ if (username != value) {
+ username = value;
+ MarkChanged ();
+ }
+ }
+ }
+
+ public string Password {
+ get {
+ return password;
+ }
+ set {
+ if (password != value) {
+ password = value;
+ MarkChanged ();
+ }
+ }
+ }
+
+ public SmugMugApi SmugMug {
+ get {
+ return smugmug_proxy;
+ }
+ }
+ }
+
+
+ public class SmugMugAccountManager
+ {
+ private static SmugMugAccountManager instance;
+ private const string keyring_item_name = "SmugMug Account";
+ ArrayList accounts;
+
+ public delegate void AccountListChangedHandler (SmugMugAccountManager manager, SmugMugAccount changed_account);
+ public event AccountListChangedHandler AccountListChanged;
+
+ public static SmugMugAccountManager GetInstance ()
+ {
+ if (instance == null) {
+ instance = new SmugMugAccountManager ();
+ }
+
+ return instance;
+ }
+
+ private SmugMugAccountManager ()
+ {
+ accounts = new ArrayList ();
+ ReadAccounts ();
+ }
+
+ public void MarkChanged ()
+ {
+ MarkChanged (true, null);
+ }
+
+ public void MarkChanged (bool write, SmugMugAccount changed_account)
+ {
+ if (write)
+ WriteAccounts ();
+
+ if (AccountListChanged != null)
+ AccountListChanged (this, changed_account);
+ }
+
+ public ArrayList GetAccounts ()
+ {
+ return accounts;
+ }
+
+ public void AddAccount (SmugMugAccount account)
+ {
+ AddAccount (account, true);
+ }
+
+ public void AddAccount (SmugMugAccount account, bool write)
+ {
+ accounts.Add (account);
+ MarkChanged (write, account);
+ }
+
+ public void RemoveAccount (SmugMugAccount account)
+ {
+ string keyring = Ring.GetDefaultKeyring();
+ Hashtable request_attributes = new Hashtable();
+ request_attributes["name"] = keyring_item_name;
+ request_attributes["username"] = account.Username;
+ try {
+ foreach(ItemData result in Ring.Find(ItemType.GenericSecret, request_attributes)) {
+ Ring.DeleteItem(keyring, result.ItemID);
+ }
+ } catch (Exception e) {
+ Console.WriteLine(e);
+ }
+ accounts.Remove (account);
+ MarkChanged ();
+ }
+
+ public void WriteAccounts ()
+ {
+ string keyring = Ring.GetDefaultKeyring();
+ foreach (SmugMugAccount account in accounts) {
+ Hashtable update_request_attributes = new Hashtable();
+ update_request_attributes["name"] = keyring_item_name;
+ update_request_attributes["username"] = account.Username;
+
+ Ring.CreateItem(keyring, ItemType.GenericSecret, keyring_item_name, update_request_attributes, account.Password, true);
+ }
+ }
+
+ private void ReadAccounts ()
+ {
+
+ Hashtable request_attributes = new Hashtable();
+ request_attributes["name"] = keyring_item_name;
+ try {
+ foreach(ItemData result in Ring.Find(ItemType.GenericSecret, request_attributes)) {
+ if(!result.Attributes.ContainsKey("name") || !result.Attributes.ContainsKey("username") ||
+ (result.Attributes["name"] as string) != keyring_item_name)
+ continue;
+
+ string username = (string)result.Attributes["username"];
+ string password = result.Secret;
+
+ if (username == null || username == String.Empty || password == null || password == String.Empty)
+ throw new ApplicationException ("Invalid username/password in keyring");
+
+ SmugMugAccount account = new SmugMugAccount(username, password);
+ if (account != null)
+ AddAccount (account, false);
+
+ }
+ } catch (Exception e) {
+ Console.Error.WriteLine(e);
+ }
+
+ MarkChanged ();
+ }
+ }
+
+ public class SmugMugAccountDialog {
+ public SmugMugAccountDialog (Gtk.Window parent) : this (parent, null) {
+ Dialog.Response += HandleAddResponse;
+ add_button.Sensitive = false;
+ }
+
+ public SmugMugAccountDialog (Gtk.Window parent, SmugMugAccount account)
+ {
+ xml = new Glade.XML (null, "SmugMugExport.glade", dialog_name, "f-spot");
+ xml.Autoconnect (this);
+
+ Dialog.Modal = false;
+ Dialog.TransientFor = parent;
+ Dialog.DefaultResponse = Gtk.ResponseType.Ok;
+
+ this.account = account;
+
+ password_entry.ActivatesDefault = true;
+ username_entry.ActivatesDefault = true;
+
+ if (account != null) {
+ password_entry.Text = account.Password;
+ username_entry.Text = account.Username;
+ add_button.Label = Gtk.Stock.Ok;
+ Dialog.Response += HandleEditResponse;
+ }
+
+ if (remove_button != null)
+ remove_button.Visible = account != null;
+
+ this.Dialog.Show ();
+
+ password_entry.Changed += HandleChanged;
+ username_entry.Changed += HandleChanged;
+ HandleChanged (null, null);
+ }
+
+ private void HandleChanged (object sender, System.EventArgs args)
+ {
+ password = password_entry.Text;
+ username = username_entry.Text;
+
+ add_button.Sensitive = !(password == String.Empty || username == String.Empty);
+ }
+
+ [GLib.ConnectBefore]
+ protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
+ {
+ if (args.ResponseId == Gtk.ResponseType.Ok) {
+ SmugMugAccount account = new SmugMugAccount (username, password);
+ SmugMugAccountManager.GetInstance ().AddAccount (account);
+ }
+ Dialog.Destroy ();
+ }
+
+ protected void HandleEditResponse (object sender, Gtk.ResponseArgs args)
+ {
+ if (args.ResponseId == Gtk.ResponseType.Ok) {
+ account.Username = username;
+ account.Password = password;
+ SmugMugAccountManager.GetInstance ().MarkChanged (true, account);
+ } else if (args.ResponseId == Gtk.ResponseType.Reject) {
+ // NOTE we are using Reject to signal the remove action.
+ SmugMugAccountManager.GetInstance ().RemoveAccount (account);
+ }
+ Dialog.Destroy ();
+ }
+
+ private Gtk.Dialog Dialog {
+ get {
+ if (dialog == null)
+ dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+
+ return dialog;
+ }
+ }
+
+ private SmugMugAccount account;
+ private string password;
+ private string username;
+ private string token;
+ private string dialog_name = "smugmug_add_dialog";
+ private Glade.XML xml;
+
+ // widgets
+ [Glade.Widget] Gtk.Dialog dialog;
+ [Glade.Widget] Gtk.Entry password_entry;
+ [Glade.Widget] Gtk.Entry username_entry;
+
+ [Glade.Widget] Gtk.Button add_button;
+ [Glade.Widget] Gtk.Button remove_button;
+ [Glade.Widget] Gtk.Button cancel_button;
+
+ [Glade.Widget] Gtk.HBox status_area;
+ [Glade.Widget] Gtk.HBox locked_area;
+ }
+
+ public class SmugMugAddAlbum {
+ //[Glade.Widget] Gtk.OptionMenu album_optionmenu;
+
+ [Glade.Widget] Gtk.Dialog dialog;
+ [Glade.Widget] Gtk.Entry title_entry;
+ [Glade.Widget] Gtk.CheckButton public_check;
+ [Glade.Widget] Gtk.ComboBox category_combo;
+
+ [Glade.Widget] Gtk.Button add_button;
+ [Glade.Widget] Gtk.Button cancel_button;
+
+ private string dialog_name = "smugmug_add_album_dialog";
+ private Glade.XML xml;
+ private SmugMugExport export;
+ private SmugMugApi smugmug;
+ private string description;
+ private string title;
+ private bool public_album;
+ private ListStore category_store;
+
+ public SmugMugAddAlbum (SmugMugExport export, SmugMugApi smugmug)
+ {
+ xml = new Glade.XML (null, "SmugMugExport.glade", dialog_name, "f-spot");
+ xml.Autoconnect (this);
+
+ this.export = export;
+ this.smugmug = smugmug;
+
+ this.category_store = new ListStore (typeof(int), typeof(string));
+ CellRendererText display_cell = new CellRendererText();
+ category_combo.PackStart (display_cell, true);
+ category_combo.SetCellDataFunc (display_cell, new CellLayoutDataFunc (CategoryDataFunc));
+ this.category_combo.Model = category_store;
+ PopulateCategoryCombo ();
+
+ Dialog.Response += HandleAddResponse;
+
+ title_entry.Changed += HandleChanged;
+ HandleChanged (null, null);
+ }
+
+ private void HandleChanged (object sender, EventArgs args)
+ {
+ title = title_entry.Text;
+ public_album = public_check.Active;
+
+ if (title == String.Empty)
+ add_button.Sensitive = false;
+ else
+ add_button.Sensitive = true;
+ }
+
+ [GLib.ConnectBefore]
+ protected void HandleAddResponse (object sender, Gtk.ResponseArgs args)
+ {
+ if (args.ResponseId == Gtk.ResponseType.Ok) {
+ smugmug.CreateAlbum (title, CurrentCategoryId, public_check.Active);
+ export.HandleAlbumAdded (title);
+ }
+ Dialog.Destroy ();
+ }
+
+ void CategoryDataFunc (CellLayout layout, CellRenderer renderer, TreeModel model, TreeIter iter)
+ {
+ string name = (string)model.GetValue (iter, 1);
+ (renderer as CellRendererText).Text = name;
+ }
+
+ protected void PopulateCategoryCombo ()
+ {
+ SmugMugNet.Category[] categories = smugmug.GetCategories ();
+
+ foreach (SmugMugNet.Category category in categories) {
+ category_store.AppendValues (category.CategoryID, category.Title);
+ }
+
+ category_combo.Active = 0;
+
+ category_combo.ShowAll ();
+ }
+
+ protected int CurrentCategoryId
+ {
+ get {
+ TreeIter current;
+ category_combo.GetActiveIter (out current);
+ return (int)category_combo.Model.GetValue (current, 0);
+ }
+ }
+
+ private Gtk.Dialog Dialog {
+ get {
+ if (dialog == null)
+ dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+
+ return dialog;
+ }
+ }
+ }
+
+
+ public class SmugMugExport : FSpot.Extensions.IExporter {
+ public SmugMugExport ()
+ {
+ }
+ public void Run (IBrowsableCollection selection)
+ {
+ xml = new Glade.XML (null, "SmugMugExport.glade", dialog_name, "f-spot");
+ xml.Autoconnect (this);
+
+ this.items = selection.Items;
+ album_button.Sensitive = false;
+ FSpot.Widgets.IconView view = new FSpot.Widgets.IconView (selection);
+ view.DisplayDates = false;
+ view.DisplayTags = false;
+
+ Dialog.Modal = false;
+ Dialog.TransientFor = null;
+ Dialog.Close += HandleCloseEvent;
+
+ thumb_scrolledwindow.Add (view);
+ view.Show ();
+ Dialog.Show ();
+
+ SmugMugAccountManager manager = SmugMugAccountManager.GetInstance ();
+ manager.AccountListChanged += PopulateSmugMugOptionMenu;
+ PopulateSmugMugOptionMenu (manager, null);
+
+ if (edit_button != null)
+ edit_button.Clicked += HandleEditGallery;
+
+ rh = new Gtk.ResponseHandler (HandleResponse);
+ Dialog.Response += HandleResponse;
+ connect = true;
+ HandleSizeActive (null, null);
+ Connect ();
+
+ scale_check.Toggled += HandleScaleCheckToggled;
+
+ LoadPreference (SCALE_KEY);
+ LoadPreference (SIZE_KEY);
+ LoadPreference (ROTATE_KEY);
+ LoadPreference (BROWSER_KEY);
+ }
+
+ Gtk.ResponseHandler rh;
+
+ private bool scale;
+ private int size;
+ private bool browser;
+ private bool rotate;
+// private bool meta;
+ private bool connect = false;
+
+ private long approx_size = 0;
+ private long sent_bytes = 0;
+
+ IBrowsableItem [] items;
+ int photo_index;
+ FSpot.ThreadProgressDialog progress_dialog;
+
+ ArrayList accounts;
+ private SmugMugAccount account;
+ private Album album;
+
+ private string xml_path;
+
+ private string dialog_name = "smugmug_export_dialog";
+ private Glade.XML xml;
+
+ // Dialogs
+ private SmugMugAccountDialog gallery_add;
+ private SmugMugAddAlbum album_add;
+
+ // Widgets
+ [Glade.Widget] Gtk.Dialog dialog;
+ [Glade.Widget] Gtk.OptionMenu gallery_optionmenu;
+ [Glade.Widget] Gtk.OptionMenu album_optionmenu;
+
+ [Glade.Widget] Gtk.Entry width_entry;
+ [Glade.Widget] Gtk.Entry height_entry;
+
+ [Glade.Widget] Gtk.Label status_label;
+
+ [Glade.Widget] Gtk.CheckButton browser_check;
+ [Glade.Widget] Gtk.CheckButton scale_check;
+ [Glade.Widget] Gtk.CheckButton rotate_check;
+
+ [Glade.Widget] Gtk.SpinButton size_spin;
+
+ [Glade.Widget] Gtk.Button album_button;
+ [Glade.Widget] Gtk.Button add_button;
+ [Glade.Widget] Gtk.Button edit_button;
+
+ [Glade.Widget] Gtk.Button ok_button;
+ [Glade.Widget] Gtk.Button cancel_button;
+
+ [Glade.Widget] Gtk.ScrolledWindow thumb_scrolledwindow;
+
+ System.Threading.Thread command_thread;
+
+ public const string EXPORT_SERVICE = "smugmug/";
+ public const string SCALE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "scale";
+ public const string SIZE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "size";
+ public const string ROTATE_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "rotate";
+ public const string BROWSER_KEY = Preferences.APP_FSPOT_EXPORT + EXPORT_SERVICE + "browser";
+
+ private void HandleResponse (object sender, Gtk.ResponseArgs args)
+ {
+ if (args.ResponseId != Gtk.ResponseType.Ok) {
+ Dialog.Destroy ();
+ return;
+ }
+
+ if (scale_check != null) {
+ scale = scale_check.Active;
+ size = size_spin.ValueAsInt;
+ } else
+ scale = false;
+
+ browser = browser_check.Active;
+ rotate = rotate_check.Active;
+// meta = meta_check.Active;
+
+ if (account != null) {
+ //System.Console.WriteLine ("history = {0}", album_optionmenu.History);
+ album = (Album) account.SmugMug.GetAlbums() [Math.Max (0, album_optionmenu.History)];
+ photo_index = 0;
+
+ Dialog.Destroy ();
+
+ command_thread = new System.Threading.Thread (new System.Threading.ThreadStart (this.Upload));
+ command_thread.Name = Mono.Unix.Catalog.GetString ("Uploading Pictures");
+
+ progress_dialog = new FSpot.ThreadProgressDialog (command_thread, items.Length);
+ progress_dialog.Start ();
+
+ // Save these settings for next time
+ Preferences.Set (SCALE_KEY, scale);
+ Preferences.Set (SIZE_KEY, size);
+ Preferences.Set (ROTATE_KEY, rotate);
+ Preferences.Set (BROWSER_KEY, browser);
+ }
+ }
+
+ public void HandleSizeActive (object sender, EventArgs args)
+ {
+ size_spin.Sensitive = scale_check.Active;
+ }
+
+ private void Upload ()
+ {
+ sent_bytes = 0;
+ approx_size = 0;
+
+ System.Uri album_uri = null;
+
+ System.Console.WriteLine ("Starting Upload to Smugmug, album {0} - {1}", album.Title, album.AlbumID);
+
+ FilterSet filters = new FilterSet ();
+ filters.Add (new JpegFilter ());
+
+ if (scale)
+ filters.Add (new ResizeFilter ((uint)size));
+
+ if (rotate)
+ filters.Add (new OrientationFilter ());
+
+ while (photo_index < items.Length) {
+ try {
+ IBrowsableItem item = items[photo_index];
+
+ FileInfo file_info;
+ Console.WriteLine ("uploading {0}", photo_index);
+
+ progress_dialog.Message = String.Format (Catalog.GetString ("Uploading picture \"{0}\" ({1} of {2})"),
+ item.Name, photo_index+1, items.Length);
+ progress_dialog.ProgressText = string.Empty;
+ progress_dialog.Fraction = ((photo_index) / (double) items.Length);
+ photo_index++;
+
+ FilterRequest request = new FilterRequest (item.DefaultVersionUri);
+
+ filters.Convert (request);
+
+ file_info = new FileInfo (request.Current.LocalPath);
+
+ if (approx_size == 0) //first image
+ approx_size = file_info.Length * items.Length;
+ else
+ approx_size = sent_bytes * items.Length / (photo_index - 1);
+
+ int image_id = account.SmugMug.Upload (request.Current.LocalPath, album.AlbumID);
+ if (Core.Database != null && item is Photo)
+ Core.Database.Exports.Create ((item as Photo).Id,
+ (item as Photo).DefaultVersionId,
+ ExportStore.SmugMugExportType,
+ account.SmugMug.GetAlbumUrl (image_id).ToString ());
+
+ sent_bytes += file_info.Length;
+
+ if (album_uri == null)
+ album_uri = account.SmugMug.GetAlbumUrl (image_id);
+ } catch (System.Exception e) {
+ progress_dialog.Message = String.Format (Mono.Unix.Catalog.GetString ("Error Uploading To Gallery: {0}"),
+ e.Message);
+ progress_dialog.ProgressText = Mono.Unix.Catalog.GetString ("Error");
+ System.Console.WriteLine (e);
+
+ if (progress_dialog.PerformRetrySkip ())
+ photo_index--;
+ }
+ }
+
+ progress_dialog.Message = Catalog.GetString ("Done Sending Photos");
+ progress_dialog.Fraction = 1.0;
+ progress_dialog.ProgressText = Mono.Unix.Catalog.GetString ("Upload Complete");
+ progress_dialog.ButtonLabel = Gtk.Stock.Ok;
+
+ if (browser && album_uri != null) {
+ GnomeUtil.UrlShow (null, album_uri.ToString ());
+ }
+ }
+
+ private void HandleScaleCheckToggled (object o, EventArgs e)
+ {
+ rotate_check.Sensitive = !scale_check.Active;
+ }
+
+ private void PopulateSmugMugOptionMenu (SmugMugAccountManager manager, SmugMugAccount changed_account)
+ {
+ Gtk.Menu menu = new Gtk.Menu ();
+ this.account = changed_account;
+ int pos = -1;
+
+ accounts = manager.GetAccounts ();
+ if (accounts == null || accounts.Count == 0) {
+ Gtk.MenuItem item = new Gtk.MenuItem (Mono.Unix.Catalog.GetString ("(No Gallery)"));
+ menu.Append (item);
+ gallery_optionmenu.Sensitive = false;
+ edit_button.Sensitive = false;
+ } else {
+ int i = 0;
+ foreach (SmugMugAccount account in accounts) {
+ if (account == changed_account)
+ pos = i;
+
+ Gtk.MenuItem item = new Gtk.MenuItem (account.Username);
+ menu.Append (item);
+ i++;
+ }
+ gallery_optionmenu.Sensitive = true;
+ edit_button.Sensitive = true;
+ }
+
+ menu.ShowAll ();
+ gallery_optionmenu.Menu = menu;
+ gallery_optionmenu.SetHistory ((uint)pos);
+ }
+
+ private void Connect ()
+ {
+ Connect (null);
+ }
+
+ private void Connect (SmugMugAccount selected)
+ {
+ Connect (selected, null);
+ }
+
+ private void Connect (SmugMugAccount selected, string text)
+ {
+ try {
+ if (accounts.Count != 0 && connect) {
+ if (selected == null)
+ account = (SmugMugAccount) accounts [gallery_optionmenu.History];
+ else
+ account = selected;
+
+ if (!account.Connected)
+ account.Connect ();
+
+ PopulateAlbumOptionMenu (account.SmugMug);
+ album_button.Sensitive = true;
+ }
+ } catch (System.Exception) {
+ System.Console.WriteLine ("Can not connect to SmugMug. Bad username ? password ? network connection ?");
+ //System.Console.WriteLine ("{0}",ex);
+ if (selected != null)
+ account = selected;
+
+ PopulateAlbumOptionMenu (account.SmugMug);
+
+ status_label.Text = String.Empty;
+ album_button.Sensitive = false;
+
+ new SmugMugAccountDialog (this.Dialog, account);
+ }
+ }
+
+ private void HandleAccountSelected (object sender, System.EventArgs args)
+ {
+ Connect ();
+ }
+
+ public void HandleAlbumAdded (string title) {
+ SmugMugAccount account = (SmugMugAccount) accounts [gallery_optionmenu.History];
+ PopulateAlbumOptionMenu (account.SmugMug);
+
+ // make the newly created album selected
+ Album[] albums = account.SmugMug.GetAlbums();
+ for (int i=0; i < albums.Length; i++) {
+ if (((Album)albums[i]).Title == title) {
+ album_optionmenu.SetHistory((uint)i);
+ }
+ }
+ }
+
+ private void PopulateAlbumOptionMenu (SmugMugApi smugmug)
+ {
+ Album[] albums = null;
+ if (smugmug != null) {
+ try {
+ albums = smugmug.GetAlbums();
+ } catch (Exception) {
+ Console.WriteLine("Can't get the albums");
+ smugmug = null;
+ }
+ }
+
+ Gtk.Menu menu = new Gtk.Menu ();
+
+ bool disconnected = smugmug == null || !account.Connected || albums == null;
+
+ if (disconnected || albums.Length == 0) {
+ string msg = disconnected ? Mono.Unix.Catalog.GetString ("(Not Connected)")
+ : Mono.Unix.Catalog.GetString ("(No Albums)");
+
+ Gtk.MenuItem item = new Gtk.MenuItem (msg);
+ menu.Append (item);
+
+ ok_button.Sensitive = false;
+ album_optionmenu.Sensitive = false;
+ album_button.Sensitive = false;
+
+ if (disconnected)
+ album_button.Sensitive = false;
+ } else {
+ foreach (Album album in albums) {
+ System.Text.StringBuilder label_builder = new System.Text.StringBuilder ();
+
+ label_builder.Append (album.Title);
+
+ Gtk.MenuItem item = new Gtk.MenuItem (label_builder.ToString ());
+ ((Gtk.Label)item.Child).UseUnderline = false;
+ menu.Append (item);
+ }
+
+ ok_button.Sensitive = items.Length > 0;
+ album_optionmenu.Sensitive = true;
+ album_button.Sensitive = true;
+ }
+
+ menu.ShowAll ();
+ album_optionmenu.Menu = menu;
+ }
+
+ public void HandleAddGallery (object sender, System.EventArgs args)
+ {
+ gallery_add = new SmugMugAccountDialog (this.Dialog);
+ }
+
+ public void HandleEditGallery (object sender, System.EventArgs args)
+ {
+ gallery_add = new SmugMugAccountDialog (this.Dialog, account);
+ }
+
+ public void HandleAddAlbum (object sender, System.EventArgs args)
+ {
+ if (account == null)
+ throw new Exception (Catalog.GetString ("No account selected"));
+
+ album_add = new SmugMugAddAlbum (this, account.SmugMug);
+ }
+
+ void LoadPreference (string key)
+ {
+ object val = Preferences.Get (key);
+
+ if (val == null)
+ return;
+
+ //System.Console.WriteLine ("Setting {0} to {1}", key, val);
+
+ switch (key) {
+ case SCALE_KEY:
+ if (scale_check.Active != (bool) val) {
+ scale_check.Active = (bool) val;
+ rotate_check.Sensitive = !(bool) val;
+ }
+ break;
+
+ case SIZE_KEY:
+ size_spin.Value = (double) (int) val;
+ break;
+
+ case BROWSER_KEY:
+ if (browser_check.Active != (bool) val)
+ browser_check.Active = (bool) val;
+ break;
+
+ case ROTATE_KEY:
+ if (rotate_check.Active != (bool) val)
+ rotate_check.Active = (bool) val;
+ break;
+ }
+ }
+
+ protected void HandleCloseEvent (object sender, System.EventArgs args)
+ {
+ account.SmugMug.Logout ();
+ }
+
+ private Gtk.Dialog Dialog {
+ get {
+ if (dialog == null)
+ dialog = (Gtk.Dialog) xml.GetWidget (dialog_name);
+
+ return dialog;
+ }
+ }
+ }
+}
Added: trunk/extensions/SmugMugExport/SmugMugExport.glade
==============================================================================
--- (empty file)
+++ trunk/extensions/SmugMugExport/SmugMugExport.glade Fri Feb 8 14:42:33 2008
@@ -0,0 +1,663 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <requires lib="canvas"/>
+ <requires lib="gnome"/>
+ <widget class="GtkDialog" id="smugmug_export_dialog">
+ <property name="title" translatable="yes">Export</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="vbox88">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkHBox" id="hbox91">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <child>
+ <widget class="GtkFrame" id="frame50">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment67">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="thumb_scrolledwindow">
+ <property name="width_request">180</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label220">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Photos</b></property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox89">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkFrame" id="frame51">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment68">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox90">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox92">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="gallery_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Account:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">gallery_optionmenu</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkOptionMenu" id="gallery_optionmenu">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="response_id">0</property>
+ <signal name="changed" handler="HandleAccountSelected"/>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="gallery_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="HandleAddGallery"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="edit_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-edit</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label222">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label223">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>SmugMug Export</b></property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame52">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment69">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox91">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox93">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="album_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Export to Album:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">album_optionmenu</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkOptionMenu" id="album_optionmenu">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="album_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ <signal name="clicked" handler="HandleAddAlbum"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="browser_check">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Open _album in browser when done uploading</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label225">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Album</b></property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame53">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment70">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox92">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox94">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkCheckButton" id="scale_check">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Resize to: </property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ <signal name="toggled" handler="HandleSizeActive"/>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="size_spin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">400 0 10000 1 10 10</property>
+ <property name="climb_rate">1</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label226">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">pixels</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="rotate_check">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Autorotate</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label227">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Style</b></property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="hbuttonbox14">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="cancel_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="export_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">_Export</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <widget class="GtkDialog" id="smugmug_add_album_dialog">
+ <property name="visible">True</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="vbox93">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkTable" id="table26">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">7</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="category_label">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Description:</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="name_label">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Album Title:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">title_entry</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="title_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">*</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="public_check">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Public Album</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkComboBox" id="category_combo">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="hbuttonbox15">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="cancele_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="add_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <widget class="GtkDialog" id="smugmug_add_dialog">
+ <property name="visible">True</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="vbox97">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkVBox" id="vbox98">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkTable" id="table28">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">7</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="password_label">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Password:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">password_entry</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="password_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">*</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="username_label">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">_Username:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">username_entry</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="username_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">*</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="hbuttonbox16">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="cancel_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="remove_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-remove</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-2</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="add_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
Added: trunk/extensions/SmugMugExport/SmugMugNet/Makefile
==============================================================================
--- (empty file)
+++ trunk/extensions/SmugMugExport/SmugMugNet/Makefile Fri Feb 8 14:42:33 2008
@@ -0,0 +1,511 @@
+# Makefile.in generated by automake 1.10 from Makefile.am.
+# extensions/SmugMugExport/SmugMugNet/Makefile. Generated from Makefile.in by configure.
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+
+pkgdatadir = $(datadir)/f-spot
+pkglibdir = $(libdir)/f-spot
+pkgincludedir = $(includedir)/f-spot
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = i686-suse-linux-gnu
+host_triplet = i686-suse-linux-gnu
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(top_srcdir)/Makefile.include
+subdir = extensions/SmugMugExport/SmugMugNet
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
+ $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(assemblydir)"
+assemblyDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(assembly_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/sde/f-spot/f-spot/missing --run aclocal-1.10
+ALL_LINGUAS =
+AMTAR = ${SHELL} /home/sde/f-spot/f-spot/missing --run tar
+AR = ar
+AUTOCONF = ${SHELL} /home/sde/f-spot/f-spot/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/sde/f-spot/f-spot/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/sde/f-spot/f-spot/missing --run automake-1.10
+AWK = gawk
+BEAGLE_CFLAGS =
+BEAGLE_DEFINES =
+BEAGLE_DIR =
+BEAGLE_LIBS =
+CATALOGS =
+CATOBJEXT = .gmo
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2
+CPP = gcc -E
+CPPFLAGS =
+CSC = gmcs $(CSC_FLAGS) -target:exe
+CSC_DEFINES = -d:GTK_2_10
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -g -O2
+CYGPATH_W = echo
+DATADIRNAME = share
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DIR_DBUS =
+DIR_DBUS_GLIB =
+DOC_USER_FORMATS =
+ECHO = echo
+ECHO_C =
+ECHO_N = -n
+ECHO_T =
+EGREP = /usr/bin/grep -E
+EXEEXT =
+EXIF_CFLAGS =
+EXIF_LIBS = -lexif -lm
+EXIF_SOVERSION = 12
+F77 = gfortran
+FFLAGS = -g -O2
+F_CFLAGS = -DORBIT2=1 -pthread -D_REENTRANT -I/usr/include/libgnome-2.0 -I/usr/include/orbit-2.0 -I/usr/include/gconf/2 -I/usr/include/gnome-vfs-2.0 -I/usr/lib/gnome-vfs-2.0/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libbonobo-2.0 -I/usr/include/bonobo-activation-2.0 -I/usr/include/libgnomeui-2.0 -I/usr/include/libart-2.0 -I/usr/include/gnome-keyring-1 -I/usr/include/libbonoboui-2.0 -I/usr/include/libgnomecanvas-2.0 -I/usr/include/gtk-2.0 -I/usr/include/libxml2 -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/include/gail-1.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/libpng12 -I:/usr/lib/pkgconfig/../../share/gapi-2.0/gtkhtml-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/gnome-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/pango-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/atk-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/gdk-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-
2.0/gtk-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/art-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/gnome-vfs-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/glade-api.xml -I/usr/lib/pkgconfig/../../include/mono-1.0
+F_LIBS = -pthread -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/gtkhtml-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/gnome-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/pango-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/atk-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/gdk-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/gtk-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/art-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/gnome-vfs-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/glib-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/glade-sharp.dll -L/usr/lib/pkgconfig/../../lib -lgnomeui-2 -lSM -lICE -lbonoboui-2 -lgnomevfs-2 -lgnomecanvas-2 -lgnome-2 -lpopt -lbonobo-2 -lbonobo-activation -lart_lgpl_2 -lgconf-2 -lORBit-2 -lexif -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0
-lmono -ldl -lpthread -lm -lgthread-2.0 -lrt -lglib-2.0
+GCONFTOOL = /usr/bin/gconftool-2
+GCONF_SCHEMA_CONFIG_SOURCE = xml::/etc/gconf/gconf.xml.schemas
+GCONF_SCHEMA_FILE_DIR = $(sysconfdir)/gconf/schemas
+GCONF_SHARP_CFLAGS = -I:/usr/lib/pkgconfig/../../share/gapi-2.0/gnome-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/pango-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/atk-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/gdk-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/gtk-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/art-api.xml -I:/usr/lib/pkgconfig/../../share/gapi-2.0/gnome-vfs-api.xml
+GCONF_SHARP_LIBS = -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/gconf-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/gconf-sharp-peditors.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/gnome-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/pango-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/atk-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/gdk-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/gtk-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/art-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/gnome-vfs-sharp.dll -r:/usr/lib/pkgconfig/../../lib/mono/gtk-sharp-2.0/glib-sharp.dll
+GETTEXT_PACKAGE = f-spot
+GLIB_CFLAGS = -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
+GLIB_GENMARSHAL = glib-genmarshal
+GLIB_LIBS = -lglib-2.0
+GLIB_MKENUMS = glib-mkenums
+GMOFILES =
+GMSGFMT = /usr/bin/msgfmt
+GNOME_ICON_THEME_PREFIX =
+GNOME_SCREENSAVER_SAVERDIR = NONE/libexec/gnome-screensaver
+GNOME_SCREENSAVER_THEMESDIR = NONE/share/applications/screensavers
+GOBJECT_QUERY = gobject-query
+GREP = /usr/bin/grep
+HELP_DIR = ${datadir}/gnome/help
+ICONS_DIRECTORY = ${datarootdir}/f-spot-0.4.2
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+INSTOBJEXT = .mo
+INTLLIBS =
+INTLTOOL_CAVES_RULE = %.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_DESKTOP_RULE = %.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_DIRECTORY_RULE = %.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_EXTRACT = $(top_builddir)/intltool-extract
+INTLTOOL_ICONV = /usr/bin/iconv
+INTLTOOL_KBD_RULE = %.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_KEYS_RULE = %.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_MERGE = $(top_builddir)/intltool-merge
+INTLTOOL_MSGFMT = /usr/bin/msgfmt
+INTLTOOL_MSGMERGE = /usr/bin/msgmerge
+INTLTOOL_OAF_RULE = %.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@
+INTLTOOL_PERL = /usr/bin/perl
+INTLTOOL_PONG_RULE = %.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_PROP_RULE = %.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_SCHEMAS_RULE = %.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_SERVER_RULE = %.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_SERVICE_RULE = %.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_SHEET_RULE = %.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_SOUNDLIST_RULE = %.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_THEME_RULE = %.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_UI_RULE = %.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_UPDATE = $(top_builddir)/intltool-update
+INTLTOOL_XAM_RULE = %.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+INTLTOOL_XGETTEXT = /usr/bin/xgettext
+INTLTOOL_XML_NOMERGE_RULE = %.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@
+INTLTOOL_XML_RULE = %.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@
+LCMS_CFLAGS =
+LCMS_LIBS = -llcms
+LDFLAGS =
+LIBEXIF_VERSION_CHECK_CFLAGS =
+LIBEXIF_VERSION_CHECK_LIBS = -lexif -lm
+LIBGPHOTO2_CFLAGS = -I/usr/include/gphoto2
+LIBGPHOTO2_LIBS = -lgphoto2 -lgphoto2_port -lexif -lm -lusb
+LIBJPEG = -ljpeg
+LIBOBJS =
+LIBS = -ljpeg
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LINK_BEAGLE =
+LINK_DBUS = -pkg:ndesk-dbus-1.0 -pkg:ndesk-dbus-glib-1.0
+LN_S = ln -s
+LTLIBOBJS =
+MAINT =
+MAKEINFO = ${SHELL} /home/sde/f-spot/f-spot/missing --run makeinfo
+MCS = /usr/bin/gmcs
+MKDIR_P = /bin/mkdir -p
+MONO = /usr/bin/mono
+MONO_NUNIT_CFLAGS =
+MONO_NUNIT_LIBS = -r:/usr/lib/pkgconfig/../../lib/mono/1.0/nunit.core.dll -r:/usr/lib/pkgconfig/../../lib/mono/1.0/nunit.framework.dll -r:/usr/lib/pkgconfig/../../lib/mono/1.0/nunit.util.dll
+MSGFMT = /usr/bin/msgfmt
+MSGFMT_OPTS = -c
+NDESK_DBUS_CFLAGS =
+NDESK_DBUS_LIBS = -r:/usr/lib/mono/ndesk-dbus-1.0/NDesk.DBus.dll -r:/usr/lib/mono/ndesk-dbus-glib-1.0/NDesk.DBus.GLib.dll
+NUNIT22_CFLAGS =
+NUNIT22_LIBS =
+NUNIT_CFLAGS =
+NUNIT_DEFINES = -d:ENABLE_NUNIT
+NUNIT_LIBS = -r:/usr/lib/pkgconfig/../../lib/mono/1.0/nunit.core.dll -r:/usr/lib/pkgconfig/../../lib/mono/1.0/nunit.framework.dll -r:/usr/lib/pkgconfig/../../lib/mono/1.0/nunit.util.dll
+NUNIT_PKG = -pkg:mono-nunit
+OBJEXT = o
+OMF_DIR = ${datadir}/omf
+PACKAGE = f-spot
+PACKAGE_BUGREPORT =
+PACKAGE_NAME = F-Spot
+PACKAGE_STRING = F-Spot 0.4.2
+PACKAGE_TARNAME = f-spot
+PACKAGE_VERSION = 0.4.2
+PATH_DBUS =
+PATH_SEPARATOR = :
+PKG_CONFIG = /usr/bin/pkg-config
+POFILES =
+POSUB = po
+PO_IN_DATADIR_FALSE =
+PO_IN_DATADIR_TRUE =
+RANLIB = ranlib
+SED = /usr/bin/sed
+SET_MAKE =
+SHELL = /bin/sh
+STRIP = strip
+TURTLEDIR =
+USE_NLS = yes
+VERSION = 0.4.2
+XGETTEXT = /usr/bin/xgettext
+abs_builddir = /home/sde/f-spot/f-spot/extensions/SmugMugExport/SmugMugNet
+abs_srcdir = /home/sde/f-spot/f-spot/extensions/SmugMugExport/SmugMugNet
+abs_top_builddir = /home/sde/f-spot/f-spot
+abs_top_srcdir = /home/sde/f-spot/f-spot
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_F77 = gfortran
+am__include = include
+am__leading_dot = .
+am__quote =
+am__tar = tar --format=ustar -chf - "$$tardir"
+am__untar = tar -xf -
+bindir = ${exec_prefix}/bin
+build = i686-suse-linux-gnu
+build_alias =
+build_cpu = i686
+build_os = linux-gnu
+build_vendor = suse
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+expanded_libdir = /usr/local/lib
+host = i686-suse-linux-gnu
+host_alias =
+host_cpu = i686
+host_os = linux-gnu
+host_vendor = suse
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = $(SHELL) /home/sde/f-spot/f-spot/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = /bin/mkdir -p
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias =
+top_builddir = ../../..
+top_srcdir = ../../..
+DIR_ADDINS_ADDINS = $(top_builddir)/mono-addins/Mono.Addins
+DIR_ADDINS_GUI = $(top_builddir)/mono-addins/Mono.Addins.Gui
+DIR_ADDINS_SETUP = $(top_builddir)/mono-addins/Mono.Addins.Setup
+DIR_DOCS = $(top_builddir)/docs
+DIR_EXTENSIONS = $(top_builddir)/extensions
+DIR_GLITZ = $(top_builddir)/glitz-sharp/src
+DIR_GOOGLE = $(top_builddir)/google-sharp
+DIR_GPHOTO2 = $(top_builddir)/libgphoto2-sharp
+DIR_ICONS = $(top_builddir)/icons
+DIR_JPEGTRAN = $(top_builddir)/libjpegtran
+DIR_KEYRING = $(top_builddir)/gnome-keyring-sharp
+DIR_LIBEOG = $(top_builddir)/libeog
+DIR_LIBFSPOT = $(top_builddir)/libfspot
+DIR_SEMWEB = $(top_builddir)/semweb
+DIR_SRC = $(top_builddir)/src
+DIR_TAO_OPENGL = $(top_builddir)/Tao/Tao.OpenGl
+DIR_TAO_GLU = $(top_builddir)/Tao/Tao.OpenGl.Glu
+DIR_TAO_EXTENSIONLOADER = $(top_builddir)/Tao/Tao.OpenGl.ExtensionLoader
+DIR_TAO_GLPOSTPROCESS = $(top_builddir)/Tao/Tao.GlPostProcess
+LINK_KEYRING = -r:$(DIR_KEYRING)/gnome-keyring-sharp.dll
+LINK_GLITZ = -r:$(DIR_GLITZ)/NDesk.Glitz.dll
+LINK_GOOGLE = -r:$(DIR_GOOGLE)/Mono.Google.dll
+LINK_GPHOTO2 = -r:$(DIR_GPHOTO2)/libgphoto2-sharp.dll
+LINK_MONO_ADDINS = \
+ -r:$(DIR_ADDINS_ADDINS)/Mono.Addins.dll \
+ -r:$(DIR_ADDINS_SETUP)/Mono.Addins.Setup.dll \
+ -r:$(DIR_ADDINS_GUI)/Mono.Addins.Gui.dll
+
+LINK_SEMWEB = -r:$(DIR_SEMWEB)/SemWeb.dll
+LINK_TAO = \
+ -r:$(DIR_TAO_OPENGL)/Tao.OpenGl.dll \
+ -r:$(DIR_TAO_GLU)/Tao.OpenGl.Glu.dll \
+ -r:$(DIR_TAO_EXTENSIONLOADER)/Tao.OpenGl.ExtensionLoader.dll
+
+CSC_FLAGS = -debug
+CSC_LIB = gmcs $(CSC_FLAGS) -target:library
+MONO_DEBUGFLAGS = --debug
+RUNTIME = mono $(MONO_DEBUGFLAGS)
+ASSEMBLY_NAME = SmugMugNet
+ASSEMBLY_SOURCES = \
+ $(srcdir)/SmugMugApi.cs \
+ $(srcdir)/NoCheckCertificatePolicy.cs
+
+REFS =
+PKGS =
+ASSEMBLY = $(ASSEMBLY_NAME).dll
+assemblydir = $(pkglibdir)
+assembly_DATA = $(ASSEMBLY)
+EXTRA_DIST = $(ASSEMBLY_SOURCES)
+CLEANFILES = \
+ $(ASSEMBLY) \
+ $(ASSEMBLY).mdb
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Makefile.include $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu extensions/SmugMugExport/SmugMugNet/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu extensions/SmugMugExport/SmugMugNet/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+install-assemblyDATA: $(assembly_DATA)
+ @$(NORMAL_INSTALL)
+ test -z "$(assemblydir)" || $(MKDIR_P) "$(DESTDIR)$(assemblydir)"
+ @list='$(assembly_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f=$(am__strip_dir) \
+ echo " $(assemblyDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(assemblydir)/$$f'"; \
+ $(assemblyDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(assemblydir)/$$f"; \
+ done
+
+uninstall-assemblyDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(assembly_DATA)'; for p in $$list; do \
+ f=$(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(assemblydir)/$$f'"; \
+ rm -f "$(DESTDIR)$(assemblydir)/$$f"; \
+ done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(assemblydir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-assemblyDATA
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-assemblyDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ distclean distclean-generic distclean-libtool distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-assemblyDATA install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-pdf install-pdf-am install-ps install-ps-am \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ uninstall uninstall-am uninstall-assemblyDATA
+
+
+all: $(ASSEMBLY)
+
+$(ASSEMBLY): $(ASSEMBLY_SOURCES)
+ $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Added: trunk/extensions/SmugMugExport/SmugMugNet/Makefile.am
==============================================================================
--- (empty file)
+++ trunk/extensions/SmugMugExport/SmugMugNet/Makefile.am Fri Feb 8 14:42:33 2008
@@ -0,0 +1,27 @@
+include $(top_srcdir)/Makefile.include
+
+ASSEMBLY_NAME = SmugMugNet
+
+ASSEMBLY_SOURCES = \
+ $(srcdir)/SmugMugApi.cs \
+ $(srcdir)/NoCheckCertificatePolicy.cs
+
+REFS =
+
+PKGS =
+
+ASSEMBLY = $(ASSEMBLY_NAME).dll
+
+all: $(ASSEMBLY)
+
+$(ASSEMBLY): $(ASSEMBLY_SOURCES)
+ $(CSC_LIB) -out:$@ $(PKGS) $(REFS) $(ASSEMBLY_SOURCES)
+
+assemblydir = $(pkglibdir)
+assembly_DATA = $(ASSEMBLY)
+
+EXTRA_DIST = $(ASSEMBLY_SOURCES)
+
+CLEANFILES = \
+ $(ASSEMBLY) \
+ $(ASSEMBLY).mdb
Added: trunk/extensions/SmugMugExport/SmugMugNet/NoCheckCertificatePolicy.cs
==============================================================================
--- (empty file)
+++ trunk/extensions/SmugMugExport/SmugMugNet/NoCheckCertificatePolicy.cs Fri Feb 8 14:42:33 2008
@@ -0,0 +1,38 @@
+// Authors:
+// Gonzalo Paniagua Javier (gonzalo ximian com)
+//
+// (C) Copyright 2006 Novell, Inc. (http://www.novell.com)
+//
+
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System.Net;
+using System.Security.Cryptography.X509Certificates;
+
+namespace SmugMugNet {
+ public class NoCheckCertificatePolicy : ICertificatePolicy {
+ public bool CheckValidationResult (ServicePoint a, X509Certificate b, WebRequest c, int d)
+ {
+ return true;
+ }
+ }
+}
+
Added: trunk/extensions/SmugMugExport/SmugMugNet/SmugMugApi.cs
==============================================================================
--- (empty file)
+++ trunk/extensions/SmugMugExport/SmugMugNet/SmugMugApi.cs Fri Feb 8 14:42:33 2008
@@ -0,0 +1,452 @@
+/*
+ * SmugMugApi.cs
+ *
+ * Authors:
+ * Thomas Van Machelen <thomas vanmachelen gmail com>
+ *
+ * Copyright (C) 2006 Thomas Van Machelen
+ * This is free software. See COPYING for details.
+ *
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Net;
+using System.IO;
+using System.Xml;
+using System.Collections.Specialized;
+
+namespace SmugMugNet
+{
+ public struct Credentials
+ {
+ public string session_id;
+ public int user_id;
+ public string password_hash;
+
+ public string SessionID {
+ get { return session_id; }
+ set { session_id = value; }
+ }
+
+ public int UserID {
+ get { return user_id; }
+ }
+
+ public string PasswordHash {
+ get { return password_hash; }
+ }
+
+ public Credentials(string session_id, int user_id, string password_hash)
+ {
+ this.session_id = session_id;
+ this.user_id = user_id;
+ this.password_hash = password_hash;
+ }
+ }
+
+ public struct Category
+ {
+ public Category( string title, int id)
+ {
+ this.title = title;
+ this.category_id = id;
+ }
+
+ private int category_id;
+ public int CategoryID
+ {
+ get { return category_id; }
+ set { category_id = value; }
+ }
+
+ private string title;
+ public string Title
+ {
+ get { return title; }
+ set { title = value; }
+ }
+ }
+
+ public struct Album
+ {
+ public Album(string title, int id)
+ {
+ this.album_id = id;
+ this.title = title;
+ }
+
+ private int album_id;
+ public int AlbumID
+ {
+ get { return album_id; }
+ set { album_id = value; }
+ }
+
+ private string title;
+ public string Title
+ {
+ get { return title; }
+ set { title = value; }
+ }
+ }
+
+ public class SmugMugApi
+ {
+ private string username = String.Empty;
+ private string password = String.Empty;
+ private bool connected = false;
+
+ private Credentials credentials;
+ private const string VERSION = "1.1.1";
+ private Category[] categories;
+
+ public SmugMugApi (string email_address, string password)
+ {
+ this.username = email_address;
+ this.password = password;
+ }
+
+ public bool Login ()
+ {
+ if (this.username.Length == 0 | this.password.Length == 0)
+ {
+ throw new SmugMugException("There is no username or password.");
+ }
+
+ if (this.connected == false && this.credentials.UserID == 0)
+ {
+ try
+ {
+ this.credentials = SmugMugProxy.LoginWithPassword (this.username, this.password);
+ this.connected = true;
+ }
+ catch
+ {
+ return false;
+ }
+ }
+ else
+ {
+ LoginWithHash ();
+ }
+
+ return true;
+ }
+
+ private void LoginWithHash ()
+ {
+ try {
+ string session_id = SmugMugProxy.LoginWithHash (this.credentials.UserID, this.credentials.PasswordHash);
+
+ if (session_id != null && session_id.Length > 0)
+ {
+ this.credentials.SessionID = session_id;
+ }
+ else
+ {
+ throw new SmugMugException ("SessionID was empty");
+ }
+ }
+ catch (Exception ex) {
+ throw new SmugMugException ("A login error occured, SessionID may be invalid.", ex.InnerException);
+ }
+ }
+
+ public void Logout ()
+ {
+ if (!connected)
+ return;
+
+ if (this.credentials.SessionID == null && this.credentials.SessionID.Length == 0)
+ return;
+
+ SmugMugProxy.Logout (this.credentials.SessionID);
+ connected = false;
+ this.credentials = new Credentials (null, 0, null);
+ }
+
+ public Category[] GetCategories ()
+ {
+ if (this.categories == null)
+ {
+ try {
+ this.categories = SmugMugProxy.GetCategories (credentials.SessionID);
+ }
+ catch (Exception ex) {
+ throw new SmugMugException ("Could not retrieve Categories", ex.InnerException);
+ }
+ }
+ return this.categories;
+ }
+
+ public Album CreateAlbum (string title, int category_id, bool is_public)
+ {
+ try {
+ return SmugMugProxy.CreateAlbum (title, category_id, credentials.SessionID, is_public);
+ }
+ catch (Exception ex) {
+ throw new SmugMugException ("Could not create album", ex.InnerException);
+ }
+ }
+
+ public Album[] GetAlbums ()
+ {
+ try {
+ return SmugMugProxy.GetAlbums(credentials.SessionID);
+ }
+ catch (Exception ex) {
+ throw new SmugMugException ("Could not get albums", ex.InnerException);
+ }
+ }
+
+ public Uri GetAlbumUrl (int image_id)
+ {
+ try {
+ return SmugMugProxy.GetAlbumUrl (image_id, credentials.SessionID);
+ }
+ catch (Exception ex) {
+ throw new SmugMugException ("Could not get album url", ex.InnerException);
+ }
+ }
+
+ public int Upload (string path, int album_id)
+ {
+ try {
+ return SmugMugProxy.Upload (path, album_id, credentials.SessionID);
+ }
+ catch (Exception ex) {
+ throw new SmugMugException ("Could not upload file", ex.InnerException);
+ }
+ }
+ }
+
+ public class SmugMugProxy
+ {
+ // FIXME: this getting should be done over https
+ private const string GET_URL = "https://api.SmugMug.com/hack/rest/";
+ private const string POST_URL = "https://upload.SmugMug.com/hack/rest/";
+ // key from massis
+ private const string APIKEY = "umtr0zB2wzwTZDhF2BySidg0hY0le3K6";
+ private const string VERSION = "1.1.1";
+
+ // rest methods
+ private const string LOGIN_WITHPASS_METHOD = "smugmug.login.withPassword";
+ private const string LOGIN_WITHHASH_METHOD = "smugmug.login.withHash";
+ private const string LOGOUT_METHOD = "smugmug.logout";
+ private const string ALBUMS_CREATE_METHOD = "smugmug.albums.create";
+ private const string ALBUMS_GET_URLS_METHOD = "smugmug.images.getURLs";
+ private const string ALBUMS_GET_METHOD = "smugmug.albums.get";
+ private const string CATEGORIES_GET_METHOD = "smugmug.categories.get";
+
+ // parameter constants
+ private const string EMAIL = "EmailAddress";
+ private const string PASSWORD = "Password";
+ private const string USER_ID = "UserID";
+ private const string PASSWORD_HASH = "PasswordHash";
+ private const string SESSION_ID = "SessionID";
+ private const string CATEGORY_ID = "CategoryID";
+ private const string IMAGE_ID = "ImageID";
+ private const string TITLE = "Title";
+ private const string ID = "id";
+
+ public static Credentials LoginWithPassword (string username, string password)
+ {
+ string url = FormatGetUrl (LOGIN_WITHPASS_METHOD, new SmugMugParam (EMAIL, username), new SmugMugParam (PASSWORD, password));
+ XmlDocument doc = GetResponseXml (url);
+
+ string sessionId = doc.SelectSingleNode ("/rsp/Login/SessionID").InnerText;
+ int userId = int.Parse (doc.SelectSingleNode ("/rsp/Login/UserID").InnerText);
+ string passwordHash = doc.SelectSingleNode ("/rsp/Login/PasswordHash").InnerText;
+
+ return new Credentials (sessionId, userId, passwordHash);
+ }
+
+ public static string LoginWithHash (int user_id, string password_hash)
+ {
+ string url = FormatGetUrl (LOGIN_WITHHASH_METHOD, new SmugMugParam (USER_ID, user_id), new SmugMugParam (PASSWORD_HASH, password_hash));
+ XmlDocument doc = GetResponseXml(url);
+
+ return doc.SelectSingleNode ("/rsp/Login/SessionID").InnerText;
+ }
+
+ public static void Logout (string session_id)
+ {
+ string url = FormatGetUrl (LOGOUT_METHOD, new SmugMugParam (SESSION_ID, session_id));
+ GetResponseXml (url);
+ }
+
+ public static Album[] GetAlbums (string session_id)
+ {
+ string url = FormatGetUrl (ALBUMS_GET_METHOD, new SmugMugParam(SESSION_ID, session_id));
+ XmlDocument doc = GetResponseXml (url);
+ XmlNodeList albumNodes = doc.SelectNodes ("/rsp/Albums/Album");
+
+ Album[] albums = new Album[albumNodes.Count];
+
+ for (int i = 0; i < albumNodes.Count; i++)
+ {
+ XmlNode current = albumNodes[i];
+ albums[i] = new Album (current.SelectSingleNode (TITLE).InnerText, int.Parse (current.Attributes[ID].Value));
+ }
+ return albums;
+ }
+
+ public static Uri GetAlbumUrl (int image_id, string session_id)
+ {
+ string url = FormatGetUrl(ALBUMS_GET_URLS_METHOD, new SmugMugParam(IMAGE_ID, image_id), new SmugMugParam(SESSION_ID, session_id));
+ XmlDocument doc = GetResponseXml(url);
+
+ string album_url = doc.SelectSingleNode("/rsp/ImageURLs/Image/AlbumURL").InnerText;
+
+ return new Uri(album_url);
+ }
+
+ public static Category[] GetCategories (string session_id)
+ {
+ string url = FormatGetUrl(CATEGORIES_GET_METHOD, new SmugMugParam (SESSION_ID, session_id));
+ XmlDocument doc = GetResponseXml (url);
+
+ XmlNodeList categoryNodes = doc.SelectNodes ("/rsp/Categories/Category");
+ Category[] categories = new Category[categoryNodes.Count];
+
+ for (int i = 0; i < categoryNodes.Count; i++)
+ {
+ XmlNode current = categoryNodes[i];
+ categories[i] = new Category (current.SelectSingleNode (TITLE).InnerText, int.Parse (current.Attributes[ID].Value));
+ }
+ return categories;
+ }
+
+ public static Album CreateAlbum (string title, int category_id, string session_id)
+ {
+ return CreateAlbum (title, category_id, session_id, true);
+ }
+
+ public static Album CreateAlbum (string title, int category_id, string session_id, bool is_public)
+ {
+ int public_int = is_public ? 1 : 0;
+ string url = FormatGetUrl (ALBUMS_CREATE_METHOD, new SmugMugParam (TITLE, title), new SmugMugParam (CATEGORY_ID, category_id), new SmugMugParam (SESSION_ID, session_id), new SmugMugParam ("Public", public_int));
+ XmlDocument doc = GetResponseXml (url);
+
+ int id = int.Parse(doc.SelectSingleNode("/rsp/Create/Album").Attributes[ID].Value);
+
+ return new Album(title, id);
+ }
+
+ public static int Upload (string path, int album_id, string session_id)
+ {
+ FileInfo file = new FileInfo(path);
+
+ if (!file.Exists)
+ throw new ArgumentException("Image does not exist: " + file.FullName);
+
+ try
+ {
+ WebClient client = new WebClient ();
+ client.BaseAddress = "http://upload.smugmug.com";
+ client.Headers.Add ("Cookie:SMSESS=" + session_id);
+
+ NameValueCollection queryStringCollection = new NameValueCollection ();
+ queryStringCollection.Add ("AlbumID", album_id.ToString());
+ queryStringCollection.Add ("ResponseType", "REST");
+ client.QueryString = queryStringCollection;
+
+ byte[] responseArray = client.UploadFile ("http://upload.smugmug.com/photos/xmladd.mg", "POST", file.FullName);
+ string response = Encoding.ASCII.GetString (responseArray);
+
+ XmlDocument doc = new XmlDocument ();
+ doc.LoadXml (response);
+
+ return int.Parse (doc.SelectSingleNode ("/rsp/ImageID").InnerText);
+ }
+ catch (Exception ex)
+ {
+ throw new SmugMugUploadException ("Error uploading image: " + file.FullName, ex.InnerException);
+ }
+ }
+
+ private static string FormatGetUrl(string method_name, params SmugMugParam[] parameters)
+ {
+ StringBuilder builder = new StringBuilder (string.Format ("{0}{1}/?method={2}", GET_URL, VERSION, method_name));
+
+ foreach (SmugMugParam param in parameters)
+ builder.Append (param.ToString ());
+
+ builder.Append (new SmugMugParam ("APIKey", APIKEY));
+ return builder.ToString();
+ }
+
+ private static XmlDocument GetResponseXml (string url)
+ {
+ HttpWebRequest request = HttpWebRequest.Create (url) as HttpWebRequest;
+ request.Credentials = CredentialCache.DefaultCredentials;
+ WebResponse response = request.GetResponse ();
+
+ XmlDocument doc = new XmlDocument ();
+ doc.LoadXml (new StreamReader (response.GetResponseStream ()).ReadToEnd ());
+ CheckResponseXml (doc);
+
+ response.Close ();
+ return doc;
+ }
+
+ private static void CheckResponseXml (XmlDocument doc)
+ {
+ if (doc.SelectSingleNode("/rsp").Attributes["stat"].Value == "ok")
+ return;
+
+ string message = doc.SelectSingleNode ("/rsp/err").Attributes["msg"].Value;
+ throw new SmugMugException (message);
+ }
+
+ private class SmugMugParam
+ {
+ string name;
+ object value;
+
+ public SmugMugParam (string name, object value)
+ {
+ this.name = name;
+ this.value = value;
+ }
+
+ public string Name
+ {
+ get {return name;}
+ }
+
+ public object Value
+ {
+ get {return value;}
+ }
+
+ public override string ToString()
+ {
+ return string.Format("&{0}={1}", Name, Value);
+ }
+ }
+ }
+
+ public class SmugMugException : ApplicationException
+ {
+ public SmugMugException(string message) : base (message)
+ {
+ Console.WriteLine (message);
+ }
+
+ public SmugMugException (string message, Exception innerException) : base (message, innerException)
+ {
+ Console.WriteLine (message, innerException.ToString());
+ }
+ }
+
+ public sealed class SmugMugUploadException : ApplicationException
+ {
+ public SmugMugUploadException (string message, Exception innerException) : base (message, innerException)
+ {
+ Console.WriteLine (message, innerException.ToString ());
+ }
+ }
+}
Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am (original)
+++ trunk/src/Makefile.am Fri Feb 8 14:42:33 2008
@@ -208,7 +208,6 @@
$(srcdir)/SlideView.cs \
$(srcdir)/SingleView.cs \
$(srcdir)/SimpleCalendar.cs \
- $(srcdir)/SmugMugExport.cs \
$(srcdir)/TagCommands.cs \
$(srcdir)/TagMenu.cs \
$(srcdir)/TagPopup.cs \
Modified: trunk/src/f-spot.glade
==============================================================================
--- trunk/src/f-spot.glade (original)
+++ trunk/src/f-spot.glade Fri Feb 8 14:42:33 2008
@@ -9150,660 +9150,4 @@
</widget>
</child>
</widget>
- <widget class="GtkDialog" id="smugmug_export_dialog">
- <property name="title" translatable="yes">Export</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="vbox88">
- <property name="visible">True</property>
- <child>
- <widget class="GtkHBox" id="hbox91">
- <property name="visible">True</property>
- <property name="border_width">6</property>
- <child>
- <widget class="GtkFrame" id="frame50">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment67">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkScrolledWindow" id="thumb_scrolledwindow">
- <property name="width_request">180</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
- <property name="shadow_type">GTK_SHADOW_IN</property>
- <child>
- <placeholder/>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label220">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Photos</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkVBox" id="vbox89">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkFrame" id="frame51">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment68">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox90">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox92">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkLabel" id="gallery_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Account:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">gallery_optionmenu</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkOptionMenu" id="gallery_optionmenu">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="response_id">0</property>
- <signal name="changed" handler="HandleAccountSelected"/>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="gallery_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-add</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="HandleAddGallery"/>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="edit_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-edit</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label222">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label223">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>SmugMug Export</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkFrame" id="frame52">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment69">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox91">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox93">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkLabel" id="album_label">
- <property name="visible">True</property>
- <property name="label" translatable="yes">_Export to Album:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">album_optionmenu</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkOptionMenu" id="album_optionmenu">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="response_id">0</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="album_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-add</property>
- <property name="use_stock">True</property>
- <property name="response_id">0</property>
- <signal name="clicked" handler="HandleAddAlbum"/>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkCheckButton" id="browser_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Open _album in browser when done uploading</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="active">True</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label225">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Album</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkFrame" id="frame53">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">GTK_SHADOW_NONE</property>
- <child>
- <widget class="GtkAlignment" id="alignment70">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <widget class="GtkVBox" id="vbox92">
- <property name="visible">True</property>
- <property name="spacing">6</property>
- <child>
- <widget class="GtkHBox" id="hbox94">
- <property name="visible">True</property>
- <child>
- <widget class="GtkCheckButton" id="scale_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">_Resize to: </property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="HandleSizeActive"/>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- <child>
- <widget class="GtkSpinButton" id="size_spin">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="adjustment">400 0 10000 1 10 10</property>
- <property name="climb_rate">1</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label226">
- <property name="visible">True</property>
- <property name="label" translatable="yes">pixels</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkCheckButton" id="rotate_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Autorotate</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- </child>
- <child>
- <widget class="GtkLabel" id="label227">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Style</b></property>
- <property name="use_markup">True</property>
- </widget>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="hbuttonbox14">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="cancel_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
- <child>
- <widget class="GtkButton" id="export_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">_Export</property>
- <property name="use_underline">True</property>
- <property name="response_id">-5</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <widget class="GtkDialog" id="smugmug_add_album_dialog">
- <property name="visible">True</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="vbox93">
- <property name="visible">True</property>
- <child>
- <widget class="GtkTable" id="table26">
- <property name="visible">True</property>
- <property name="border_width">12</property>
- <property name="n_rows">3</property>
- <property name="n_columns">2</property>
- <property name="column_spacing">7</property>
- <property name="row_spacing">6</property>
- <child>
- <placeholder/>
- </child>
- <child>
- <widget class="GtkLabel" id="category_label">
- <property name="visible">True</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">_Description:</property>
- <property name="use_underline">True</property>
- </widget>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="name_label">
- <property name="visible">True</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">_Album Title:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">title_entry</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="title_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">*</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkCheckButton" id="public_check">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Public Album</property>
- <property name="use_underline">True</property>
- <property name="response_id">0</property>
- <property name="draw_indicator">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkComboBox" id="category_combo">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="hbuttonbox15">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="cancele_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
- <child>
- <widget class="GtkButton" id="add_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="label">gtk-add</property>
- <property name="use_stock">True</property>
- <property name="response_id">-5</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
- <widget class="GtkDialog" id="smugmug_add_dialog">
- <property name="visible">True</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="has_separator">False</property>
- <child internal-child="vbox">
- <widget class="GtkVBox" id="vbox97">
- <property name="visible">True</property>
- <child>
- <widget class="GtkVBox" id="vbox98">
- <property name="visible">True</property>
- <child>
- <widget class="GtkTable" id="table28">
- <property name="visible">True</property>
- <property name="border_width">12</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <property name="column_spacing">7</property>
- <property name="row_spacing">6</property>
- <child>
- <widget class="GtkLabel" id="password_label">
- <property name="visible">True</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">_Password:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">password_entry</property>
- </widget>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="password_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="visibility">False</property>
- <property name="invisible_char">*</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="username_label">
- <property name="visible">True</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">_Username:</property>
- <property name="use_underline">True</property>
- <property name="mnemonic_widget">username_entry</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="username_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="invisible_char">*</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="hbuttonbox16">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
- <child>
- <widget class="GtkButton" id="cancel_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
- <child>
- <widget class="GtkButton" id="remove_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="label">gtk-remove</property>
- <property name="use_stock">True</property>
- <property name="response_id">-2</property>
- </widget>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkButton" id="add_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="label">gtk-add</property>
- <property name="use_stock">True</property>
- <property name="response_id">-5</property>
- </widget>
- <packing>
- <property name="position">2</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
- </widget>
- </child>
- </widget>
</glade-interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]