source: libmono-lliurex-utils/trunk/libmono-lliurex-utils/CopyFiles.cs @ 341

Last change on this file since 341 was 341, checked in by mabarracus, 5 years ago

ported pandora code

File size: 7.9 KB
Line 
1
2using System;
3
4namespace lliurex
5{
6
7        namespace utils
8        {
9                       
10                namespace IO
11                {
12               
13                        public class CopyFiles
14                        {
15               
16                                private int file_number;
17                                private int copied_files=0;
18                                private double percentage=0;
19                                private string file;
20                               
21                                private Gtk.Window dialog2;
22               
23                                // DIALOG WIDGETS //           
24               
25                        private Gtk.VBox vbox1;
26                       
27                        private Gtk.Frame frame1;
28                       
29                        private Gtk.Alignment GtkAlignment;
30                       
31                        private Gtk.VBox vbox2;
32                       
33                        private Gtk.HBox hbox1;
34                       
35                        private Gtk.Label copyLabel;
36                       
37                        private Gtk.ProgressBar progressbar1;
38                       
39                        private Gtk.Label frameLabel;
40                               
41                                // *************** //
42               
43                                private string damnwarning;
44                               
45                                public CopyFiles ()
46                                {
47                                        file_number=0;
48                                       
49                                        Build(); // build dialog window
50               
51                                }
52                               
53                                protected virtual void Build() {
54                            dialog2= new Gtk.Window("Copying files...");
55                            // Widget copy.CopyWidget
56                            dialog2.Name = "copy.CopyWidget";
57                            dialog2.Title = Mono.Unix.Catalog.GetString("CopyWidget");
58                            dialog2.WindowPosition = ((Gtk.WindowPosition)(3));
59                            // Container child copy.CopyWidget.Gtk.Container+ContainerChild
60                            this.vbox1 = new Gtk.VBox();
61                            this.vbox1.Name = "vbox1";
62                            this.vbox1.Spacing = 6;
63                            // Container child vbox1.Gtk.Box+BoxChild
64                            this.frame1 = new Gtk.Frame();
65                            this.frame1.Name = "frame1";
66                            this.frame1.ShadowType = ((Gtk.ShadowType)(2));
67                            this.frame1.LabelXalign = 1F;
68                            this.frame1.BorderWidth = ((uint)(6));
69                            // Container child frame1.Gtk.Container+ContainerChild
70                            this.GtkAlignment = new Gtk.Alignment(0F, 0F, 1F, 1F);
71                            this.GtkAlignment.Name = "GtkAlignment";
72                            this.GtkAlignment.LeftPadding = ((uint)(12));
73                            this.GtkAlignment.TopPadding = ((uint)(6));
74                            this.GtkAlignment.RightPadding = ((uint)(10));
75                            this.GtkAlignment.BottomPadding = ((uint)(10));
76                            // Container child GtkAlignment.Gtk.Container+ContainerChild
77                            this.vbox2 = new Gtk.VBox();
78                            this.vbox2.Name = "vbox2";
79                            this.vbox2.Spacing = 6;
80                            // Container child vbox2.Gtk.Box+BoxChild
81                            this.hbox1 = new Gtk.HBox();
82                            this.hbox1.Name = "hbox1";
83                            this.hbox1.Spacing = 6;
84                            // Container child hbox1.Gtk.Box+BoxChild
85                            this.copyLabel = new Gtk.Label();
86                            this.copyLabel.Name = "copyLabel";
87                            this.copyLabel.LabelProp = Mono.Unix.Catalog.GetString("label2");
88                            this.hbox1.Add(this.copyLabel);
89                            Gtk.Box.BoxChild w1 = ((Gtk.Box.BoxChild)(this.hbox1[this.copyLabel]));
90                            w1.Position = 0;
91                            w1.Expand = false;
92                            w1.Fill = false;
93                            this.vbox2.Add(this.hbox1);
94                            Gtk.Box.BoxChild w2 = ((Gtk.Box.BoxChild)(this.vbox2[this.hbox1]));
95                            w2.Position = 0;
96                            w2.Expand = false;
97                            w2.Fill = false;
98                            // Container child vbox2.Gtk.Box+BoxChild
99                            this.progressbar1 = new Gtk.ProgressBar();
100                            this.progressbar1.Name = "progressbar1";
101                            this.vbox2.Add(this.progressbar1);
102                            Gtk.Box.BoxChild w3 = ((Gtk.Box.BoxChild)(this.vbox2[this.progressbar1]));
103                            w3.Position = 1;
104                            w3.Expand = false;
105                            w3.Fill = false;
106                            this.GtkAlignment.Add(this.vbox2);
107                            this.frame1.Add(this.GtkAlignment);
108                            this.frameLabel = new Gtk.Label();
109                            this.frameLabel.Name = "frameLabel";
110                            this.frameLabel.Xpad = 8;
111                            this.frameLabel.LabelProp = Mono.Unix.Catalog.GetString("<b>GtkFrame</b>");
112                            this.frameLabel.UseMarkup = true;
113                            this.frame1.LabelWidget = this.frameLabel;
114                            this.vbox1.Add(this.frame1);
115                            Gtk.Box.BoxChild w6 = ((Gtk.Box.BoxChild)(this.vbox1[this.frame1]));
116                            w6.Position = 0;
117                            w6.Expand = false;
118                            w6.Fill = false;
119                            dialog2.Add(this.vbox1);
120                            if ((dialog2.Child != null)) {
121                                dialog2.Child.ShowAll();
122                            }
123                            dialog2.DefaultWidth = 400;
124                            dialog2.DefaultHeight = 100;
125                         //   dialog2.Show();
126                        }
127                               
128               
129                               
130                                private void updateProgressBar()
131                                {
132                                        progressbar1.Text=System.Convert.ToString(percentage) + "%";
133                                        progressbar1.Fraction=percentage/100;                           
134                                        copyLabel.Text=file;
135                                       
136                                        if (copied_files==file_number)
137                                        {
138                                                file_number=0;
139                                                copied_files=0;
140                                                percentage=0;
141                                                dialog2.Destroy();
142                                                Build();
143                                               
144                                        }
145                                }               
146                               
147                                private void countFiles(string path)
148                                {
149                                       
150                                        System.IO.DirectoryInfo dinfo=new System.IO.DirectoryInfo(path);
151                                       
152                                        System.IO.DirectoryInfo[] dlist=dinfo.GetDirectories();
153                                        System.IO.FileInfo[] flist=dinfo.GetFiles();
154                                       
155                                        foreach(System.IO.DirectoryInfo info in dlist)
156                                        {
157                                                countFiles(info.FullName);     
158                                        }
159                                        foreach(System.IO.FileInfo info in flist)
160                                        {
161                                                damnwarning=info.FullName;
162                                                file_number++; 
163                                        }
164                                       
165                                       
166                                }
167                               
168                                public void copyDirectory(string source, string destiny)
169                                {
170                                        /*
171                                        dialog=new CopyWidget();
172                                        dialog.Title="Copying files...";
173                                        dialog.frameLabelText="<b>Copying " + source + " to " + destiny + "</b>";
174                                        dialog.Show();
175                                       
176                                       
177                                        int index=source.LastIndexOf("/");
178                                        string tmp_destiny=destiny + "/" + source.Substring(index+1);
179                                        System.IO.Directory.CreateDirectory(tmp_destiny);
180                                               
181                                        countFiles(source);
182                               
183                                        System.Threading.ThreadStart tStart;
184                                        System.Threading.Thread tThread;
185                               
186                               
187                               
188                                        tStart = delegate {
189                                                        copy_directory("/home/hector/Téléchargement","/tmp/Téléchargement");
190                                        };
191                                        tThread= new System.Threading.Thread(tStart);
192                                        tThread.Start();                       
193                                        */
194                                       
195                                        countFiles(source);
196                                       
197                                        dialog2.Title="Copying files...";
198                                        frameLabel.Markup="<b>Copying " + source + " to " + destiny + "</b>";
199                                        dialog2.Show();
200                                       
201                                        // CREATING BASE DIRECTORY
202                                       
203                                        int index=source.LastIndexOf("/");
204                                        string tmp_destiny=destiny + "/" + source.Substring(index+1);
205                                        System.IO.Directory.CreateDirectory(tmp_destiny);                       
206                                       
207                                        // ************************
208                                       
209                                       
210                                       
211                                        System.Threading.ThreadStart tStart;
212                                        System.Threading.Thread tThread;
213                                        tStart = delegate { 
214                                                        copy_directory(source,tmp_destiny); 
215                                        };
216                                        tThread= new System.Threading.Thread(tStart);
217                                        tThread.Start();                       
218                                       
219               
220                                       
221                                }
222               
223                               
224                                private void copy_directory(string source, string destiny)
225                                {
226                                        try 
227                                        {
228               
229                                                System.IO.DirectoryInfo dinfo=new System.IO.DirectoryInfo(source);
230                                               
231                                                System.IO.DirectoryInfo[] dlist=dinfo.GetDirectories();
232                                                System.IO.FileInfo[] flist=dinfo.GetFiles();
233                                               
234                                                foreach(System.IO.DirectoryInfo info in dlist)
235                                                {
236                                                        string tmp_destiny=destiny + "/" + info.Name;
237                                                        Console.WriteLine("Creating directory {0}",tmp_destiny);
238                                                        System.IO.Directory.CreateDirectory(tmp_destiny);
239                                                        copy_directory(info.FullName,tmp_destiny);
240                                                }
241                                                foreach(System.IO.FileInfo info in flist)
242                                                {
243                                                        string tmp_destiny=destiny + "/" + info.Name;
244                                               
245                                                        Console.WriteLine("\tCopying {0} in {1}",info.FullName,tmp_destiny);
246                                                       
247                                                        System.IO.File.Copy(info.FullName,tmp_destiny);
248                                                        copied_files++;
249                                                       
250                                                        percentage=100*copied_files/file_number;
251                                                       
252                                                        file=tmp_destiny;
253                                                       
254                                                        Gtk.Application.Invoke(delegate 
255                                                        {
256                                                                updateProgressBar();
257                                                               
258                                                        });
259                                                               
260                                                       
261                                                }
262                                                Gtk.Application.Invoke(delegate 
263                                                        {
264                                                                updateProgressBar();
265                                                               
266                                                        });
267                                       
268                                        }
269                                        catch
270                                        {
271                                                Console.WriteLine("TO DO");     
272                                        }
273                                       
274                                       
275                                }               
276                               
277                               
278                               
279                               
280                               
281                               
282                        }
283                }
284        }
285}
Note: See TracBrowser for help on using the repository browser.