Ignore:
Timestamp:
Mar 9, 2017, 12:27:42 PM (3 years ago)
Author:
jrpelegrina
Message:

WIP in gui

Location:
lliurex-gdrive/trunk/fuentes/lliurex-gdrive-gui.install/usr/share/lliurex-gdrive
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • lliurex-gdrive/trunk/fuentes/lliurex-gdrive-gui.install/usr/share/lliurex-gdrive/LliurexGoogleDriveManager.py

    r3838 r3845  
    77import shutil
    88import urllib2
     9import datetime
    910
    1011
    1112DEBUG=True
    1213GDRIVE_CONFIG_DIR=os.path.expanduser("~/.gdfuse/")
    13 LLIUREX_CONFI_FILE='/home/lliurex/config'
    14 
    15 import gettext
    16 gettext.textdomain('lliurex-gdrive')
    17 _ = gettext.gettext
     14LLIUREX_CONFIG_FILE='/home/lliurex/config'
     15
    1816
    1917class LliurexGoogleDriveManager:
     
    2523               
    2624                self.mount_cmd="google-drive-ocamlfuse -label %s %s"
     25
     26                log_msg="------------------------------------------\n"+"LLIUREX-GDRIVE STARTING AT: " + datetime.datetime.today().strftime("%d/%m/%y %H:%M:%S") +"\n------------------------------------------"
     27                self.log(log_msg)
    2728               
    2829                self.read_conf()
     
    3334        def create_conf(self):
    3435
    35                 self.dprint("Creating conf...")
     36                msg_log="Creating conf..."
     37                self.dprint(msg_log)
     38                self.log(msg_log)
    3639
    3740                if not os.path.exists(self.config_dir):
     
    5558                if not os.path.exists(self.config_file):
    5659                        self.create_conf()
    57                        
    58                 self.dprint("Reading conf...")
     60               
     61                msg_log="Reading conf..."
     62                self.dprint(msg_log)
     63                self.log(msg_log)
    5964                       
    6065                f=open(self.config_file)
     
    7479               
    7580                        if "1970-" in line:
    76                                 msg_error=(_("%s not configured")%profile)
    77                                 self.dprint(msg_error)
    78                                 return {"result":False,"output":None,"error":msg_error}
    79                        
    80 
    81                         return {"result":True,"output":None,"error":None}
    82 
    83                 else:
    84                         msg_error=(_("%s not yet create")%profile)
    85 
    86                         self.dprint(msg_error)
    87                         return {"result":False,"output":None,"error": msg_error}
     81                                msg_log="'%s' not configured"%profile
     82                                self.dprint(msg_log)
     83                                self.log(msg_log)
     84
     85                                return False
     86                       
     87
     88                        return True
     89
     90                else:
     91                        msg_log="'%s' not yet create"%profile
     92                        self.dprint(msg_log)
     93                        self.log(msg_log)
     94
     95                        return False
    8896
    8997               
     
    97105                        return True
    98106                except:
     107                        msg_log="Cannot connect to google.com"
     108                        self.dprint(msg_log)
     109                        self.log(msg_log)
    99110                        return False
    100111
     
    104115                if os.path.exists(GDRIVE_CONFIG_DIR+profile):
    105116                        check= self.check_config(profile)
    106                         if check["result"]:
     117                        if check:
    107118                                #if profile in self.profiles_config:
    108119                                        #mount_point=os.path.expanduser(self.profiles_config[profile]["mountpoint"])
     
    115126                                                                os.makedirs(mountpoint)
    116127                                                        except:
    117                                                                 error_msg=(_("Unable to create '%s' mount destination")%mountpoint)
    118                                                                 self.dprint(error_msg)
    119                                                                 return {"result":False,"msg":error_msg}
     128                                                                msg_log="Unable to create '%s' mount destination"%mountpoint
     129                                                                self.dprint(msg_log)
     130                                                                self.log(msg_log)
     131                                                                return False
    120132                                                       
    121133
     
    126138                                                        poutput,perror=p.communicate()
    127139                                                        if len(perror)==0:
    128                                                                 return {"result":True,"msg":None}
     140                                                                return True
    129141                                                        else:
    130                                                                 error_msg=(_("Error mount '%s':")%mountpoint)
    131                                                                 error_log="Error mount '%s':'%s'"%(mountpoint,str(perror))
    132                                                                 self.dprint(error_log)
     142                                                                msg_log="Error mount '%s': %s"%(mountpoint,str(perror))
     143                                                                self.dprint(msg_log)
     144                                                                self.log(msg_log)
    133145                                                                                                                               
    134146                                                else:
    135                                                         error_msg=(_("'%s' mount destination is not owned by user")%mountpoint)
    136                                                         self.dprint(error_msg)
     147                                                        msg_log="'%s' mount destination is not owned by user"%mountpoint
     148                                                        self.dprint(msg_log)
     149                                                        self.log(msg_log)
    137150                                                       
    138151                                        else:
    139                                                 error_msg=(_("'%s' mountpoint not configured")%profile)
    140                                                 self.dprint(error_msg)
     152                                                msg_log="'%s' mountpoint not configured"%profile
     153                                                self.dprint(msg_log)
     154                                                self.log(msg_log)
    141155                        else:
    142                                 error_msg=(_("'%s' profile unknown")%profile)
    143                                 self.dprint(error_msg)
    144                 else:
    145                         error_msg=(_("'%s' GDrive profile path does not exist")%profile)
    146                         self.dprint(error_msg)
    147                        
    148                        
    149                 return {"result":False,"msg":error_msg}
     156                                msg_log="'%s' profile unknown"%profile
     157                                self.dprint(msg_log)
     158                                self.log(msg_log)
     159                else:
     160                        msg_log="'%s' GDrive profile path does not exist"%profile
     161                        self.dprint(msg_log)
     162                        self.log(msg_log)
     163                       
     164                       
     165                return False
    150166
    151167        #def mount_drive
     
    209225        def check_profile_info(self,profile,mountpoint,edition):
    210226       
     227                '''
     228                        code=0: Form OK
     229                        code=1: Profile empty
     230                        code=2: Profile duplicate
     231                        code=3: Mountpoint duplicate
     232
     233                '''     
    211234                if not edition:
    212235                        if profile=="":
    213                                 return False
     236                                return {"result":False,"code":1}
    214237                        else:
    215238                                for item in self.profiles_config:
    216239                                        if profile==item:
    217                                                 return False
     240                                                return {"result":False,"code":2}
    218241
    219242                for item in self.profiles_config:
    220243                        if profile!=item:
    221244                                if mountpoint==self.profiles_config[item]["mountpoint"]:
    222                                         return False
    223 
    224                 return True                                                             
     245                                        return {"result":False,"code":3}
     246
     247                return {"result":True,"code":0}                                                         
    225248       
    226249        def create_profile(self,profile):
    227250
    228                 result=False
    229251
    230252                profile=str(profile)
    231253                path=GDRIVE_CONFIG_DIR+profile+"/config"
    232254
    233                 if not self.check_config(profile)["result"]:
     255                if not self.check_config(profile):
    234256                        os.system("google-drive-ocamlfuse -label %s"%profile)
    235257                        self.dprint("'%s' profile has been create"%profile)
    236258
    237259                        if os.path.exists(GDRIVE_CONFIG_DIR+profile):
    238                                 shutil.copy(LLIUREX_CONFI_FILE,path )
     260                                shutil.copy(LLIUREX_CONFIG_FILE,path )
     261               
    239262                return True
    240263                               
     
    248271                result=self.mount_drive(profile,mountpoint)
    249272
    250                 if result["result"]:
     273                if result:
    251274                        self.save_profiles(info)
    252275                else:
     
    264287
    265288                if len(perror)>0:
    266                         error_msg=(_("Error dismounted '%s':")%mountpoint)
    267                         error_log="Error dismounted '%s': '%s'"%(mountpoint,str(perror))
    268                         self.dprint(error_log)
     289                        msg_log="Error dismounted '%s': '%s'"%(mountpoint,str(perror))
     290                        self.dprint(msg_log)
     291                        self.log(msg_log)
    269292                        result=False
    270293                else:
    271                         error_msg=""
    272294                        self.dprint("'%s' mountpoint has been dismounted"%mountpoint)
    273295                        result=True                                     
    274296
    275                 return {"result":result,"msg":error_msg}
     297                return result
    276298
    277299
     
    291313                                dismount=self.dismount_mountpoint(mountpoint)
    292314
    293                                 if dismount["result"]:
     315                                if dismount:
    294316                                        if profile!="":
    295317                                                shutil.rmtree(os.path.join(GDRIVE_CONFIG_DIR+profile))
     
    301323                else:
    302324                        self.save_profiles(info)
    303                         error_msg=(_("'%s' GDrive profile path does not exist")%profile)
    304                         self.dprint(eror_msg)
    305                         return {"result":True,"msg":error_msg}
     325                        msg_log="'%s' GDrive profile path does not exist"%profile
     326                        self.dprint(msg_log)
     327                        self.log(msg_log)
     328                       
     329                        return True
    306330               
    307331       
     
    311335        def edit_profile(self,info,profile):
    312336
    313                 result={"result":True,"output":None,"error":None}
    314 
     337                result=True
    315338                old_mountpoint=self.profiles_config[profile]["mountpoint"]
    316339                old_automount=self.profiles_config[profile]["automount"]
     
    325348                                dismount=self.dismount_mountpoint(old_mountpoint)
    326349
    327                                 if len(dismount["error"])==0:
    328                                         self.dprint("'%s' mountpoint has been dismounted"%old_mountpoint)       
    329                        
    330                         result=self.mount_drive(profile,new_mountpoint)
    331 
    332                 if result["result"]:
     350                                if dismount:
     351                                        result=self.mount_drive(profile,new_mountpoint)
     352
     353                if result:
    333354                        self.save_profiles(info)
    334355               
     
    340361
    341362                if status["status"]:
    342                         dismount=self.dismount_mountpoint(mountpoint)
    343                         return False
    344 
    345                 else:
    346                          return self.mount_drive(profile,mountpoint)
     363                        action="Dismount"
     364                        result=self.dismount_mountpoint(mountpoint)
     365                       
     366                else:
     367                        action="Mount"
     368                        result=self.mount_drive(profile,mountpoint)
     369
     370                return {"action":action,"result":result}       
     371
     372
     373        def log(self,msg):
     374               
     375                log_file=self.config_dir+"lliurex-gdrive.log"
     376
     377                f=open(log_file,"a+")
     378                f.write(msg + '\n')
     379                f.close()               
    347380
    348381if __name__=="__main__":
  • lliurex-gdrive/trunk/fuentes/lliurex-gdrive-gui.install/usr/share/lliurex-gdrive/ProfileBox.py

    r3838 r3845  
    1515import psutil
    1616
    17 _=gettext.gettext
     17import gettext
     18gettext.textdomain('lliurex-gdrive')
     19_ = gettext.gettext
     20
    1821
    1922
     
    2528EDIT_IMAGE=RSRC+"rsrc/edit.svg"
    2629DELETE_IMAGE=RSRC+"rsrc/trash.svg"
    27 MAX_RETRY_INTENTS=90000
     30MAX_RETRY_INTENTS=900
    2831
    2932class ProfileBox(Gtk.VBox):
     
    4447                self.profile_list_vp=builder.get_object("profile_list_viewport")
    4548                self.msg_label=builder.get_object("msg_label")
     49
     50                image = Gtk.Image()
     51                image.set_from_stock(Gtk.STOCK_ADD,Gtk.IconSize.MENU)
    4652                self.add_new_profile_button=builder.get_object("add_new_profile_button")
     53                self.add_new_profile_button.set_image(image)
    4754                self.new_profile_window=builder.get_object("new_profile_window")
    4855                self.profile_label=builder.get_object("profile_label")
     
    5562                self.automount_entry=builder.get_object("automount_entry")
    5663                self.profile_msg=builder.get_object("profile_msg")
    57                 self.profile_pbar_label=builder.get_object("profile_pbar_label")
    5864                self.profile_pbar=builder.get_object("profile_pbar")
    5965                self.accept_add_profile_button=builder.get_object("accept_add_profile_button")
     
    6874                self.edition=False
    6975                self.profile_pbar.hide()
    70                 self.profile_pbar_label.hide()
    7176
    7277                self.init_threads()
     
    114119                self.mountpoint_label.set_name("OPTION_LABEL")
    115120                self.automount_label.set_name("OPTION_LABEL")
    116                 self.msg_label.set_name("OPTION_LABEL")
     121                self.msg_label.set_name("MSG_LABEL")
     122                self.profile_msg.set_name("MSG_LABEL")
     123
    117124               
    118125               
     
    165172                self.init_threads()
    166173               
    167                 self.profile_msg.set_text("")
     174                self.msg_label.hide()
     175                self.profile_msg.hide()
    168176                self.profile_pbar.hide()
    169177                self.new_profile_window.show()
     
    173181        def delete_profile_clicked(self,button,hbox):
    174182
     183                self.msg_label.hide()
    175184                profile=hbox.get_children()[1].get_text().split("\n")[0]
    176185                self.profiles_info.pop(profile)
    177186
    178                 self.core.LliurexGoogleDriveManager.delete_profile(self.profiles_info,profile)
    179                 self.profile_list_box.remove(hbox)
     187                self.profile_msg.set_name("MSG_LABEL")
     188                delete=self.core.LliurexGoogleDriveManager.delete_profile(self.profiles_info,profile)
     189                self.msg_label.show()
     190
     191                if delete:
     192                        self.msg_label.set_text(_("Changes applied successfully"))
     193                        self.profile_list_box.remove(hbox)
     194                else:
     195                        self.msg_label.set_name("MSG_ERROR_LABEl")
     196                        self.msg_label.set_text(_("An error ocurred applying changes. See log file for more information"))
     197
    180198                self.profiles_info=self.core.LliurexGoogleDriveManager.profiles_config.copy()
    181199
     
    186204        def sync_profile_clicked(self,button,hbox):
    187205
     206                self.msg_label.hide()
    188207                profile=hbox.get_children()[1].get_text().split("\n")[0]
    189208                mountpoint=hbox.get_children()[3].get_text()
    190209
    191                 status=self.core.LliurexGoogleDriveManager.sync_profile(profile,mountpoint)
    192 
    193                 if status:
    194                         mount_image=Gtk.Image.new_from_file(MOUNT_ON_IMAGE)
    195                         button.set_tooltip_text(_("Dismount profile"))
     210
     211                status_mod=self.core.LliurexGoogleDriveManager.sync_profile(profile,mountpoint)
     212                self.msg_label.show()
     213                self.profile_msg.set_name("MSG_LABEL")
     214
     215                if status_mod["result"]:
     216                        if status_mod["action"]=="Mount":
     217                                mount_image=Gtk.Image.new_from_file(MOUNT_ON_IMAGE)
     218                                button.set_tooltip_text(_("Dismount profile"))
     219                        else:
     220                                mount_image=Gtk.Image.new_from_file(MOUNT_OFF_IMAGE)
     221                                button.set_tooltip_text(_("Mount profile"))
     222
     223                        self.msg_label.set_text(_("Changes applied successfully"))
     224       
     225                                               
    196226                else:
    197                         mount_image=Gtk.Image.new_from_file(MOUNT_OFF_IMAGE)
    198                         button.set_tooltip_text(_("Mount profile"))
     227                        self.msg_label.set_name("MSG_ERROR_LABEl")
     228                        self.msg_label.set_text(_("An error ocurred applying changes. See log file for more information"))
    199229       
    200230                hbox.get_children()[4].set_image(mount_image)
     
    221251                self.profile_msg.set_text("")
    222252                self.profile_pbar.hide()
     253                self.msg_label.hide()
    223254                self.new_profile_window.show() 
    224255
     
    296327        def accept_add_profile_clicked(self,widget):
    297328
    298 
     329               
    299330                profile=self.profile_entry.get_text()
    300331                self.new_profile=profile.strip(" ")
     
    309340                self.profiles_info[self.new_profile]["automount"]=self.new_automount
    310341
    311                 if self.core.LliurexGoogleDriveManager.check_profile_info(self.new_profile,self.new_mountpoint,self.edition):
    312 
     342                check_form=self.check_profile_info()
     343                self.profile_msg.show()
     344
     345                if check_form["result"]:
    313346                        if not self.edition:
    314347                                if not self.create_profile_t.launched:
    315                                         self.profile_msg.set_text(_("Now a browser window will be open to grant permison\n.When a google-appear close a browser"))
     348                                        self.profile_msg.set_name("MSG_LABEL")
     349                                        self.profile_msg.set_text(_("Connecting with google to get account access..."))
    316350                                        self.profile_pbar.show()
    317351                                        self.retry=0
     
    321355                        else:
    322356                                if not self.edit_profile_t.launched:
     357                                        self.profile_msg.set_text(_("Apply changes"))
     358                                        self.profile_pbar.show()
    323359                                        GLib.timeout_add(100,self.pulsate_edit_profile)
    324360                else:
    325                         self.profile_msg.set_text(_("Error in entry form"))                             
     361                        self.profile_msg.set_name("MSG_ERROR_LABEL")
     362                        self.profile_msg.set_text(check_form["msg"])                           
    326363                               
    327364               
    328365       
    329         #def accept_add_profile_clickedef       
     366        #def accept_add_profile_clicked
     367
     368        def check_profile_info(self):
     369
     370                msg_check=""
     371
     372                check_form=self.core.LliurexGoogleDriveManager.check_profile_info(self.new_profile,self.new_mountpoint,self.edition)
     373
     374                if not check_form["result"]:
     375                        if check_form["code"]==1:
     376                                msg_check=_("You must indicate a profile")
     377
     378                        else:
     379                                if check_form["code"]==2:
     380                                        msg_check=_("Profile already exists")
     381                                else:
     382                                        msg_check=_("Mounting point already used by another profile")   
     383
     384
     385                return {"result":check_form["result"],"msg":msg_check}
     386
     387        #def check_profile_info
    330388
    331389        def pulsate_add_profile(self):
     
    335393               
    336394                if not self.create_profile_t.launched:
     395                        self.accept_add_profile_button.hide()
     396                        self.cancel_add_profile_button.hide()
     397               
    337398                        self.create_profile_t.start()
    338399                        self.create_profile_t.launched=True
     
    340401                if not self.create_profile_t.is_alive():
    341402                        if not self.create_mountpoint_t.launched:
     403                                self.profile_msg.set_text(_("Creating profile... "))
    342404                                self.create_mountpoint_t.start()
    343405                                self.create_mountpoint_t.launched=True
    344406
    345407                        if self.create_mountpoint_t.done:
    346                                 if self.create_result["result"]:
     408                                self.profile_pbar.hide()
     409                                if self.create_result:
    347410                                                self.new_profile_button(self.new_profile,self.new_email,self.new_mountpoint)
    348411                                                self.profiles_info=self.core.LliurexGoogleDriveManager.profiles_config.copy()   
    349                                                 self.new_profile_window.hide() 
     412                                                self.profile_msg.set_text(_("Profile created successfully"))
     413
     414                                                image = Gtk.Image()
     415                                                image.set_from_stock(Gtk.STOCK_CLOSE,Gtk.IconSize.MENU)
     416                                                self.cancel_add_profile_button.set_image(image)
     417                                                self.cancel_add_profile_button.set_label(_("Close"))   
     418                                                self.cancel_add_profile_button.show()
    350419                                else:
    351                                         self.profile_pbar.hide()
    352                                         self.profile_msg.set_text(_("An error ocurrend creating profile:" + str(self.create_result["msg"])))
    353 
    354                                 return False
     420                                       
     421                                        self.profile_msg.set_name("MSG_ERROR_LABEL")
     422                                        self.profile_msg.set_text(_("An error ocurred creating profile. See log file for more information"))
     423                                        self.cancel_add_profile_button.show()
     424                                       
     425                               
     426                                return False   
    355427                                               
    356428                if self.create_profile_t.launched:
    357429                        if self.create_profile_t.is_alive():
    358                                 if self.retry>MAX_RETRY_INTENTS:
    359                                         parent=psutil.Process(self.create_profile_t.pid)
    360                                         for child in parent.children(recursive=True):
    361                                                 child.kill()
    362                                         self.create_profile_t.terminate()       
    363                                         return True
    364                                 else:   
    365                                         return True
    366                                        
     430                                self.kill_create_profile()
     431                                return True     
     432                               
     433
    367434                if self.create_mountpoint_t.launched:
    368435                        if not self.create_mountpoint_t.done:
    369436                                return True                                     
    370437
     438        def kill_create_profile(self):
     439       
     440                if self.retry>MAX_RETRY_INTENTS:
     441                        parent=psutil.Process(self.create_profile_t.pid)
     442                        for child in parent.children(recursive=True):
     443                                child.kill()
     444                                self.create_profile_t.terminate()
     445                                self.profile_msg.set_text(_("Error getting authorization"))
     446
     447                        return True     
     448
     449
    371450        def create_profile(self):
    372451                result=self.core.LliurexGoogleDriveManager.create_profile(self.new_profile)
     
    386465                        self.edit_profile_t.start()
    387466                        self.edit_profile_t.launched=True
     467                        self.accept_add_profile_button.hide()
     468                        self.cancel_add_profile_button.hide()
    388469
    389470                if self.edit_profile_t.done:
    390                         print self.edit_result
    391                         if self.edit_result["result"]:
     471                        self.profile_pbar.hide()
     472                        if self.edit_result:
    392473                                self.profile_to_edit.get_children()[3].set_text(self.new_mountpoint)
    393474                                self.profiles_info=self.core.LliurexGoogleDriveManager.profiles_config.copy()   
    394                                 self.new_profile_window.hide() 
    395                                 return False
    396                                                
    397 
     475                                self.profile_msg.set_text(_("Changes applied successfully"))
     476                                image = Gtk.Image()
     477                                image.set_from_stock(Gtk.STOCK_CLOSE,Gtk.IconSize.MENU)
     478                                self.cancel_add_profile_button.set_image(image)
     479                                self.cancel_add_profile_button.set_label(_("Close"))   
     480                                self.cancel_add_profile_button.show()   
     481                       
     482                        else:
     483                                self.profile_msg.set_name("MSG_ERROR_LABEL")
     484                                self.profile_msg.set_text(_("An error ocurred applying changes. See log file for more information"))
     485                                self.cancel_add_profile_button.show()
     486                        return False
     487                       
    398488
    399489                if self.edit_profile_t.launched:
  • lliurex-gdrive/trunk/fuentes/lliurex-gdrive-gui.install/usr/share/lliurex-gdrive/lliurex-gdrive.css

    r3781 r3845  
    77                font: Roboto Light;
    88
     9        }
     10
     11        #MSG_LABEL {
     12
     13                color: #3366cc;
     14                font: Roboto Bold 11;
     15                       
     16        }       
     17
     18        #MSG_ERROR_LABEL {
     19
     20                color: #CC0000;
     21                font: Roboto Bold 11;
    922        }
    1023
  • lliurex-gdrive/trunk/fuentes/lliurex-gdrive-gui.install/usr/share/lliurex-gdrive/rsrc/lliurex-gdrive.ui

    r3838 r3845  
    218218            <property name="visible">True</property>
    219219            <property name="can_focus">False</property>
     220            <property name="margin_left">5</property>
     221            <property name="margin_right">5</property>
     222            <property name="margin_top">10</property>
     223            <property name="margin_bottom">5</property>
    220224          </object>
    221225          <packing>
     
    235239                <property name="can_focus">True</property>
    236240                <property name="receives_default">True</property>
     241                <property name="margin_right">5</property>
    237242                <property name="use_stock">True</property>
    238243              </object>
     
    250255                <property name="can_focus">True</property>
    251256                <property name="receives_default">True</property>
     257                <property name="margin_right">5</property>
    252258                <property name="use_stock">True</property>
    253259              </object>
     
    273279            <property name="orientation">vertical</property>
    274280            <child>
    275               <object class="GtkLabel" id="profile_pbar_label">
    276                 <property name="visible">True</property>
    277                 <property name="can_focus">False</property>
    278                 <property name="margin_bottom">5</property>
    279                 <property name="use_markup">True</property>
    280                 <property name="xalign">0</property>
    281               </object>
    282               <packing>
    283                 <property name="expand">False</property>
    284                 <property name="fill">True</property>
    285                 <property name="position">0</property>
    286               </packing>
    287             </child>
    288             <child>
    289281              <object class="GtkProgressBar" id="profile_pbar">
    290282                <property name="visible">True</property>
    291283                <property name="can_focus">False</property>
     284                <property name="margin_left">5</property>
     285                <property name="margin_right">5</property>
    292286                <property name="margin_top">5</property>
    293287                <property name="margin_bottom">5</property>
Note: See TracChangeset for help on using the changeset viewer.