Exemple #1
0
        public void Transfer()
        {
            try {
                bool result = true;

                if (clean)
                {
                    Clean(dest);
                }

                foreach (IPhoto photo in selection.Items)
                {
                    //FIXME need to implement the uniquename as a filter
                    using (FilterRequest request = new FilterRequest(photo.DefaultVersion.Uri)) {
                        GLib.File            source = FileFactory.NewForUri(request.Current.ToString());
                        GLib.File            target = UniqueName(dest, photo.Name);
                        FileProgressCallback cb     = Progress;

                        progress_dialog.Message      = string.Format(Catalog.GetString("Transferring picture \"{0}\" To CD"), photo.Name);
                        progress_dialog.Fraction     = photo_index / (double)selection.Count;
                        progress_dialog.ProgressText = string.Format(Catalog.GetString("{0} of {1}"),
                                                                     photo_index, selection.Count);

                        result &= source.Copy(target,
                                              FileCopyFlags.None,
                                              null,
                                              cb);
                    }
                    photo_index++;
                }

                // FIXME the error dialog here is ugly and needs improvement when strings are not frozen.
                if (result)
                {
                    progress_dialog.Message      = Catalog.GetString("Done Sending Photos");
                    progress_dialog.Fraction     = 1.0;
                    progress_dialog.ProgressText = Catalog.GetString("Transfer Complete");
                    progress_dialog.ButtonLabel  = Gtk.Stock.Ok;
                    progress_dialog.Hide();
                    burner.Run();
                }
                else
                {
                    throw new Exception(string.Format("{0}{3}{1}{3}{2}",
                                                      progress_dialog.Message,
                                                      Catalog.GetString("Error While Transferring"),
                                                      result.ToString(),
                                                      Environment.NewLine));
                }
            } catch (Exception e) {
                Hyena.Log.DebugException(e);
                progress_dialog.Message      = e.ToString();
                progress_dialog.ProgressText = Catalog.GetString("Error Transferring");
                return;
            }
            ThreadAssist.ProxyToMain(() => {
                progress_dialog.Destroy();
            });
        }
        public void Transfer()
        {
            try {
#if GIO_2_16
                bool result = true;
#else
                Gnome.Vfs.Result result = Gnome.Vfs.Result.Ok;
#endif

                if (clean)
#if GIO_2_16
                { Clean(dest); }
#else
                { Clean(); }
#endif

                foreach (IBrowsableItem photo in selection.Items)
                {
                    //FIXME need to implement the uniquename as a filter
                    using (FilterRequest request = new FilterRequest(photo.DefaultVersionUri)) {
                        if (rotate)
                        {
                            new OrientationFilter().Convert(request);
                        }

#if GIO_2_16
                        GLib.File source = FileFactory.NewForUri(request.Current.ToString());
#else
                        Gnome.Vfs.Uri source = new Gnome.Vfs.Uri(request.Current.ToString());
                        Gnome.Vfs.Uri target = dest.Clone();
#endif
#if GIO_2_16
                        GLib.File            target = UniqueName(dest, photo.Name);
                        FileProgressCallback cb     = Progress;
#else
                        target = UniqueName(target, photo.Name);
                        Gnome.Vfs.XferProgressCallback cb = new Gnome.Vfs.XferProgressCallback(Progress);
#endif

                        progress_dialog.Message      = System.String.Format(Catalog.GetString("Transferring picture \"{0}\" To CD"), photo.Name);
                        progress_dialog.Fraction     = photo_index / (double)selection.Count;
                        progress_dialog.ProgressText = System.String.Format(Catalog.GetString("{0} of {1}"),
                                                                            photo_index, selection.Count);

#if GIO_2_16
                        result &= source.Copy(target,
                                              FileCopyFlags.None,
                                              null,
                                              cb);
#else
                        result = Gnome.Vfs.Xfer.XferUri(source, target,
                                                        Gnome.Vfs.XferOptions.Default,
                                                        Gnome.Vfs.XferErrorMode.Abort,
                                                        Gnome.Vfs.XferOverwriteMode.Replace,
                                                        cb);
#endif
                    }
                    photo_index++;
                }

                // FIXME the error dialog here is ugly and needs improvement when strings are not frozen.
#if GIO_2_16
                if (result)
                {
#else
                if (result == Gnome.Vfs.Result.Ok)
                {
#endif
                    progress_dialog.Message      = Catalog.GetString("Done Sending Photos");
                    progress_dialog.Fraction     = 1.0;
                    progress_dialog.ProgressText = Catalog.GetString("Transfer Complete");
                    progress_dialog.ButtonLabel  = Gtk.Stock.Ok;
                    progress_dialog.Hide();
                    system("nautilus-cd-burner");
                }
                else
                {
                    throw new System.Exception(System.String.Format("{0}{3}{1}{3}{2}",
                                                                    progress_dialog.Message,
                                                                    Catalog.GetString("Error While Transferring"),
                                                                    result.ToString(),
                                                                    System.Environment.NewLine));
                }
            } catch (System.Exception e) {
                progress_dialog.Message      = e.ToString();
                progress_dialog.ProgressText = Catalog.GetString("Error Transferring");
                return;
            }
            Gtk.Application.Invoke(this.Destroy);
        }
Exemple #3
0
        static void Recursive_Copy(GLib.File source, GLib.File dest, FileCopyFlags flags, ref long copiedBytes, long totalBytes, FileProgressCallback progress_cb)
        {
            if (IO.File.Exists(source.Path))
            {
                source.Copy(dest, flags, null, (current, total) => {
                    progress_cb.Invoke(current, totalBytes);
                });
                return;
            }

            foreach (GLib.File subdir in source.SubDirs())
            {
                dest.GetChild(subdir.Basename).MakeDirectoryWithParents(null);
                // if it's a directory, continue the recursion
                Recursive_Copy(subdir, dest.GetChild(subdir.Basename), flags, ref copiedBytes, totalBytes, progress_cb);
            }

            foreach (File child in source.GetFiles())
            {
                long copied = copiedBytes;

                child.Copy(dest.GetChild(child.Basename), flags, null, (current, total) => {
                    progress_cb.Invoke(copied + current, totalBytes);
                });
                copiedBytes += child.GetSize();
            }
        }
Exemple #4
0
        // This is the recursive equivalent of GLib.File.Copy ()
        /// <summary>
        /// Recursive equivalent to GLib.File.Copy () when called on a directory.
        /// Functionally equivalent to GLib.File.Copy () when called on files.
        /// </summary>
        /// <param name="source">
        /// A <see cref="GLib.File"/>
        /// </param>
        /// <param name="dest">
        /// A <see cref="GLib.File"/>
        /// </param>
        /// <param name="flags">
        /// A <see cref="FileCopyFlags"/>
        /// </param>
        /// <param name="progress_cb">
        /// A <see cref="FileProgressCallback"/>
        /// </param>
        public static void Copy_Recurse(this GLib.File source, GLib.File dest, FileCopyFlags flags, FileProgressCallback progress_cb)
        {
            long totalBytes  = source.GetSize();
            long copiedBytes = 0;

            Recursive_Copy(source, dest, flags, ref copiedBytes, totalBytes, progress_cb);
        }