00001
00009 #include <gtk/gtk.h>
00010 #include<sqlite3.h>
00011 #include <unistd.h>
00012 #include <stdio.h>
00013 #include <stdlib.h>
00014 #include <string.h>
00015 #include <strings.h>
00016 #include <sys/socket.h>
00017 #include <sys/types.h>
00018 #include <time.h>
00019 #include <signal.h>
00020 #include <poll.h>
00021 #include <pthread.h>
00022 #include <sys/socket.h>
00023 #include <sys/types.h>
00024 #include <netinet/in.h>
00025 #include <netdb.h>
00026 #include <unistd.h>
00027 #include <errno.h>
00028 #include<time.h>
00029 #include <fcntl.h>
00030 #include <arpa/inet.h>
00031 #include <netinet/in.h>
00032
00033 #include "stack.h"
00034
00035 #define SIZE 5000
00036 #define BUFFERSIZE 4096
00037 #define BUFFER 4096
00038
00042 typedef struct
00043 {
00044 int id;
00045 char request[SIZE];
00046 char filename[SIZE];
00047 char fname[SIZE];
00048 char fpath[SIZE];
00049 char host[SIZE];
00050 }download_details;
00051
00052 download_details reqarray[10];
00053
00054
00055 sqlite3 *database1,*database2;
00056 char tempvalue[50];
00057
00058
00059 char proxy[SIZE];
00060 char port[SIZE];
00061 char dpath[SIZE];
00062 char display[SIZE];
00063 char tempbreak[SIZE];
00064 pthread_t threadid[SIZE];
00065 char host[200];
00066 Stack s1;
00067 char downloadpath[5][1000];
00068 int flag[5]={0,0,0,0,0};
00069 int fd[SIZE];
00070 int notfound;
00071 char finalname[SIZE];
00072 int forbidden;
00073 char remains[5000];
00074 int gateway;
00075 int moved;
00076 int bad;
00077 int goingon[5];
00078
00079
00080 GtkWidget *menupane;
00081 GtkWidget *framedownload;
00082 GtkWidget *top_Level_Main_Window;
00083 GtkWidget *filemenu;
00084 GtkWidget *menu;
00085 GtkWidget *editmenu;
00086 GtkWidget *temp;
00087 GtkWidget *newdownloadmenu;
00088 GtkWidget *hpaneforprogressbar;
00089 GtkWidget *submenuforfile;
00090 GtkWidget *setproxymenu;
00091 GtkWidget *helpmenu;
00092 GtkWidget *submenuforhelp;
00093 GtkWidget *help;
00094 GtkWidget *setpathmenu;
00095 GtkWidget *exitmenu;
00096 GtkWidget *submenuforedit;
00097 GtkWidget *infomenu;
00098 GtkWidget *viewmenu;
00099 GtkWidget *cleardownloads;
00100 GtkWidget *viewdownloadsmenu;
00101 GtkWidget *submenuforview;
00102 GtkWidget *tabs;
00103 GtkWidget *tempbutton,*tempbutton1;
00104 GtkWidget *tablabelproxy,*tablabelport,*tablabeldownload;
00105 GtkWidget *vboxforpbar,*vboxfortab1,*vboxfortab2,*vboxfortab3;
00106 GtkWidget *labelproxy1,*labelproxy2;
00107 GtkWidget *labelport1,*labelport2;
00108 GtkWidget *labeldownload1,*labeldownload2;
00109 GtkWidget *tabproxybutton;
00110 GtkWidget *tabportbutton;
00111 GtkWidget *tabdownloadbutton;
00112 GtkWidget *tabviewdloadbutton;
00113 GtkWidget *tabnewdloadbutton;
00114 GtkWidget *tplabel[15];
00115 GtkWidget *tooltipfortab1,*tooltipfortab2,*tooltipfortab3;
00116 GtkWidget *progressbar[5];
00117 GtkWidget *progressbartitle[5];
00118 GtkWidget *progressbarstop[5];
00119 GtkWidget *tempprogressbar[5];
00120 GtkWidget *hboxforpbar[5];
00121 GtkWidget *tabframe1,*tabframe2,*tabframe3;
00122 GtkWidget *tmp[50];
00123 GtkWidget *hsep[5];
00124 int tp=0;
00125 int p=0;
00126 int t=0;
00127 int hp=0;
00128
00129
00130 GtkWidget *proxywindow;
00131 GtkWidget *noproxylabel;
00132 GtkWidget *noproxyentry;
00133 GtkWidget *noproxyhbox;
00134 GtkWidget *vboxforoptions;
00135 GtkWidget *proxyadd;
00136 GtkWidget *portadd;
00137 GtkWidget *proxylabel;
00138 GtkWidget *portlabel;
00139 GtkWidget *mainlabel;
00140 GtkWidget *submitproxy;
00141 GtkWidget *proxyhbox;
00142 GtkWidget *porthbox;
00143 GtkWidget *templabel,*templabel1,*templabel2,*templabel3,*templabel4,*templabel10,*templabel11;
00144 GtkWidget *hboxforsubmit;
00145 GtkWidget *framedownload1;
00146
00147
00148 GtkWidget *dpathwindow;
00149 GtkWidget *dpathmainlabel;
00150 GtkWidget *pathchooser;
00151 GtkWidget *dpathentry;
00152 GtkWidget *dpathsubmit,*dpathexit;
00153 GtkWidget *vboxfordpath;
00154 GtkWidget *hboxforpath;
00155 GtkWidget *hboxforsubmit;
00156 GtkWidget *templabel5,*templabel6,*templabel7,*templabel8,*templabel9;
00157
00158
00159 GtkWidget *newdownloadwindow;
00160 GtkWidget *ndmainlabel;
00161 GtkWidget *URLlabel;
00162 GtkWidget *savetolabel;
00163 GtkWidget *filenamelabel;
00164 GtkWidget *URLentry;
00165 GtkWidget *filenameentry;
00166 GtkWidget *savetoentry;
00167 GtkWidget *submitdownload;
00168 GtkWidget *exitdownload;
00169 GtkWidget *vboxfordownload;
00170 GtkWidget *hboxforURL,*hboxforsave,*hboxforfilename,*hboxforsubmitd;
00171 GtkWidget *templabel12,*templabel13,*templabel14,*templabel15,*templabel16,*templabel17,*templabel18;
00172 GtkWidget *filechooser;
00173
00174
00175 GtkWidget *vdmainlabel;
00176 GtkWidget *treeview;
00177 GtkListStore *liststoredownload;
00178 GtkWidget *viewdownloadwindow;
00179 GtkTreeIter iter;
00180 GtkCellRenderer *renderer;
00181 GtkTreePath *path;
00182 GtkTreeViewColumn *col;
00183
00184
00185 GtkWidget *infonotebook;
00186 GtkWidget *releaselabel;
00187 GtkWidget *readmelabel;
00188 GtkWidget *infowindow;
00189 GtkWidget *releasepage;
00190 GtkWidget *readmepage;
00191 GtkWidget *releasenote[11];
00192 GtkWidget *readmenote[12];
00193
00194
00195 GtkWidget *helpwindow;
00196 GtkWidget *helplabels[16];
00197 GtkWidget *helpvbox;
00198
00199
00200 int createdefaultpathwindow(int,char*[]);
00201 int createhelpwindow(int,char *[]);
00202 int createinfowindow(int ,char *[]);
00203 int createproxywindow(int,char*[]);
00204 void dialogerror(gchar [200]);
00205 int createnewdownloadwindow(int ,char *[]);
00206 int createviewdownloadwindow(int,char *[]);
00207 void buttonclicked(GtkButton *,gpointer);
00208 void pathselected(GtkFileChooser *,gpointer);
00209 gint window_delete_event(GtkWidget *, gpointer);
00210 gint hidewindow(GtkWidget *, gpointer);
00211
00212
00222 char* breakstring(char str[SIZE]);
00223 static int callback (void *, int , char **, char **);
00224 static int callback1(void *, int , char **, char **);
00225 int connect_to_db();
00226 int connect_to_db1();
00227
00235 char * return_data(char id[20]);
00236
00247 int insert_data(char name[200],char path[200],int size,char date[200],char time[200]);
00248 void show_data();
00249
00259 int update_values(char id[20],char key[200]);
00260
00261
00268 int getlength(char message[SIZE]);
00269 void *threadHandler(void *);
00270
00277 char *hostextractor(char url[]);
00278
00285 char * nameextractor(char namefile[SIZE]);
00286
00293 int checkhttp(char url[]);
00294
00295
00296
00306 char* breakstring(char str[SIZE])
00307 {
00308 strcpy(tempbreak,"");
00309 int i;
00310 int b=0;
00311
00312
00313 for(i=0;i<strlen(str);i++)
00314 {
00315 if(i%30==0 && i!=0)
00316 {
00317 tempbreak[b++]=10;
00318 }
00319 else
00320 {
00321 tempbreak[b++]=str[i];
00322 }
00323 }
00324 tempbreak[b++]='\0';
00325
00326
00327 return tempbreak;
00328
00329 }
00330
00339 void close_properly (int signal)
00340 {
00341 int i;
00342 for(i=0;i<5;i++)
00343 {
00344 if(goingon[i]==1)
00345 {
00346 close(fd[i]);
00347
00348 char del[200];
00349
00350 sprintf(del,"rm -f %s",reqarray[i].filename);
00351
00352 system(del);
00353
00354 }
00355 }
00356 exit(1);
00357
00358 }
00359
00370 static int callback (void *NotUsed, int argc, char **argv, char **azColName)
00371 {
00372 NotUsed = 0;
00373
00374
00375 strcpy(tempvalue,argv[1]);
00376 return 0;
00377 }
00378
00389 static int callback1(void *NotUsed, int argc, char **argv, char **azColName)
00390 {
00391
00392 NotUsed = 0;
00393
00394
00395 gtk_list_store_append(liststoredownload, &iter);
00396 gtk_list_store_set((liststoredownload),&iter,0,argv[0],1,argv[1],2,(guint)(atoi(argv[2])),3,argv[3],4,argv[5],-1);
00397 return 0;
00398 }
00399
00405 int cleardownloaddetails()
00406 {
00407 char sql_statement[BUFFER];
00408 int rc;
00409 char *zErrMsg = 0;
00410
00411
00412 sprintf(sql_statement, "delete from ddetails");
00413 rc = sqlite3_exec (database2, sql_statement, callback, 0, &zErrMsg);
00414 if (rc != SQLITE_OK)
00415 {
00416 fprintf (stderr, "SQL error: %s\n", zErrMsg);
00417 return 0;
00418 }
00419 return 1;
00420 }
00427 int connect_to_db()
00428 {
00429 int rc;
00430 char name[200]="settings.sqlite3";
00431
00432
00433 rc = sqlite3_open (name, &database1);
00434 if (rc)
00435 {
00436 fprintf (stderr, "Can't open database: %s\n", sqlite3_errmsg (database1));
00437 sqlite3_close (database1);
00438 return 0;
00439 }
00440 return 1;
00441 }
00449 int connect_to_db1()
00450 {
00451 int rc;
00452 char name[200]="downloads.sqlite3";
00453
00454 rc = sqlite3_open (name, &database2);
00455 if (rc)
00456 {
00457 fprintf (stderr, "Can't open database: %s\n", sqlite3_errmsg (database2));
00458 sqlite3_close (database2);
00459 return 0;
00460 }
00461 return 1;
00462 }
00463
00471 char * return_data(char id[20])
00472 {
00473 char sql_statement[BUFFER];
00474 int rc;
00475 char *zErrMsg = 0;
00476
00477
00478 sprintf(sql_statement, "SELECT * from settings where name='%s'", id);
00479 rc = sqlite3_exec (database1, sql_statement, callback, 0, &zErrMsg);
00480 if (rc != SQLITE_OK)
00481 {
00482 fprintf (stderr, "SQL error: %s\n", zErrMsg);
00483 }
00484 return tempvalue;
00485 }
00486
00497 int insert_data(char name[200],char path[200],int size,char date[200],char time[200])
00498 {
00499 char sql_statement[BUFFER];
00500 int rc;
00501 char *zErrMsg = 0;
00502
00503
00504 sprintf(sql_statement, "insert into ddetails values('%s','%s',%d,'%s','%s','%s')",name,path,size,date,"nikhil",time);
00505 rc = sqlite3_exec (database2, sql_statement, callback1, 0, &zErrMsg);
00506 if (rc != SQLITE_OK)
00507 {
00508 fprintf (stderr, "SQL error: %s\n", zErrMsg);
00509 }
00510 return 1;
00511
00512 }
00513
00521 void show_data()
00522 {
00523 char sql_statement[BUFFER];
00524 int rc;
00525 char *zErrMsg = 0;
00526
00527
00528 sprintf(sql_statement, "SELECT * from ddetails");
00529 rc = sqlite3_exec (database2, sql_statement, callback1, 0, &zErrMsg);
00530 if (rc != SQLITE_OK)
00531 {
00532 fprintf (stderr, "SQL error: %s\n", zErrMsg);
00533 }
00534
00535 }
00536
00546 int update_values(char id[20],char key[200])
00547 {
00548 char sql_statement[BUFFER];
00549 int rc;
00550 char *zErrMsg = 0;
00551
00552
00553 sprintf(sql_statement, "UPDATE settings set value='%s' where name='%s'", key,id);
00554 rc = sqlite3_exec (database1, sql_statement, callback, 0, &zErrMsg);
00555 if (rc != SQLITE_OK)
00556 {
00557 return 0;
00558 printf("Conditions to modify are not correct\n");
00559 }
00560 return 1;
00561 }
00562
00572 void pathselected(GtkFileChooser *chooser,gpointer user_data)
00573 {
00574 if(chooser==GTK_FILE_CHOOSER(filechooser))
00575 {
00576
00577 gchar *path=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooser));
00578 printf("file chooser activated\n");
00579 gtk_entry_set_text(GTK_ENTRY(savetoentry),path);
00580
00581
00582 }
00583 else if(chooser==GTK_FILE_CHOOSER(pathchooser))
00584 {
00585
00586 gchar *path=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(pathchooser));
00587 printf("file chooser activated\n");
00588 gtk_entry_set_text(GTK_ENTRY(dpathentry),path);
00589 }
00590 }
00591
00592
00602 gint window_delete_event(GtkWidget *widget1, gpointer data)
00603 {
00604
00605 gtk_main_quit();
00606 return TRUE;
00607
00608 }
00609
00619 gint hidewindow(GtkWidget *widget1, gpointer data)
00620 {
00621
00622 gtk_widget_hide(widget1);
00623 gtk_main_quit();
00624 return TRUE;
00625
00626 }
00627
00634 int getlength(char message[SIZE])
00635 {
00636
00637 int i=0;
00638 int l=0;
00639 int j=0,there=0;
00640 char length[50];
00641
00642 for(i=0;i<strlen(message);i++)
00643 {
00644
00645 if(message[i]=='3' && message[i+1]=='0' && message[i+2]=='2' && message[i+4]=='M')
00646 {
00647
00648 moved=1;
00649 }
00650 if(message[i]=='5' && message[i+1]=='0' && message[i+2]=='4' && message[i+4]=='G')
00651 {
00652
00653 gateway=1;
00654 }
00655 if(message[i]=='4' && message[i+1]=='0' && message[i+2]=='0' && message[i+4]=='B')
00656 {
00657
00658 bad=1;
00659 }
00660 if(message[i]=='4' && message[i+1]=='0' && message[i+2]=='3' && message[i+4]=='F')
00661 {
00662 printf("forbidden\n");
00663 forbidden=1;
00664 }
00665 else if(message[i]=='4' && message[i+1]=='0' && message[i+2]=='4' && message[i+4]=='N')
00666 {
00667 notfound=1;
00668 }
00669 if(message[i]=='C' && message[i+1]=='o' && message[i+13]=='h')
00670 {
00671 j=i+16;
00672 for(;message[j]!='\n';j++)
00673 {
00674 length[l++]=message[j];
00675 }
00676 length[l++]='\0';
00677 there=1;
00678 break;
00679 }
00680 }
00681 if(there==0)
00682 return 0;
00683
00684
00685
00686 return atoi(length);
00687 }
00688
00697 int remainingdata(char message2[5000],int mlen)
00698 {
00699 int i;
00700 int j;
00701 strcpy(remains,"");
00702 int r=0;
00703
00704 for(i=0;i<mlen;i++)
00705 {
00706 if(message2[i]=='\n' && message2[i+1]=='\r' && message2[i+2]=='\n')
00707 {
00708
00709
00710
00711 for(j=i+3;j<mlen;j++)
00712 {
00713
00714
00715
00716
00717 remains[r]=message2[j];
00718
00719 r++;
00720
00721 }
00722
00723 break;
00724 }
00725 }
00726
00727
00728 return r;
00729
00730
00731
00732 }
00739 void *threadHandler(void *arg1)
00740 {
00741
00742 download_details *req;
00743 double frac;
00744 char status[SIZE];
00745 req = (download_details *)arg1;
00746
00747
00748
00749 flag[req->id]=1;
00750
00751 struct sockaddr_in addr;
00752 struct hostent *hp;
00753 int soc;
00754 char message[SIZE];
00755 int msglen;
00756 notfound=0;
00757
00758 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progressbar[req->id]),0.0);
00759 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),"Connecting. Please wait");
00760 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progressbar[req->id]),"");
00761
00762
00763 if((soc = socket(AF_INET, SOCK_STREAM, 0)) == -1)
00764 {
00765 fprintf(stderr,"Couldn't get a socket.\n");
00766 close(soc);
00767 push(&s1,req->id);
00768 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),"Could'nt get a Socket");
00769
00770 pthread_exit(NULL);
00771
00772 }
00773 else
00774 {
00775 fprintf(stderr,"Got a socket.\n");
00776
00777 }
00778 int flags, n, error;
00779 socklen_t len;
00780 fd_set rset, wset;
00781 struct timeval tval;
00782 int nsec = 6;
00783 flags = fcntl(soc, F_GETFL, 0);
00784 fcntl(soc, F_SETFL, flags | O_NONBLOCK);
00785
00786 memset(&addr,0,sizeof(addr));
00787
00788
00789 if(strcmp(proxy,"")!=0)
00790 {
00791 if((hp = gethostbyname(proxy)) == NULL)
00792 {
00793
00794 fprintf(stderr,"Couldn't get an address.\n");
00795 fprintf(stderr,"\nTimeout error!\n");
00796 close(soc);
00797 push(&s1,req->id);
00798 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),"Please check your proxy settings");
00799
00800 pthread_exit(NULL);
00801 }
00802 else
00803 {
00804
00805
00806 }
00807 }
00808 else
00809 {
00810 if((hp = gethostbyname(req->host)) == NULL)
00811 {
00812
00813 fprintf(stderr,"Couldn't get an address.\n");
00814 fprintf(stderr,"\nTimeout error!\n");
00815 close(soc);
00816 push(&s1,req->id);
00817 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),"Please check your proxy settings");
00818
00819 pthread_exit(NULL);
00820 }
00821 else
00822 {
00823
00824
00825 }
00826 }
00827
00828
00829 memcpy((char *)&addr.sin_addr.s_addr, (char *)hp->h_addr, hp->h_length);
00830
00831
00832 if(strcmp(proxy,"")!=0)
00833 addr.sin_port = htons(atoi(port));
00834 else
00835 addr.sin_port=htons(80);
00836 addr.sin_family = AF_INET;
00837 error = 0;
00838 if ( (n = connect(soc, (struct sockaddr *)&addr, sizeof(addr))) < 0)
00839 if (errno != EINPROGRESS)
00840 {
00841 push(&s1,req->id);
00842 fprintf(stderr,"\nconnect error!\n");
00843 pthread_exit(NULL);
00844 }
00845
00846
00847
00848 if (n == 0)
00849 goto done;
00850
00851 FD_ZERO(&rset);
00852 FD_SET(soc, &rset);
00853 wset = rset;
00854 tval.tv_sec = nsec;
00855 tval.tv_usec = 0;
00856
00857
00858 if ( (n = select(soc + 1, &rset, &wset, NULL,nsec ? &tval : NULL)) == 0)
00859 {
00860 close(soc);
00861 push(&s1,req->id);
00862 fprintf(stderr,"\nTimeout error!\n");
00863 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),"Could not Connect. Check your proxy settings if any or the connection status");
00864 errno = ETIMEDOUT;
00865 pthread_exit(NULL);
00866 }
00867
00868 if (FD_ISSET(soc, &rset) || FD_ISSET(soc, &wset))
00869 {
00870 len = sizeof(error);
00871 if (getsockopt(soc, SOL_SOCKET, SO_ERROR, &error, &len) < 0)
00872 pthread_exit(NULL);
00873 }
00874 else
00875 fprintf(stderr,"\nselect error: soc not set");
00876
00877 done:
00878 fcntl(soc, F_SETFL, flags);
00879
00880 if (error)
00881 {
00882 close(soc);
00883 errno = error;
00884 pthread_exit(NULL);
00885 }
00886
00887
00888
00889
00890
00891 int characters_written = write(soc ,req->request, strlen(req->request));
00892 if(characters_written<0)
00893 {
00894 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),"Could not send the request. Try after some time");
00895
00896 push(&s1,req->id);
00897 moved=0;
00898 pthread_exit(NULL);
00899 }
00900
00901 double data1=0;
00902 long int data=0,m=1,count=0;
00903 double after=0.0;
00904
00905
00906
00907
00908 msglen = read(soc,message,768);
00909 message[msglen]='\0';
00910
00911
00912 long int length=getlength(message);
00913
00914 if(length>10000000)
00915 after=0.01;
00916 else
00917 after=0.05;
00918
00919
00920 if(moved==1)
00921 {
00922 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),"Resource is moved to a different location");
00923
00924 push(&s1,req->id);
00925 moved=0;
00926 pthread_exit(NULL);
00927 }
00928 if(notfound==1)
00929 {
00930 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),"cound not locate the resource. Please check the URL");
00931
00932 push(&s1,req->id);
00933 notfound=0;
00934 pthread_exit(NULL);
00935 }
00936 else if(forbidden==1)
00937 {
00938 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),"The resource is forbidden to be downloaded");
00939
00940 push(&s1,req->id);
00941 forbidden=0;
00942 pthread_exit(NULL);
00943 }
00944 else if(gateway==1)
00945 {
00946 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),"Gateway time out");
00947
00948 push(&s1,req->id);
00949 gateway=0;
00950 pthread_exit(NULL);
00951 }
00952 else if(bad==1)
00953 {
00954 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),"Bad Request Error");
00955
00956 push(&s1,req->id);
00957 bad=0;
00958 pthread_exit(NULL);
00959 }
00960
00961
00962 if ((fd[req->id] = open(req->filename, O_CREAT | O_RDWR, 0644)) < 0)
00963 {
00964 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),"You dont have enough memory or permission for creation of the new file");
00965
00966 push(&s1,req->id);
00967 pthread_exit(NULL);
00968 }
00969
00970 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),req->fname);
00971
00972
00973 goingon[req->id]=1;
00974 char per[10];
00975 int ans;
00976 int i;
00977
00978 char ch='%';
00979 int time1,min,secs,hours;
00980 char timer[50];
00981 time_t result;
00982 double kbps;
00983 long int t1,t2,data2,diff,t3;
00984 int datawritten=0;
00985 struct tm* brokentime;
00986 int tempreturn=remainingdata(message,msglen);
00987 strcpy(per,"");
00988
00989
00990 datawritten=write(fd[req->id],remains,tempreturn);
00991
00992 data = data + tempreturn;
00993 data1 = data1 + tempreturn;
00994 result = time(NULL);
00995 brokentime = localtime(&result);
00996 t3=t1=(long int)result;
00997
00998
00999 if(length==0)
01000 {
01001
01002 while(msglen>0)
01003 {
01004 data = data + msglen;
01005 msglen = read(soc,message,BUFFERSIZE-2);
01006 write(fd[req->id],message,msglen);
01007 }
01008 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progressbar[req->id]),1.0);
01009 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progressbar[req->id]),"100%");
01010 strcpy(status,req->fname);
01011 strcat(status," completed");
01012 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),status);
01013
01014 close(soc);
01015
01016
01017 close(fd[req->id]);
01018
01019
01020 push(&s1,req->id);
01021
01022
01023 time_t rawtime;
01024 time ( &rawtime );
01025
01026
01027 result = time(NULL);
01028 brokentime = localtime(&result);
01029 t2=(long int)result;
01030 int timefield=t2-t3;
01031 int timemins=timefield/60;
01032 int timesecs=timefield%60;
01033 int timehours=timemins/60;
01034 timemins=timemins%60;
01035 char timetostore[200];
01036 sprintf(timetostore,"%d hours %d mins %d secs",timehours,timemins,timesecs);
01037 flag[req->id]=0;
01038 pthread_exit(NULL);
01039 return NULL;
01040
01041
01042
01043 }
01044
01045
01046
01047 while(msglen>0)
01048 {
01049 msglen = read(soc,message,BUFFERSIZE-2);
01050 write(fd[req->id],message,msglen);
01051 data = data + msglen;
01052 data1 = data1 + msglen;
01053 data2=data2+msglen;
01054 frac=(data1)/length;
01055 ans=frac*100;
01056 sprintf(per,"%d%c",ans,ch);
01057
01058 if(count==5)
01059 {
01060
01061
01062 result = time(NULL);
01063 brokentime = localtime(&result);
01064 t2=(long int)result;
01065 diff=t2-t1;
01066 t1=t2;
01067 if(diff==0)
01068 diff=1;
01069 if(data2!=0)
01070 time1=(length-data)/(data2/diff);
01071 min=time1/60;
01072 if(min>60)
01073 {
01074 hours=min/60;
01075 min=min%60;
01076 }
01077 else
01078 {
01079 hours=0;
01080 }
01081 secs=time1%60;
01082 kbps=(data2)/(diff*1024.0);
01083 if(hours==0)
01084 sprintf(timer,"%s %d mins %d secs remaining at %f kbps",req->fname,min,secs,kbps);
01085 else
01086 sprintf(timer,"%s %d hours %d mins %d secs remaining at %f kbps",req->fname,hours,min,secs,kbps);
01087 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),timer);
01088 data2=0;
01089 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progressbar[req->id]),frac);
01090 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progressbar[req->id]),per);
01091 }
01092 if(frac>=1.0/1)
01093 {
01094
01095
01096
01097 result = time(NULL);
01098 brokentime = localtime(&result);
01099 t2=(long int)result;
01100
01101 diff=t2-t1;
01102
01103 t1=t2;
01104 if(diff==0)
01105 diff=1;
01106 if(data2!=0)
01107 time1=(length-data)/(data2/diff);
01108
01109 min=time1/60;
01110 if(min>60)
01111 {
01112 hours=min/60;
01113 min=min%60;
01114 }
01115 else
01116 {
01117 hours=0;
01118 }
01119 secs=time1%60;
01120
01121 kbps=(data2)/(diff*1024.0);
01122 if(hours==0)
01123 sprintf(timer,"%s %d mins %d secs remaining at %f kbps",req->fname,min,secs,kbps);
01124 else
01125 sprintf(timer,"%s %d hours %d mins %d secs remaining at %f kbps",req->fname,hours,min,secs,kbps);
01126 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),timer);
01127 data2=0;
01128 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progressbar[req->id]),1.0);
01129 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progressbar[req->id]),per);
01130 }
01131 else if(frac>after*m)
01132 {
01133
01134
01135 result = time(NULL);
01136 brokentime = localtime(&result);
01137 t2=(long int)result;
01138
01139 diff=t2-t1;
01140
01141 t1=t2;
01142 if(diff==0)
01143 diff=1;
01144 if(data2!=0)
01145 time1=(length-data)/(data2/diff);
01146
01147 min=time1/60;
01148 if(min>60)
01149 {
01150 hours=min/60;
01151 min=min%60;
01152 }
01153 else
01154 {
01155 hours=0;
01156 }
01157 secs=time1%60;
01158
01159 kbps=(data2)/(diff*1024.0);
01160 if(hours==0)
01161 sprintf(timer,"%s %d mins %d secs remaining at %f kbps",req->fname,min,secs,kbps);
01162 else
01163 sprintf(timer,"%s %d hours %d mins %d secs remaining at %f kbps",req->fname,hours,min,secs,kbps);
01164 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),timer);
01165 data2=0;
01166 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progressbar[req->id]),frac);
01167 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progressbar[req->id]),per);
01168 m++;
01169 }
01170 if(data>=length)
01171 {
01172 break;
01173 }
01174 count++;
01175 }
01176
01177
01178
01179 for(i=0;i<1000000;i++);
01180 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(progressbar[req->id]),1.0);
01181 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progressbar[req->id]),"100%");
01182 strcpy(status,req->fname);
01183 strcat(status," completed");
01184 gtk_label_set_text(GTK_LABEL(progressbartitle[req->id]),status);
01185 result = time(NULL);
01186 brokentime = localtime(&result);
01187 t2=(long int)result;
01188 int timefield=t2-t3;
01189 int timemins=timefield/60;
01190 int timesecs=timefield%60;
01191 int timehours=timemins/60;
01192 timemins=timemins%60;
01193 char timetostore[200];
01194 sprintf(timetostore,"%d hours %d mins %d secs",timehours,timemins,timesecs);
01195
01196
01197 close(soc);
01198
01199
01200 close(fd[req->id]);
01201
01202
01203
01204 push(&s1,req->id);
01205
01206
01207 time_t rawtime;
01208 time ( &rawtime );
01209
01210
01211 insert_data(req->fname,req->fpath,length,ctime (&rawtime),timetostore);
01212 flag[req->id]=0;
01213
01214 goingon[req->id]=0;
01215
01216 pthread_exit(NULL);
01217 return NULL;
01218 }
01219
01226 char * hostextractor(char url[SIZE])
01227 {
01228 int i,j;
01229 strcpy(host,"");
01230 int h=0;
01231 for(i=0;i<strlen(url);i++)
01232 {
01233
01234 if(url[i]=='/'&& url[i+1]=='/')
01235 {
01236 j=i+2;
01237 for(;url[j]!='/';j++)
01238 {
01239 host[h++]=url[j];
01240 }
01241 host[h++]='\0';
01242 break;
01243
01244 }
01245 }
01246
01247
01248
01249 return host;
01250 }
01251
01258 char * nameextractor(char namefile[SIZE])
01259 {
01260 char tempname[SIZE];
01261 int tn=0,i;
01262 int fn=0;
01263 strcpy(finalname,"");
01264 for(i=strlen(namefile)-1;i>=0;i--)
01265 {
01266
01267 if(namefile[i]=='/')
01268 {
01269 tempname[tn++]='\0';
01270 break;
01271 }
01272 else
01273 {
01274 tempname[tn++]=namefile[i];
01275 }
01276 }
01277
01278
01279
01280 for(i=strlen(tempname)-1;i>=0;i--)
01281 {
01282 finalname[fn++]=tempname[i];
01283 }
01284 finalname[fn++]='\0';
01285
01286
01287 return finalname;
01288 }
01289
01296 int checkhttp(char url[SIZE])
01297 {
01298
01299 if(url[0]=='h' && url[1]=='t' && url[2]=='t' && url[3]=='p' && url[4]==':' && url[5]=='/' && url[6]=='/')
01300 return 1;
01301 else
01302 return 0;
01303 }
01304
01314 void buttonclicked(GtkButton *button,gpointer user_data)
01315 {
01316 int argc=1;
01317 char *argv[5];
01318 if(button==GTK_BUTTON(submitproxy))
01319 {
01320
01321
01322 char tempproxy[SIZE];
01323 strcpy(tempproxy,gtk_entry_get_text(GTK_ENTRY(proxyadd)));
01324 char tempport[SIZE];
01325 strcpy(tempport,gtk_entry_get_text(GTK_ENTRY(portadd)));
01326
01327
01328 int ret=update_values("proxy",tempproxy);
01329 if(ret==1)
01330 {
01331 strcpy(proxy,tempproxy);
01332
01333
01334 if(strlen(proxy)<=30 && strcmp(proxy,"")!=0)
01335 {
01336 gtk_label_set_text(GTK_LABEL(labelproxy2),proxy);
01337 }
01338 else if(strcmp(proxy,"")!=0)
01339 {
01340 char tb[200];
01341 strcpy(tb,breakstring(proxy));
01342 gtk_label_set_text(GTK_LABEL(labelproxy2),tb);
01343 }
01344 }
01345
01346
01347 ret=update_values("port",tempport);
01348 if(ret==1)
01349 strcpy(port,tempport);
01350 gtk_label_set_text(GTK_LABEL(labelport2),port);
01351 gtk_widget_hide(proxywindow);
01352 gtk_main_quit();
01353 }
01354 else if(button==GTK_BUTTON(dpathsubmit))
01355 {
01356
01357 char tempdpath[SIZE];
01358
01359
01360 strcpy(tempdpath,gtk_entry_get_text(GTK_ENTRY(dpathentry)));
01361 int ret=update_values("dpath",tempdpath);
01362 if(strcmp(tempdpath,"")==0 && strcmp(dpath,"")==0)
01363 {
01364 dialogerror("please select a default path");
01365 return;if(strcmp(tempdpath,"")==0 && strcmp(dpath,"")==0)
01366 {
01367 dialogerror("please select a default path");
01368 return;
01369 }
01370 }
01371 if(ret==1)
01372 {
01373 strcpy(dpath,tempdpath);
01374
01375
01376 if(strlen(dpath)<=30)
01377 {
01378 gtk_label_set_text(GTK_LABEL(labeldownload2),dpath);
01379 }
01380 else
01381 {
01382 char tb[SIZE];
01383 strcpy(tb,breakstring(dpath));
01384 gtk_label_set_text(GTK_LABEL(labeldownload2),tb);
01385 }
01386
01387 }
01388 gtk_widget_hide(dpathwindow);
01389 gtk_entry_set_text(GTK_ENTRY(dpathentry)," ");
01390 gtk_main_quit();
01391 }
01392 else if(button==GTK_BUTTON(dpathexit))
01393 {
01394
01395
01396 gtk_widget_hide(dpathwindow);
01397 gtk_main_quit();
01398 }
01399 else if(button==GTK_BUTTON(submitdownload))
01400 {
01401
01402 char URL[SIZE];
01403 char store[SIZE];
01404 char filename[SIZE];
01405 char hostname[SIZE];
01406 char getrequest[SIZE];
01407 strcpy(URL,gtk_entry_get_text(GTK_ENTRY(URLentry)));
01408 strcpy(filename,gtk_entry_get_text(GTK_ENTRY(filenameentry)));
01409 if(strcmp(URL,"")==0)
01410 {
01411 dialogerror("Please specify the download URL\n");
01412 return;
01413 }
01414 else
01415 {
01416 char tname[SIZE];
01417 char http[SIZE]="http://";
01418
01419
01420 strcpy(store,gtk_entry_get_text(GTK_ENTRY(savetoentry)));
01421 if(strcmp(dpath,"")==0 && strcmp(store,"")==0)
01422 {
01423 dialogerror("please select a default path or a path of dowload from here");
01424 return;
01425 }
01426
01427
01428
01429 strcpy(hostname,hostextractor(URL));
01430
01431
01432
01433 strcpy(tname,nameextractor(URL));
01434
01435
01436 int check=checkhttp(URL);
01437 if(check==0)
01438 {
01439
01440 strcat(http,URL);
01441 strcpy(URL,http);
01442 }
01443
01444 gtk_widget_hide(newdownloadwindow);
01445 gtk_main_quit();
01446
01447 if(isempty(&s1))
01448 {
01449 dialogerror("U have reached the limits for maximum parallel downloads. Please try when any one downloads finish");
01450 return;
01451 }
01452
01453
01454 int index=pop(&s1);
01455
01456
01457
01458 strcpy(getrequest,"GET ");
01459 strcat(getrequest,URL);
01460 strcat(getrequest," HTTP/1.1\nHost: ");
01461 strcat(getrequest,hostname);
01462 strcat(getrequest,"\nUser-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.3) Gecko/20090909 Fedora/3.5.3-1.fc11 Firefox/3.5.3\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\nAccept-Language: en-us,en;q=0.5\nAccept-Encoding: \nAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\nKeep-Alive: 300\nCache-Control: 1#no-cache\nProxy-Connection: keep-alive\n\n");
01463
01464
01465
01466
01467 strcpy(reqarray[index].request,getrequest);
01468 reqarray[index].id=index;
01469 strcpy(reqarray[index].filename,store);
01470 strcat(reqarray[index].filename,"/");
01471 if(strcmp(filename,"")==0 && strcmp(tname,"")==0)
01472 {
01473
01474 strcat(reqarray[index].filename,"temp");
01475 }
01476 else if(strcmp(filename,"")==0)
01477 {
01478
01479 strcat(reqarray[index].filename,tname);
01480 }
01481 else
01482 {
01483
01484 strcat(reqarray[index].filename,filename);
01485 }
01486
01487 strcpy(reqarray[index].fpath,store);
01488 if(strcmp(filename,"")==0 && strcmp(tname,"")==0)
01489 strcpy(reqarray[index].fname,"temp");
01490 else if(strcmp(filename,"")!=0)
01491 strcpy(reqarray[index].fname,filename);
01492 else
01493 strcpy(reqarray[index].fname,tname);
01494 strcpy(reqarray[index].host,hostname);
01495
01496
01497 int return_value = pthread_create(&threadid[index], NULL,threadHandler, (void *)&reqarray[index]);
01498 if(return_value<0)
01499 {
01500 dialogerror("unexpected error. Please try after some time");
01501 }
01502 }
01503 }
01504 else if(button==GTK_BUTTON(exitdownload))
01505 {
01506
01507
01508 gtk_widget_hide(newdownloadwindow);
01509 gtk_main_quit();
01510 }
01511 else if(button==GTK_BUTTON(tabdownloadbutton))
01512 {
01513 createdefaultpathwindow(argc,argv);
01514 }
01515 else if(button==GTK_BUTTON(tabproxybutton))
01516 {
01517 createproxywindow(argc,argv);
01518 }
01519 else if(button==GTK_BUTTON(tabviewdloadbutton))
01520 {
01521 createviewdownloadwindow(argc,argv);
01522 }
01523 else if(button==GTK_BUTTON(tabnewdloadbutton))
01524 {
01525 createnewdownloadwindow(argc,argv);
01526 }
01527 else if(button==GTK_BUTTON(tabportbutton))
01528 {
01529 createproxywindow(argc,argv);
01530 }
01531 else if(button==GTK_BUTTON(progressbarstop[0]) && flag[0]==1)
01532 {
01533
01534
01535 close(fd[0]);
01536 gtk_label_set_text(GTK_LABEL(progressbartitle[0]),"download cancelled");
01537 flag[0]=0;
01538 fprintf(stderr,"canceling thread:%d",pthread_cancel(threadid[0]));
01539 char del[200];
01540 push(&s1,0);
01541
01542
01543 sprintf(del,"rm -f %s",reqarray[0].filename);
01544 printf("%s\n",del);
01545 system(del);
01546
01547 printf("nikhil");
01548 }
01549 else if(button==GTK_BUTTON(progressbarstop[1]) && flag[1]==1)
01550 {
01551
01552 close(fd[1]);
01553 gtk_label_set_text(GTK_LABEL(progressbartitle[1]),"download cancelled");
01554 flag[1]=0;
01555 fprintf(stderr,"canceling thread:%d",pthread_cancel(threadid[1]));
01556 char del[SIZE];
01557
01558
01559 sprintf(del,"rm -f %s",reqarray[1].filename);
01560 system(del);
01561 push(&s1,1);
01562 printf("nikhil");
01563 }
01564 else if(button==GTK_BUTTON(progressbarstop[2]) && flag[2]==1)
01565 {
01566
01567 close(fd[2]);
01568 gtk_label_set_text(GTK_LABEL(progressbartitle[2]),"download cancelled");
01569 flag[2]=0;
01570 fprintf(stderr,"canceling thread:%d",pthread_cancel(threadid[2]));
01571 char del[SIZE];
01572
01573
01574 sprintf(del,"rm -f %s",reqarray[2].filename);
01575 system(del);
01576 push(&s1,2);
01577 printf("nikhil");
01578 }
01579 else if(button==GTK_BUTTON(progressbarstop[3]) && flag[3]==1)
01580 {
01581
01582 close(fd[3]);
01583 gtk_label_set_text(GTK_LABEL(progressbartitle[3]),"download cancelled");
01584 flag[3]=0;
01585 fprintf(stderr,"canceling thread:%d",pthread_cancel(threadid[3]));
01586 char del[SIZE];
01587
01588
01589 sprintf(del,"rm -f %s",reqarray[3].filename);
01590 system(del);
01591 push(&s1,3);
01592 printf("nikhil");
01593 }
01594 else if(button==GTK_BUTTON(progressbarstop[4]) && flag[4]==1)
01595 {
01596
01597 close(fd[4]);
01598 gtk_label_set_text(GTK_LABEL(progressbartitle[4]),"download cancelled");
01599 flag[4]=0;
01600 fprintf(stderr,"canceling thread:%d",pthread_cancel(threadid[4]));
01601 char del[SIZE];
01602
01603
01604 sprintf(del,"rm -f %s",reqarray[4].filename);
01605 system(del);
01606 push(&s1,4);
01607 printf("nikhil");
01608 }
01609
01610 }
01617 void dialogsucess(gchar msg[200])
01618 {
01619
01620
01621 GtkWidget *dialog;
01622 dialog = gtk_message_dialog_new (NULL,GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_INFO, GTK_BUTTONS_OK,"%s",msg);
01623 gtk_dialog_run (GTK_DIALOG (dialog));
01624 gtk_widget_destroy (dialog);
01625 }
01626
01627
01634 void dialogerror(gchar msg[200])
01635 {
01636
01637
01638 GtkWidget *dialog;
01639 dialog = gtk_message_dialog_new (NULL,GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,"%s",msg);
01640 gtk_dialog_run (GTK_DIALOG (dialog));
01641 gtk_widget_destroy (dialog);
01642 }
01643
01653 int createviewdownloadwindow(int argc,char *argv[])
01654 {
01655 gtk_init(&argc,&argv);
01656 viewdownloadwindow=gtk_window_new(GTK_WINDOW_TOPLEVEL);
01657 gtk_window_set_title(GTK_WINDOW(viewdownloadwindow), "**View Downloads**");
01658 gtk_window_set_position(GTK_WINDOW(viewdownloadwindow),GTK_WIN_POS_CENTER_ALWAYS);
01659 g_signal_connect(G_OBJECT(viewdownloadwindow),"delete_event",G_CALLBACK(hidewindow),NULL);
01660 gtk_window_set_modal(GTK_WINDOW(viewdownloadwindow),TRUE);
01661 gtk_window_set_default_size(GTK_WINDOW(viewdownloadwindow),450,150);
01662
01663
01664
01665 liststoredownload=gtk_list_store_new (5, G_TYPE_STRING,G_TYPE_STRING,G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING);
01666
01667
01668 show_data();
01669
01670
01671 treeview= gtk_tree_view_new();
01672
01673 gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(treeview),TRUE);
01674
01675
01676 col = gtk_tree_view_column_new();
01677 gtk_tree_view_column_set_title(col, "File Name");
01678 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), col);
01679 renderer = gtk_cell_renderer_text_new();
01680 gtk_tree_view_column_pack_start(col, renderer, TRUE);
01681 gtk_tree_view_column_add_attribute(col, renderer, "text", 0);
01682 gtk_tree_view_column_set_clickable(col,TRUE);
01683 gtk_tree_view_column_set_sort_column_id(col,0);
01684
01685
01686 col = gtk_tree_view_column_new();
01687 gtk_tree_view_column_set_title(col, "Path");
01688 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), col);
01689 renderer = gtk_cell_renderer_text_new();
01690 gtk_tree_view_column_pack_start(col, renderer, TRUE);
01691 gtk_tree_view_column_add_attribute(col, renderer, "text", 1);
01692 gtk_tree_view_column_set_clickable(col,TRUE);
01693 gtk_tree_view_column_set_sort_column_id(col,1);
01694
01695
01696 col = gtk_tree_view_column_new();
01697 gtk_tree_view_column_set_title(col, "File Size");
01698 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), col);
01699 renderer = gtk_cell_renderer_text_new();
01700 gtk_tree_view_column_pack_start(col, renderer, TRUE);
01701 gtk_tree_view_column_add_attribute(col, renderer, "text", 2);
01702 gtk_tree_view_column_set_clickable(col,TRUE);
01703 gtk_tree_view_column_set_sort_column_id(col,2);
01704
01705
01706 col = gtk_tree_view_column_new();
01707 gtk_tree_view_column_set_title(col, "Date");
01708 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), col);
01709 renderer = gtk_cell_renderer_text_new();
01710 gtk_tree_view_column_pack_start(col, renderer, TRUE);
01711 gtk_tree_view_column_add_attribute(col, renderer, "text", 3);
01712 gtk_tree_view_column_set_clickable(col,TRUE);
01713
01714
01715 col = gtk_tree_view_column_new();
01716 gtk_tree_view_column_set_title(col, "Time taken to download");
01717 gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), col);
01718 renderer = gtk_cell_renderer_text_new();
01719 gtk_tree_view_column_pack_start(col, renderer, TRUE);
01720 gtk_tree_view_column_add_attribute(col, renderer, "text", 4);
01721 gtk_tree_view_column_set_clickable(col,TRUE);
01722
01723
01724 gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), GTK_TREE_MODEL(liststoredownload));
01725 g_object_unref(liststoredownload);
01726 gtk_container_add (GTK_CONTAINER (viewdownloadwindow), treeview);
01727
01728
01729 gtk_widget_show_all(treeview);
01730 gtk_widget_show_all(viewdownloadwindow);
01731 gtk_main();
01732
01733
01734 return EXIT_SUCCESS;
01735
01736 }
01737
01747 int createnewdownloadwindow(int argc,char *argv[])
01748 {
01749 gtk_init(&argc,&argv);
01750
01751
01752 newdownloadwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
01753 gtk_window_set_title(GTK_WINDOW(newdownloadwindow), "**New Download**");
01754 gtk_window_set_position(GTK_WINDOW(newdownloadwindow),GTK_WIN_POS_CENTER_ALWAYS);
01755 g_signal_connect(G_OBJECT(newdownloadwindow),"delete_event",G_CALLBACK(hidewindow),NULL);
01756 gtk_window_set_resizable(GTK_WINDOW(newdownloadwindow),FALSE);
01757 gtk_window_set_modal(GTK_WINDOW(newdownloadwindow),TRUE);
01758
01759
01760
01761 ndmainlabel=gtk_label_new(" Specify the details for the new Download: ");
01762 templabel12=gtk_label_new("");
01763 templabel13=gtk_label_new("");
01764 templabel14=gtk_label_new("");
01765 templabel15=gtk_label_new("");
01766 templabel16=gtk_label_new("");
01767 templabel17=gtk_label_new("");
01768 templabel18=gtk_label_new("");
01769 URLlabel=gtk_label_new("Enter the URL: ");
01770 savetolabel=gtk_label_new("Save to:");
01771 filenamelabel=gtk_label_new("Enter the name of File:");
01772
01773
01774 URLentry=gtk_entry_new();
01775 savetoentry=gtk_entry_new();
01776 gtk_entry_set_editable(GTK_ENTRY(savetoentry),FALSE);
01777 filenameentry=gtk_entry_new();
01778
01779
01780 submitdownload=gtk_button_new_with_mnemonic("_Submit");
01781 gtk_button_set_use_underline(GTK_BUTTON(submitdownload),TRUE);
01782 exitdownload=gtk_button_new_with_mnemonic("_Exit");
01783 gtk_button_set_use_underline(GTK_BUTTON(exitdownload),TRUE);
01784
01785
01786 filechooser=gtk_file_chooser_button_new("newdownloadpath", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
01787
01788
01789 vboxfordownload=gtk_vbox_new(TRUE,0);
01790 gtk_container_set_border_width(GTK_CONTAINER(vboxfordownload),15);
01791 gtk_container_add (GTK_CONTAINER (newdownloadwindow),vboxfordownload);
01792
01793
01794
01795
01796 hboxforURL=gtk_hbox_new(TRUE,0);
01797 hboxforsave=gtk_hbox_new(TRUE,0);
01798 hboxforfilename=gtk_hbox_new(TRUE,0);
01799 hboxforsubmitd=gtk_hbox_new(TRUE,0);
01800
01801
01802 gtk_box_pack_start(GTK_BOX(vboxfordownload), ndmainlabel, TRUE, TRUE, 0);
01803 gtk_box_pack_start(GTK_BOX(vboxfordownload), templabel12, TRUE, TRUE, 0);
01804 gtk_box_pack_start(GTK_BOX(vboxfordownload), hboxforURL, TRUE, TRUE, 0);
01805 gtk_box_pack_start(GTK_BOX(vboxfordownload), templabel13, TRUE, TRUE, 0);
01806 gtk_box_pack_start(GTK_BOX(vboxfordownload), hboxforsave, TRUE, TRUE, 0);
01807 gtk_box_pack_start(GTK_BOX(vboxfordownload), templabel14, TRUE, TRUE, 0);
01808 gtk_box_pack_start(GTK_BOX(vboxfordownload), hboxforfilename, TRUE, TRUE, 0);
01809 gtk_box_pack_start(GTK_BOX(vboxfordownload), templabel15, TRUE, TRUE, 0);
01810 gtk_box_pack_start(GTK_BOX(vboxfordownload), hboxforsubmitd, TRUE, TRUE, 0);
01811
01812
01813 gtk_box_pack_start(GTK_BOX(hboxforURL), URLlabel, TRUE, TRUE, 0);
01814 gtk_box_pack_start(GTK_BOX(hboxforURL), URLentry, TRUE, TRUE, 0);
01815 gtk_box_pack_start(GTK_BOX(hboxforsave), savetolabel, TRUE, TRUE, 0);
01816 gtk_box_pack_start(GTK_BOX(hboxforsave), savetoentry, TRUE, TRUE, 0);
01817 gtk_box_pack_start(GTK_BOX(hboxforsave), filechooser, TRUE, TRUE, 0);
01818 gtk_box_pack_start(GTK_BOX(hboxforfilename), filenamelabel, TRUE, TRUE, 0);
01819 gtk_box_pack_start(GTK_BOX(hboxforfilename), filenameentry, TRUE, TRUE, 0);
01820 gtk_box_pack_start(GTK_BOX(hboxforsubmitd), templabel16, TRUE, TRUE, 0);
01821 gtk_box_pack_start(GTK_BOX(hboxforsubmitd), submitdownload, TRUE, TRUE, 0);
01822 gtk_box_pack_start(GTK_BOX(hboxforsubmitd), templabel17, TRUE, TRUE, 0);
01823 gtk_box_pack_start(GTK_BOX(hboxforsubmitd), exitdownload, TRUE, TRUE, 0);
01824 gtk_box_pack_start(GTK_BOX(hboxforsubmitd), templabel18, TRUE, TRUE, 0);
01825
01826
01827 g_signal_connect(G_OBJECT(submitdownload),"clicked",G_CALLBACK(buttonclicked),NULL);
01828 g_signal_connect(G_OBJECT(exitdownload),"clicked",G_CALLBACK(buttonclicked),NULL);
01829 g_signal_connect(G_OBJECT(filechooser),"selection-changed",G_CALLBACK(pathselected),NULL);
01830
01831
01832 gtk_entry_set_text(GTK_ENTRY(savetoentry),dpath);
01833
01834
01835 gtk_widget_show(vboxfordownload);
01836 gtk_widget_show(ndmainlabel);
01837 gtk_widget_show(URLlabel);
01838 gtk_widget_show(savetolabel);
01839 gtk_widget_show(filenamelabel);
01840 gtk_widget_show(templabel12);
01841 gtk_widget_show(templabel13);
01842 gtk_widget_show(templabel14);
01843 gtk_widget_show(templabel15);
01844 gtk_widget_show(templabel16);
01845 gtk_widget_show(templabel17);
01846 gtk_widget_show(templabel18);
01847 gtk_widget_show(URLentry);
01848 gtk_widget_show(filenameentry);
01849 gtk_widget_show(filechooser);
01850 gtk_widget_show(hboxforURL);
01851 gtk_widget_show(hboxforsave);
01852 gtk_widget_show(hboxforfilename);
01853 gtk_widget_show(submitdownload);
01854 gtk_widget_show(exitdownload);
01855 gtk_widget_show(savetoentry);
01856 gtk_widget_show(hboxforsubmitd);
01857 gtk_widget_show(newdownloadwindow);
01858
01859 gtk_main();
01860
01861
01862 return EXIT_SUCCESS;
01863
01864 }
01865
01875 int createhelpwindow(int argc,char *argv[])
01876 {
01877 int i;
01878 gtk_init(&argc,&argv);
01879
01880
01881 helpwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
01882 gtk_window_set_title(GTK_WINDOW(helpwindow), "**HELP**");
01883 gtk_window_set_position(GTK_WINDOW(helpwindow),GTK_WIN_POS_CENTER_ALWAYS);
01884 g_signal_connect(G_OBJECT(helpwindow),"delete_event",G_CALLBACK(hidewindow),NULL);
01885 gtk_window_set_resizable(GTK_WINDOW(helpwindow),FALSE);
01886 gtk_window_set_modal(GTK_WINDOW(helpwindow),TRUE);
01887
01888
01889 helpvbox=gtk_vbox_new(TRUE,0);
01890 gtk_container_add (GTK_CONTAINER (helpwindow),helpvbox);
01891 gtk_container_set_border_width(GTK_CONTAINER(helpvbox),15);
01892
01893
01894
01895 helplabels[0]=gtk_label_new("The various accessibility features for this software are:");
01896 helplabels[1]=gtk_label_new("");
01897 helplabels[2]=gtk_label_new("The main page shows you the basic layout");
01898 helplabels[3]=gtk_label_new("The tabbed pane gives you the various options on hand");
01899 helplabels[4]=gtk_label_new("Progress bar along with the stop buttons are for the downloads");
01900 helplabels[5]=gtk_label_new("Labels below the progress bar are for status information");
01901 helplabels[6]=gtk_label_new("The menu bar above shows the various options available in a menu form");
01902 helplabels[7]=gtk_label_new("We have provided shortcut helps like for example pressing alt+f follwed by n shows the new download window");
01903 helplabels[8]=gtk_label_new("There are various options for proxy settings, path settings,information,view downloads through menu");
01904 helplabels[9]=gtk_label_new("The windows can be closed through alt+f4 orby cliking on the close option of the window");
01905 helplabels[10]=gtk_label_new("Any reviews are higly welcomed");
01906 helplabels[11]=gtk_label_new("");
01907 helplabels[12]=gtk_label_new("Mail us at:");
01908 helplabels[13]=gtk_label_new("Nikhil: nikhiljain656@yahoo.co.in");
01909 helplabels[14]=gtk_label_new("Anshul: anshulgolu123@gmail.com");
01910
01911
01912 for(i=0;i<15;i++)
01913 {
01914 gtk_box_pack_start(GTK_BOX(helpvbox), helplabels[i], TRUE, TRUE, 0);
01915 }
01916
01917 gtk_widget_show_all(helpvbox);
01918 gtk_widget_show_all(helpwindow);
01919
01920 gtk_main();
01921
01922
01923 return EXIT_SUCCESS;
01924
01925
01926
01927
01928 }
01929
01939 int createdefaultpathwindow(int argc,char *argv[])
01940 {
01941 gtk_init(&argc,&argv);
01942
01943
01944 dpathwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
01945 gtk_window_set_title(GTK_WINDOW(dpathwindow), "**Path settings**");
01946 gtk_window_set_position(GTK_WINDOW(dpathwindow),GTK_WIN_POS_CENTER_ALWAYS);
01947 g_signal_connect(G_OBJECT(dpathwindow),"delete_event",G_CALLBACK(hidewindow),NULL);
01948 gtk_window_set_resizable(GTK_WINDOW(dpathwindow),FALSE);
01949 gtk_window_set_modal(GTK_WINDOW(dpathwindow),TRUE);
01950
01951
01952 dpathmainlabel=gtk_label_new(" Enter or choose the default path for saving Downloads: ");
01953 templabel5=gtk_label_new("");
01954 templabel6=gtk_label_new("");
01955 templabel7=gtk_label_new("");
01956 templabel8=gtk_label_new("");
01957 templabel9=gtk_label_new("");
01958
01959
01960 vboxfordpath=gtk_vbox_new(TRUE,0);
01961 gtk_container_add (GTK_CONTAINER (dpathwindow), vboxfordpath);
01962 gtk_container_set_border_width(GTK_CONTAINER(vboxfordpath),15);
01963
01964
01965
01966 hboxforpath=gtk_hbox_new(TRUE,0);
01967 hboxforsubmit=gtk_hbox_new(TRUE,0);
01968
01969
01970 dpathsubmit=gtk_button_new_with_mnemonic("_Submit");
01971 gtk_button_set_use_underline(GTK_BUTTON(dpathsubmit),TRUE);
01972 dpathexit=gtk_button_new_with_mnemonic("_Exit");
01973 gtk_button_set_use_underline(GTK_BUTTON(dpathexit),TRUE);
01974
01975
01976 dpathentry=gtk_entry_new();
01977 gtk_entry_set_editable(GTK_ENTRY(dpathentry),FALSE);
01978
01979
01980 pathchooser=gtk_file_chooser_button_new("path", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
01981
01982
01983 gtk_box_pack_start(GTK_BOX(vboxfordpath), dpathmainlabel, TRUE, TRUE, 0);
01984 gtk_box_pack_start(GTK_BOX(vboxfordpath), templabel5, TRUE, TRUE, 0);
01985 gtk_box_pack_start(GTK_BOX(vboxfordpath), hboxforpath, TRUE, TRUE, 0);
01986 gtk_box_pack_start(GTK_BOX(vboxfordpath), templabel6, TRUE, TRUE, 0);
01987 gtk_box_pack_start(GTK_BOX(vboxfordpath), hboxforsubmit, TRUE, TRUE, 0);
01988
01989
01990 gtk_box_pack_start(GTK_BOX(hboxforpath), dpathentry, TRUE, TRUE, 0);
01991 gtk_box_pack_start(GTK_BOX(hboxforpath), pathchooser, TRUE, TRUE, 0);
01992 gtk_box_pack_start(GTK_BOX(hboxforsubmit), templabel7, TRUE, TRUE, 0);
01993 gtk_box_pack_start(GTK_BOX(hboxforsubmit), dpathsubmit, TRUE, TRUE, 0);
01994 gtk_box_pack_start(GTK_BOX(hboxforsubmit), templabel8, TRUE, TRUE, 0);
01995 gtk_box_pack_start(GTK_BOX(hboxforsubmit), dpathexit, TRUE, TRUE, 0);
01996 gtk_box_pack_start(GTK_BOX(hboxforsubmit), templabel9, TRUE, TRUE, 0);
01997
01998
01999 g_signal_connect(G_OBJECT(dpathsubmit),"clicked",G_CALLBACK(buttonclicked),NULL);
02000 g_signal_connect(G_OBJECT(dpathexit),"clicked",G_CALLBACK(buttonclicked),NULL);
02001 g_signal_connect(G_OBJECT(pathchooser),"selection-changed",G_CALLBACK(pathselected),NULL);
02002
02003
02004 gtk_entry_set_text(GTK_ENTRY(dpathentry),dpath);
02005 gtk_entry_set_overwrite_mode(GTK_ENTRY(dpathentry),TRUE);
02006
02007
02008
02009
02010 gtk_widget_show(vboxfordpath);
02011 gtk_widget_show(dpathmainlabel);
02012 gtk_widget_show(templabel5);
02013 gtk_widget_show(templabel6);
02014 gtk_widget_show(templabel7);
02015 gtk_widget_show(templabel8);
02016 gtk_widget_show(templabel9);
02017 gtk_widget_show(dpathsubmit);
02018 gtk_widget_show(dpathexit);
02019 gtk_widget_show(hboxforpath);
02020 gtk_widget_show(hboxforsubmit);
02021 gtk_widget_show(dpathentry);
02022 gtk_widget_show(pathchooser);
02023 gtk_widget_show(dpathwindow);
02024
02025 gtk_main();
02026
02027
02028 return EXIT_SUCCESS;
02029
02030
02031
02032
02033
02034 }
02035
02045 int createproxywindow(int argc, char *argv[])
02046 {
02047 gtk_init(&argc,&argv);
02048
02049
02050 proxywindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
02051 gtk_window_set_title(GTK_WINDOW(proxywindow), "**Proxy Settings**");
02052 gtk_window_set_position(GTK_WINDOW(proxywindow),GTK_WIN_POS_CENTER_ALWAYS);
02053 g_signal_connect(G_OBJECT(proxywindow),"delete_event",G_CALLBACK(hidewindow),NULL);
02054 gtk_window_set_resizable(GTK_WINDOW(proxywindow),FALSE);
02055 gtk_window_set_modal(GTK_WINDOW(proxywindow),TRUE);
02056
02057
02058
02059 vboxforoptions=gtk_vbox_new(TRUE,0);
02060 gtk_container_add (GTK_CONTAINER (proxywindow), vboxforoptions);
02061 gtk_container_set_border_width(GTK_CONTAINER(vboxforoptions),15);
02062
02063
02064
02065 proxyhbox=gtk_hbox_new(TRUE,0);
02066 porthbox=gtk_hbox_new(TRUE,0);
02067 hboxforsubmit=gtk_hbox_new(TRUE,0);
02068 noproxyhbox=gtk_hbox_new(TRUE,0);
02069
02070
02071 mainlabel=gtk_label_new("Enter your proxy Details:");
02072 proxylabel=gtk_label_new("Proxy Address:");
02073 portlabel=gtk_label_new("Port No:");
02074 templabel=gtk_label_new("");
02075 templabel1=gtk_label_new("");
02076 templabel2=gtk_label_new("");
02077 templabel3=gtk_label_new("");
02078 templabel4=gtk_label_new("");
02079 templabel10=gtk_label_new("");
02080 templabel11=gtk_label_new("");
02081 noproxylabel=gtk_label_new("No Proxy for:");
02082
02083
02084 proxyadd=gtk_entry_new();
02085 portadd=gtk_entry_new();
02086 noproxyentry=gtk_entry_new();
02087
02088
02089 submitproxy=gtk_button_new_with_mnemonic("_Submit");
02090 gtk_button_set_use_underline(GTK_BUTTON(submitproxy),TRUE);
02091
02092
02093 gtk_box_pack_start(GTK_BOX(vboxforoptions), mainlabel, TRUE, TRUE, 0);
02094 gtk_box_pack_start(GTK_BOX(vboxforoptions), templabel, TRUE, TRUE, 0);
02095 gtk_box_pack_start(GTK_BOX(vboxforoptions), proxyhbox, TRUE, TRUE, 0);
02096 gtk_box_pack_start(GTK_BOX(vboxforoptions), templabel1, TRUE, TRUE, 0);
02097 gtk_box_pack_start(GTK_BOX(vboxforoptions), porthbox, TRUE, TRUE, 0);
02098 gtk_box_pack_start(GTK_BOX(vboxforoptions), templabel2, TRUE, TRUE, 0);
02099 gtk_box_pack_start(GTK_BOX(vboxforoptions), noproxyhbox, TRUE, TRUE, 0);
02100 gtk_box_pack_start(GTK_BOX(vboxforoptions), templabel10, TRUE, TRUE, 0);
02101 gtk_box_pack_start(GTK_BOX(vboxforoptions), hboxforsubmit, TRUE, TRUE, 0);
02102
02103
02104 gtk_box_pack_start(GTK_BOX(proxyhbox), proxylabel, TRUE, TRUE, 0);
02105 gtk_box_pack_start(GTK_BOX(proxyhbox), proxyadd, TRUE, TRUE, 0);
02106 gtk_box_pack_start(GTK_BOX(porthbox), portlabel, TRUE, TRUE, 0);
02107 gtk_box_pack_start(GTK_BOX(porthbox), portadd, TRUE, TRUE, 0);
02108 gtk_box_pack_start(GTK_BOX(hboxforsubmit), templabel3, TRUE, TRUE, 0);
02109 gtk_box_pack_start(GTK_BOX(hboxforsubmit), submitproxy, TRUE, TRUE, 0);
02110 gtk_box_pack_start(GTK_BOX(hboxforsubmit), templabel4, TRUE, TRUE, 0);
02111 gtk_box_pack_start(GTK_BOX(noproxyhbox), noproxylabel, TRUE, TRUE, 0);
02112 gtk_box_pack_start(GTK_BOX(noproxyhbox), noproxyentry, TRUE, TRUE, 0);
02113
02114
02115
02116 g_signal_connect(G_OBJECT(submitproxy),"clicked",G_CALLBACK(buttonclicked),NULL);
02117
02118
02119 if(strcmp(proxy,"")!=0)
02120 gtk_entry_set_text(GTK_ENTRY(proxyadd),proxy);
02121 if(strcmp(port,"")!=0)
02122 gtk_entry_set_text(GTK_ENTRY(portadd),port);
02123
02124
02125 gtk_widget_show(vboxforoptions);
02126 gtk_widget_show(templabel1);
02127 gtk_widget_show(templabel);
02128 gtk_widget_show(templabel2);
02129 gtk_widget_show(mainlabel);
02130 gtk_widget_show(proxylabel);
02131 gtk_widget_show(portlabel);
02132 gtk_widget_show(proxyadd);
02133 gtk_widget_show(portadd);
02134 gtk_widget_show(submitproxy);
02135 gtk_widget_show(proxyhbox);
02136 gtk_widget_show(porthbox);
02137 gtk_widget_show(templabel3);
02138 gtk_widget_show(templabel4);
02139 gtk_widget_show(hboxforsubmit);
02140 gtk_widget_show(noproxylabel);
02141 gtk_widget_show(noproxyentry);
02142 gtk_widget_show(noproxyhbox);
02143 gtk_widget_show(templabel10);
02144 gtk_widget_show(noproxylabel);
02145 gtk_widget_show(proxywindow);
02146
02147 gtk_main();
02148 return EXIT_SUCCESS;
02149
02150
02151 }
02152
02162 int createinfowindow(int argc,char *argv[])
02163 {
02164 int i=0;
02165
02166
02167 gtk_init(&argc,&argv);
02168
02169
02170 infowindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
02171 gtk_window_set_title(GTK_WINDOW(infowindow), "**General Information**");
02172 gtk_window_set_position(GTK_WINDOW(infowindow),GTK_WIN_POS_CENTER_ALWAYS);
02173 g_signal_connect(G_OBJECT(infowindow),"delete_event",G_CALLBACK(hidewindow),NULL);
02174 gtk_window_set_resizable(GTK_WINDOW(infowindow),FALSE);
02175 gtk_window_set_modal(GTK_WINDOW(infowindow),TRUE);
02176
02177
02178 infonotebook=gtk_notebook_new();
02179
02180
02181 releasepage=gtk_vbox_new(TRUE,0);
02182 gtk_container_set_border_width(GTK_CONTAINER(releasepage),15);
02183 readmepage=gtk_vbox_new(TRUE,0);
02184 gtk_container_set_border_width(GTK_CONTAINER(readmepage),15);
02185
02186
02187
02188 releaselabel=gtk_label_new("Release Notes");
02189 readmelabel=gtk_label_new("Readme");
02190 releasenote[0]=gtk_label_new("Here are some of the release notes that you should keep in mind while working with the software:");
02191 releasenote[2]=gtk_label_new("Please configure your proxy and default path settings first before starting for ease of use");
02192 gtk_label_set_justify(GTK_LABEL(releasenote[2]),GTK_JUSTIFY_LEFT);
02193 releasenote[4]=gtk_label_new("It can only download five files at a time.Giving more files will ask you to wait for some time while the downloading finishes");
02194 releasenote[6]=gtk_label_new("The download progress bars are shown but they are not errors.By clicking on stop buttons of non working progress bar will not initiate any action");
02195 releasenote[1]=gtk_label_new("");
02196 releasenote[3]=gtk_label_new("");
02197 releasenote[5]=gtk_label_new("");
02198 releasenote[7]=gtk_label_new("");
02199 releasenote[8]=gtk_label_new("If you dont specify the download file name,it will take the name of the downloaded file from the URL");
02200 releasenote[9]=gtk_label_new("");
02201 releasenote[10]=gtk_label_new("If you dont specify the path of downlaod it will take the default path as the path for download");
02202
02203 for(i=1;i<3;i=i+2)
02204 {
02205 readmenote[i]=gtk_label_new("");
02206 }
02207 readmenote[4]=gtk_label_new("");
02208 readmenote[5]=gtk_label_new("");
02209 readmenote[0]=gtk_label_new("Made By:");
02210 readmenote[2]=gtk_label_new("Nikhil Jain(200905026) MTech CSE");
02211 readmenote[3]=gtk_label_new("Anshul Gupta(200905005) MTech CSE");
02212 readmenote[6]=gtk_label_new("Future prospects:");
02213 readmenote[7]=gtk_label_new("To enable downloads through sessions");
02214 readmenote[8]=gtk_label_new("To have more than five downloads");
02215 readmenote[9]=gtk_label_new("To have stoppage and resume of the downloads");
02216 readmenote[10]=gtk_label_new("To enable downloads through sessions");
02217 readmenote[11]=gtk_label_new("To have download queues");
02218
02219
02220
02221
02222 gtk_notebook_append_page(GTK_NOTEBOOK(infonotebook),releasepage,releaselabel);
02223 gtk_notebook_append_page(GTK_NOTEBOOK(infonotebook),readmepage,readmelabel);
02224 gtk_container_add (GTK_CONTAINER (infowindow), infonotebook);
02225 for(i=0;i<12;i++)
02226 {
02227 gtk_box_pack_start(GTK_BOX(readmepage), readmenote[i], TRUE, TRUE, 0);
02228 }
02229 for(i=0;i<11;i++)
02230 {
02231 gtk_box_pack_start(GTK_BOX(releasepage), releasenote[i], TRUE, TRUE, 0);
02232 }
02233
02234
02235 gtk_widget_show_all(releasepage);
02236 gtk_widget_show_all(readmepage);
02237 gtk_widget_show_all(infowindow);
02238
02239 gtk_main();
02240 return EXIT_SUCCESS;
02241
02242
02243
02244 }
02245
02246
02256 void menuitemclick(GtkMenuItem *menuitem,gpointer user_data)
02257 {
02258 int argc=1;
02259 char *argv[5];
02260 if(menuitem==GTK_MENU_ITEM(setproxymenu))
02261 {
02262 createproxywindow(argc,argv);
02263 }
02264 else if(menuitem==GTK_MENU_ITEM(setpathmenu))
02265 {
02266 createdefaultpathwindow(argc,argv);
02267 }
02268 else if(menuitem==GTK_MENU_ITEM(newdownloadmenu))
02269 {
02270 createnewdownloadwindow(argc,argv);
02271 }
02272 else if(menuitem==GTK_MENU_ITEM(viewdownloadsmenu))
02273 {
02274 createviewdownloadwindow(argc,argv);
02275 }
02276 else if(menuitem==GTK_MENU_ITEM(infomenu))
02277 {
02278 createinfowindow(argc,argv);
02279 }
02280 else if(menuitem==GTK_MENU_ITEM(help))
02281 {
02282 createhelpwindow(argc,argv);
02283 }
02284 else if(menuitem==GTK_MENU_ITEM(cleardownloads))
02285 {
02286 cleardownloaddetails();
02287 dialogsucess("All download details deleted");
02288 }
02289 }
02290
02300 int main(int argc,char *argv[])
02301 {
02302
02303 int i,j;
02304
02305
02306
02307
02308
02309 struct sigaction act1;
02310
02311
02312 act1.sa_handler = close_properly;
02313 sigemptyset (&act1.sa_mask);
02314 act1.sa_flags = 0;
02315 sigaction (SIGINT, &act1, 0);
02316
02317
02318 initialize(&s1);
02319 for(i=4;i>=0;i--)
02320 {
02321 push(&s1,i);
02322 }
02323
02324
02325 connect_to_db();
02326 connect_to_db1();
02327
02328 gtk_init(&argc,&argv);
02329 labeldownload2=gtk_label_new("");
02330 labelproxy2=gtk_label_new("");
02331 labelport2=gtk_label_new("");
02332
02333
02334 strcpy(proxy,return_data("proxy"));
02335
02336 strcpy(port,return_data("port"));
02337
02338 strcpy(dpath,return_data("dpath"));
02339
02340 if(strcmp(proxy,"")==0 || strcmp(port,"")==0)
02341 {
02342 createproxywindow(argc,argv);
02343 }
02344 if(strcmp(dpath,"")==0)
02345 {
02346 createdefaultpathwindow(argc,argv);
02347 }
02348
02349
02350
02351
02352
02353
02354 framedownload=gtk_frame_new("Downloads");
02355 tabframe1=gtk_frame_new("Proxy");
02356 tabframe2=gtk_frame_new("Port");
02357 tabframe3=gtk_frame_new("Download");
02358
02359
02360 top_Level_Main_Window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
02361 gtk_window_set_default_size(GTK_WINDOW(top_Level_Main_Window),1000,600);
02362 gtk_window_set_title(GTK_WINDOW(top_Level_Main_Window), "**My DOWNLOAD MANAGER**");
02363 gtk_window_set_position(GTK_WINDOW(top_Level_Main_Window),GTK_WIN_POS_CENTER_ALWAYS);
02364 g_signal_connect(G_OBJECT(top_Level_Main_Window),"delete_event",G_CALLBACK(window_delete_event),NULL);
02365
02366
02367 menupane=gtk_vpaned_new();
02368 gtk_container_add (GTK_CONTAINER (top_Level_Main_Window), menupane);
02369
02370
02371
02372 hpaneforprogressbar=gtk_hpaned_new();
02373
02374
02375 for(i=0;i<5;i++)
02376 {
02377 progressbar[i]=gtk_progress_bar_new();
02378 hboxforpbar[i]=gtk_hbox_new(TRUE,0);
02379 hsep[i]=gtk_hseparator_new();
02380 }
02381
02382
02383 for(i=0;i<5;i++)
02384 {
02385 progressbartitle[i]=gtk_label_new("Your File name");
02386 tempprogressbar[i]=gtk_label_new("");
02387 progressbarstop[i]=gtk_button_new_with_label("Stop");
02388 g_signal_connect(G_OBJECT(progressbarstop[i]),"clicked",G_CALLBACK(buttonclicked),NULL);
02389
02390 }
02391
02392
02393 for(i=0;i<50;i++)
02394 {
02395 tmp[i]=gtk_label_new("");
02396 }
02397
02398
02399 for(i=0;i<5;i++)
02400 {
02401 gtk_box_pack_start(GTK_BOX(hboxforpbar[i]), progressbarstop[i], TRUE, TRUE, 0);
02402 for(j=0;j<4;j++)
02403 {
02404 gtk_box_pack_start(GTK_BOX(hboxforpbar[i]), tmp[tp++], TRUE, TRUE, 0);
02405 }
02406 }
02407
02408
02409 vboxforpbar=gtk_vbox_new(TRUE,0);
02410 vboxfortab1=gtk_vbox_new(TRUE,0);
02411 vboxfortab2=gtk_vbox_new(TRUE,0);
02412 vboxfortab3=gtk_vbox_new(TRUE,0);
02413 gtk_paned_add2(GTK_PANED(hpaneforprogressbar),framedownload);
02414 gtk_container_set_border_width(GTK_CONTAINER(vboxforpbar),15);
02415 gtk_container_add (GTK_CONTAINER (framedownload), vboxforpbar);
02416 gtk_container_set_border_width(GTK_CONTAINER(framedownload),15);
02417
02418
02419
02420 tablabelproxy=gtk_label_new("Proxy");
02421 tablabelport=gtk_label_new("Port");
02422 tablabeldownload=gtk_label_new("Download");
02423 labelproxy1=gtk_label_new("Current Proxy:");
02424 tooltipfortab1=gtk_label_new("Proxy Address is the address of\nthe proxy server");
02425 tooltipfortab2=gtk_label_new("Port Address is the portnumber\n of the proxy server");
02426 tooltipfortab3=gtk_label_new("The Path shown is the default \npath of downloads");
02427 if((strlen(proxy))<=30)
02428 {
02429
02430 gtk_label_set_text(GTK_LABEL(labeldownload2),proxy);
02431 }
02432 else
02433 {
02434 char tb[200];
02435 strcpy(tb,breakstring(proxy));
02436 gtk_label_set_text(GTK_LABEL(labeldownload2),tb);
02437
02438 }
02439 labelproxy2=gtk_label_new(proxy);
02440 labelport1=gtk_label_new("Current Port:");
02441 gtk_label_set_text(GTK_LABEL(labelport2),port);
02442 labeldownload1=gtk_label_new("Default save Path:");
02443
02444 if((strlen(dpath))<=30)
02445 {
02446 gtk_label_set_text(GTK_LABEL(labeldownload2),dpath);
02447
02448 }
02449 else
02450 {
02451 char tb[200];
02452 strcpy(tb,breakstring(dpath));
02453 gtk_label_set_text(GTK_LABEL(labeldownload2),tb);
02454
02455 }
02456 for(i=0;i<15;i++)
02457 {
02458 tplabel[i]=gtk_label_new("");
02459 }
02460
02461
02462 tabs=gtk_notebook_new();
02463 gtk_paned_add1(GTK_PANED(hpaneforprogressbar),tabs);
02464 gtk_notebook_append_page(GTK_NOTEBOOK(tabs),tabframe1,tablabelproxy);
02465 gtk_notebook_append_page(GTK_NOTEBOOK(tabs),tabframe2,tablabelport);
02466 gtk_notebook_append_page(GTK_NOTEBOOK(tabs),tabframe3,tablabeldownload);
02467 gtk_container_add (GTK_CONTAINER (tabframe1), vboxfortab1);
02468 gtk_container_set_border_width(GTK_CONTAINER(tabframe1),15);
02469 gtk_container_add (GTK_CONTAINER (tabframe2), vboxfortab2);
02470 gtk_container_set_border_width(GTK_CONTAINER(tabframe2),15);
02471 gtk_container_add (GTK_CONTAINER (tabframe3), vboxfortab3);
02472 gtk_container_set_border_width(GTK_CONTAINER(tabframe3),15);
02473
02474
02475 tabproxybutton=gtk_button_new_with_mnemonic("_change Settings");
02476 gtk_button_set_use_underline(GTK_BUTTON(tabproxybutton),TRUE);
02477 tabportbutton=gtk_button_new_with_mnemonic("_change settings");
02478 gtk_button_set_use_underline(GTK_BUTTON(tabportbutton),TRUE);
02479 tabdownloadbutton=gtk_button_new_with_mnemonic("_change settings");
02480 gtk_button_set_use_underline(GTK_BUTTON(tabdownloadbutton),TRUE);
02481 tabviewdloadbutton=gtk_button_new_with_label("View _Downloads");
02482 gtk_button_set_use_underline(GTK_BUTTON(tabviewdloadbutton),TRUE);
02483 tabnewdloadbutton=gtk_button_new_with_label("_New Download");
02484 gtk_button_set_use_underline(GTK_BUTTON(tabnewdloadbutton),TRUE);
02485
02486
02487
02488
02489
02490
02491 gtk_box_pack_start(GTK_BOX(vboxfortab1), tplabel[t++], TRUE, TRUE, 0);
02492 gtk_box_pack_start(GTK_BOX(vboxfortab1), labelproxy1, TRUE, TRUE, 0);
02493 gtk_box_pack_start(GTK_BOX(vboxfortab1), labelproxy2, TRUE, TRUE, 0);
02494 gtk_box_pack_start(GTK_BOX(vboxfortab1), tplabel[t++], TRUE, TRUE, 0);
02495 gtk_box_pack_start(GTK_BOX(vboxfortab1), tabproxybutton, TRUE, TRUE, 0);
02496 gtk_box_pack_start(GTK_BOX(vboxfortab1), tplabel[t++], TRUE, TRUE, 0);
02497 gtk_box_pack_start(GTK_BOX(vboxfortab1), tooltipfortab1, TRUE, TRUE, 0);
02498 for(i=0;i<2;i++)
02499 {
02500 gtk_box_pack_start(GTK_BOX(vboxfortab1), tplabel[t++], TRUE, TRUE, 0);
02501 }
02502
02503
02504 gtk_box_pack_start(GTK_BOX(vboxfortab2), tplabel[t++], TRUE, TRUE, 0);
02505 gtk_box_pack_start(GTK_BOX(vboxfortab2), labelport1, TRUE, TRUE, 0);
02506 gtk_box_pack_start(GTK_BOX(vboxfortab2), labelport2, TRUE, TRUE, 0);
02507 gtk_box_pack_start(GTK_BOX(vboxfortab2), tplabel[t++], TRUE, TRUE, 0);
02508 gtk_box_pack_start(GTK_BOX(vboxfortab2), tabportbutton, TRUE, TRUE, 0);
02509 gtk_box_pack_start(GTK_BOX(vboxfortab2), tplabel[t++], TRUE, TRUE, 0);
02510 gtk_box_pack_start(GTK_BOX(vboxfortab2), tooltipfortab2, TRUE, TRUE, 0);
02511 for(i=0;i<2;i++)
02512 {
02513 gtk_box_pack_start(GTK_BOX(vboxfortab2), tplabel[t++], TRUE, TRUE, 0);
02514 }
02515
02516
02517 gtk_box_pack_start(GTK_BOX(vboxfortab3), tplabel[t++], TRUE, TRUE, 0);
02518 gtk_box_pack_start(GTK_BOX(vboxfortab3), labeldownload1, TRUE, TRUE, 0);
02519 gtk_box_pack_start(GTK_BOX(vboxfortab3), labeldownload2, TRUE, TRUE, 0);
02520 gtk_box_pack_start(GTK_BOX(vboxfortab3), tplabel[t++], TRUE, TRUE, 0);
02521 gtk_box_pack_start(GTK_BOX(vboxfortab3), tabdownloadbutton, TRUE, TRUE, 0);
02522 gtk_box_pack_start(GTK_BOX(vboxfortab3), tplabel[t++], TRUE, TRUE, 0);
02523 gtk_box_pack_start(GTK_BOX(vboxfortab3), tabviewdloadbutton, TRUE, TRUE, 0);
02524 gtk_box_pack_start(GTK_BOX(vboxfortab3), tplabel[t++], TRUE, TRUE, 0);
02525 gtk_box_pack_start(GTK_BOX(vboxfortab3), tabnewdloadbutton, TRUE, TRUE, 0);
02526 gtk_box_pack_start(GTK_BOX(vboxfortab3), tplabel[t++], TRUE, TRUE, 0);
02527 gtk_box_pack_start(GTK_BOX(vboxfortab3), tooltipfortab3, TRUE, TRUE, 0);
02528
02529 for(i=0;i<5;i++)
02530 {
02531 gtk_box_pack_start(GTK_BOX(vboxforpbar),hboxforpbar[i], TRUE, TRUE, 0);
02532 gtk_box_pack_start(GTK_BOX(vboxforpbar), progressbar[i], TRUE, TRUE, 0);
02533 gtk_box_pack_start(GTK_BOX(vboxforpbar), progressbartitle[i], TRUE, TRUE, 0);
02534
02535 gtk_box_pack_start(GTK_BOX(vboxforpbar), hsep[i], TRUE, TRUE, 0);
02536
02537 }
02538
02539
02540
02541 menu=gtk_menu_bar_new();
02542 gtk_paned_add1(GTK_PANED(menupane),menu);
02543 gtk_paned_add2(GTK_PANED(menupane),hpaneforprogressbar);
02544
02545
02546 filemenu= gtk_menu_item_new_with_mnemonic("_File");
02547 editmenu= gtk_menu_item_new_with_mnemonic("_Edit");
02548 viewmenu= gtk_menu_item_new_with_mnemonic("_View");
02549 helpmenu= gtk_menu_item_new_with_mnemonic("_Help");
02550
02551
02552 newdownloadmenu= gtk_image_menu_item_new_with_mnemonic("_New Downloads");
02553 setproxymenu=gtk_image_menu_item_new_with_mnemonic("_Proxy Settings");
02554 setpathmenu=gtk_image_menu_item_new_with_mnemonic("Path _Settings");
02555 exitmenu=gtk_image_menu_item_new_with_mnemonic("E_xit");
02556 infomenu=gtk_image_menu_item_new_with_mnemonic("_Info");
02557 viewdownloadsmenu=gtk_image_menu_item_new_with_mnemonic("View _Downloads");
02558 help=gtk_image_menu_item_new_with_mnemonic("_Help");
02559 cleardownloads=gtk_image_menu_item_new_with_mnemonic("_Clear Download details");
02560
02561
02562 gtk_menu_item_set_use_underline(GTK_MENU_ITEM(filemenu),TRUE);
02563 gtk_menu_item_set_use_underline(GTK_MENU_ITEM(editmenu),TRUE);
02564 gtk_menu_item_set_use_underline(GTK_MENU_ITEM(viewmenu),TRUE);
02565 gtk_menu_item_set_use_underline(GTK_MENU_ITEM(helpmenu),TRUE);
02566
02567
02568 gtk_menu_shell_append(GTK_MENU_SHELL(menu),filemenu);
02569 gtk_menu_shell_append(GTK_MENU_SHELL(menu),editmenu);
02570 gtk_menu_shell_append(GTK_MENU_SHELL(menu),viewmenu);
02571 gtk_menu_shell_append(GTK_MENU_SHELL(menu),helpmenu);
02572
02573
02574 submenuforfile=gtk_menu_new();
02575 submenuforedit=gtk_menu_new();
02576 submenuforview=gtk_menu_new();
02577 submenuforhelp=gtk_menu_new();
02578
02579
02580 gtk_menu_item_set_submenu (GTK_MENU_ITEM(filemenu),submenuforfile);
02581 gtk_menu_item_set_submenu (GTK_MENU_ITEM(editmenu),submenuforedit);
02582 gtk_menu_item_set_submenu (GTK_MENU_ITEM(viewmenu),submenuforview);
02583 gtk_menu_item_set_submenu (GTK_MENU_ITEM(helpmenu),submenuforhelp);
02584
02585
02586 gtk_menu_shell_append(GTK_MENU_SHELL(submenuforfile),newdownloadmenu);
02587 gtk_menu_shell_append(GTK_MENU_SHELL(submenuforfile),viewdownloadsmenu);
02588 gtk_menu_shell_append(GTK_MENU_SHELL(submenuforfile),exitmenu);
02589 gtk_menu_shell_append(GTK_MENU_SHELL(submenuforedit),setproxymenu);
02590 gtk_menu_shell_append(GTK_MENU_SHELL(submenuforedit),setpathmenu);
02591 gtk_menu_shell_append(GTK_MENU_SHELL(submenuforview),infomenu);
02592 gtk_menu_shell_append(GTK_MENU_SHELL(submenuforhelp),help);
02593 gtk_menu_shell_append(GTK_MENU_SHELL(submenuforedit),cleardownloads);
02594
02595
02596 g_signal_connect(G_OBJECT(setproxymenu),"activate",G_CALLBACK(menuitemclick),NULL);
02597 g_signal_connect(G_OBJECT(setpathmenu),"activate",G_CALLBACK(menuitemclick),NULL);
02598 g_signal_connect(G_OBJECT(newdownloadmenu),"activate",G_CALLBACK(menuitemclick),NULL);
02599 g_signal_connect(G_OBJECT(exitmenu),"activate",G_CALLBACK(window_delete_event),NULL);
02600 g_signal_connect(G_OBJECT(viewdownloadsmenu),"activate",G_CALLBACK(menuitemclick),NULL);
02601 g_signal_connect(G_OBJECT(cleardownloads),"activate",G_CALLBACK(menuitemclick),NULL);
02602 g_signal_connect(G_OBJECT(infomenu),"activate",G_CALLBACK(menuitemclick),NULL);
02603 g_signal_connect(G_OBJECT(help),"activate",G_CALLBACK(menuitemclick),NULL);
02604 g_signal_connect(G_OBJECT(tabproxybutton),"clicked",G_CALLBACK(buttonclicked),NULL);
02605 g_signal_connect(G_OBJECT(tabportbutton),"clicked",G_CALLBACK(buttonclicked),NULL);
02606 g_signal_connect(G_OBJECT(tabdownloadbutton),"clicked",G_CALLBACK(buttonclicked),NULL);
02607 g_signal_connect(G_OBJECT(tabviewdloadbutton),"clicked",G_CALLBACK(buttonclicked),NULL);
02608 g_signal_connect(G_OBJECT(tabnewdloadbutton),"clicked",G_CALLBACK(buttonclicked),NULL);
02609
02610
02611
02612 gtk_widget_show(menu);
02613 gtk_widget_show(menupane);
02614 gtk_widget_show(filemenu);
02615 gtk_widget_show(editmenu);
02616 gtk_widget_show(newdownloadmenu);
02617 gtk_widget_show(submenuforfile);
02618 gtk_widget_show(submenuforedit);
02619 gtk_widget_show(exitmenu);
02620 gtk_widget_show(setpathmenu);
02621 gtk_widget_show(setproxymenu);
02622 gtk_widget_show(viewmenu);
02623 gtk_widget_show(cleardownloads);
02624 gtk_widget_show_all(vboxfortab1);
02625 gtk_widget_show_all(vboxfortab2);
02626 gtk_widget_show_all(vboxfortab3);
02627 gtk_widget_show_all(tabframe1);
02628 gtk_widget_show_all(tabframe2);
02629 gtk_widget_show_all(tabframe3);
02630 gtk_widget_show_all(framedownload);
02631 gtk_widget_show_all(vboxforpbar);
02632 gtk_widget_show(viewdownloadsmenu);
02633 gtk_widget_show(infomenu);
02634 gtk_widget_show(submenuforhelp);
02635 gtk_widget_show(helpmenu);
02636 gtk_widget_show(help);
02637 gtk_widget_show(submenuforview);
02638 gtk_widget_show(hpaneforprogressbar);
02639 gtk_widget_show_all(tabs);
02640 for(i=0;i<5;i++)
02641 {
02642 gtk_widget_show_all(hboxforpbar[i]);
02643 }
02644 gtk_widget_show(tablabelproxy);
02645 gtk_widget_show(top_Level_Main_Window);
02646
02647
02648
02649 gtk_main();
02650
02651
02652 sqlite3_close (database1);
02653 sqlite3_close (database2);
02654
02655 return EXIT_SUCCESS;
02656 }