Ignore:
Timestamp:
Mar 27, 2017, 10:21:04 AM (2 years ago)
Author:
jrpelegrina
Message:

End fix code to add check connection. Add spinner to indicator

Location:
lliurex-gdrive/trunk/fuentes/lliurex-gdrive-indicator.install/usr
Files:
5 added
1 edited

Legend:

Unmodified
Added
Removed
  • lliurex-gdrive/trunk/fuentes/lliurex-gdrive-indicator.install/usr/bin/lliurexGdriveIndicator

    r4029 r4032  
    3535MOUNT_OFF_IMAGE=RSRC+"rsrc/mount_off.png"
    3636MOUNT_WARNING_IMAGE=RSRC+"rsrc/mount_warning.png"
    37 
    38 TIME_CHECK_STATUS=300000
     37SP1=RSRC+"rsrc/sp1.png"
     38SP2=RSRC+"rsrc/sp2.png"
     39SP3=RSRC+"rsrc/sp3.png"
     40SP4=RSRC+"rsrc/sp4.png"
     41
     42TIME_CHECK_STATUS=60000
    3943
    4044class LlliurexGdriveIndicator:
     
    6064                self.populate_menu()
    6165                self.start_inotify()
    62                 self.connect_threads={}
    63                 self.result_connect_threads={}
     66                self.sync_threads={}
     67                self.result_sync_threads={}
    6468                self.profile_clicked=[]
     69                self.sp_cont={}
     70                self.sp_img={}
    6571                self.checking_status=False
    6672               
     
    7581                return
    7682
    77         def generate_threads(self):
     83        def generate_sync_threads(self,profile):
    7884               
    7985                id=int(random.random()*1000)           
    80                 t=threading.Thread(target=self.check_connection,args=(id,))
     86                t=threading.Thread(target=self.check_sync,args=(id,profile))
    8187                t.daemon=True
    8288                t.start()
    83                 self.connect_threads[id]={}
    84                 self.connect_threads[id]["thread"]=t
    85                 self.result_connect_threads[id]={}
     89                self.sync_threads[id]={}
     90                self.sync_threads[id]["thread"]=t
     91                self.result_sync_threads[id]={}
    8692                return id
    87 
     93       
     94        def init_connect_thread(self):
     95               
     96                self.check_connect_t=threading.Thread(target=self.check_connect)
     97                self.check_connect_t.daemon=True
     98                self.check_connect_t.start()
     99               
    88100        def createLockToken(self):
    89101
     
    171183                        self.current_status[profile]=status_info["status"]     
    172184                else:
    173                         info={}
    174                         img=Gtk.Image.new_from_file(MOUNT_WARNING_IMAGE)
    175                         tooltip=_("With out connect")
    176                         used_size=_("Used: not available")
    177                         info["img"]=img
    178                         info["tooltip"]=tooltip
    179                         info["used_size"]=used_size
    180                        
    181                        
     185                        status_info={}
     186                        status_info['status']=None
     187                        status_info['size']=0
     188                        status_info['used']=0
     189                        info=self.item_status_info(status_info)
     190                        self.current_status[profile]=None
     191                               
    182192                label_item=profile     
    183193                item=Gtk.ImageMenuItem()
     
    269279                if profile not in self.profile_clicked:
    270280                        self.profile_clicked.append(profile)
    271                         id=self.generate_threads()
    272                         GLib.timeout_add(100,self.pulsate_check_connection,id,widget,profile)
    273 
     281                        id=self.generate_sync_threads(profile)
     282                        self.sp_cont[id]=0
     283                        self.sp_img[id]=Gtk.Image.new_from_file(SP1)
     284                        GLib.timeout_add(100,self.pulsate_check_sync,id,widget,profile)
     285                       
    274286               
    275287        #def item_clicked
    276288
    277         def pulsate_check_connection(self,id,widget,profile):
    278                
    279                
    280                 if self.connect_threads[id]["thread"].is_alive():
     289        def spinner_sync(self,id):
     290       
     291                if self.sp_cont[id]>40:
     292                        self.sp_cont[id]=0
     293                       
     294                if self.sp_cont[id]==0:
     295                        img=Gtk.Image.new_from_file(SP1)
     296                        self.sp_img[id]=img
     297                elif self.sp_cont[id]==10:
     298                        img=Gtk.Image.new_from_file(SP2)
     299                        self.sp_img[id]=img                     
     300                elif self.sp_cont[id]==20:
     301                        img=Gtk.Image.new_from_file(SP3)
     302                        self.sp_img[id]=img
     303                elif self.sp_cont[id]==30:
     304                        img=Gtk.Image.new_from_file(SP4)
     305                        self.sp_img[id]=img
     306                               
     307               
     308                       
     309        def pulsate_check_sync(self,id,widget,profile):
     310               
     311               
     312                if self.sync_threads[id]["thread"].is_alive():
     313                        self.spinner_sync(id)
     314                        widget.set_image(self.sp_img[id])
     315                        widget.set_tooltip_text(_("Applying changes..."))       
     316                        self.sp_cont[id]=self.sp_cont[id]+1
    281317                        return True
    282318               
    283319                else:
    284320                        self.profile_clicked.remove(profile)
    285                         if self.result_connect_threads[id]["value"]:
    286                                 self.connect_threads.pop(id)
    287                                 self.result_connect_threads.pop(id)
    288                                 mountpoint=self.profiles_info[profile]["mountpoint"]
    289                                 status_info=self.LliurexGoogleDriveManager.check_mountpoint_status(mountpoint)
    290                                
    291                                 if self.current_status[profile]==status_info["status"]:
    292                                         status_mod=self.LliurexGoogleDriveManager.sync_profile(profile,mountpoint)
    293 
    294                                         if status_mod["result"]:
    295                                                 status_info=self.LliurexGoogleDriveManager.check_mountpoint_status(mountpoint)
     321                        self.current_status[profile]=self.result_sync_threads[id]["status_info"]["status"]     
     322                        if self.result_sync_threads[id]["status_mod"]["result"]==False:
     323                                if self.result_sync_threads[id]["status_mod"]["code"]==8:
     324                                        message=profile + _("Error: Unable to connect with google")     
     325                                else:
     326                                        status=self.current_status[profile]
     327                                        if status:
     328                                                action=_("dismount")
     329                                        else:
     330                                                action=_("mount")       
     331                                        message=_("Error: Unable to ") + action + " "
     332                        else:
     333                                if self.result_sync_threads[id]["status_mod"]["code"]==9:
     334                                        message=_("Status updated. Now you can change it")
     335                                else:
     336                                        message=_("Changes applied successfully")
     337                       
     338                        self.show_message(profile + ". " + message)
     339                       
     340                        info=self.item_status_info(self.result_sync_threads[id]["status_info"])
     341                       
     342                        for item in self.menu.get_children():
     343                                        if item.size:
     344                                                if item.profile==profile:
     345                                                        item.set_label(info["used_size"])
     346                               
     347                        widget.set_tooltip_text(info["tooltip"])
     348                        widget.set_image(info["img"])   
     349                        self.sync_threads.pop(id)
     350                        self.sp_cont.pop(id)
     351                        self.sp_img.pop(id)
     352                        self.result_sync_threads.pop(id)
     353               
     354                return False
     355                       
     356       
     357        def     check_sync(self,id,profile):
     358               
     359                mountpoint=self.profiles_info[profile]["mountpoint"]
     360
     361                current_status=self.current_status[profile]
     362               
     363                self.result_sync_threads[id]["status_mod"],self.result_sync_threads[id]["status_info"]=self.LliurexGoogleDriveManager.sync_profile(profile,mountpoint,current_status)
     364
     365
     366                #self.result_connect_threads[id]["value"]=self.LliurexGoogleDriveManager.check_google_connection()
     367       
     368        def open_folder(self,widget,profile):
     369
     370               
     371                mountpoint=self.profiles_info[profile]["mountpoint"]
     372                cmd="caja " + mountpoint.encode("utf-8")
     373
     374                os.system(cmd) 
     375
     376        #def open_folder       
     377
     378        def open_gui(self,widget):
     379               
     380                if not os.path.exists(LOCK_GUI):
     381                        cmd='/usr/bin/lliurex-gdrive' +"&"
     382                        os.system(cmd)
     383
     384        #def open_gui
     385               
     386        def item_status_info(self,status_info):
     387       
     388                size=status_info["size"]
     389                used=status_info["used"]
     390
     391                if status_info['status']==None:
     392                        img=Gtk.Image.new_from_file(MOUNT_WARNING_IMAGE)
     393                        tooltip=_("Without connection. Clicked to update")
     394                        used_size=_("Used: not available")
     395               
     396                elif    status_info["status"]:
     397                        img=Gtk.Image.new_from_file(MOUNT_ON_IMAGE)
     398                        tooltip=_("Mounted. Clicked to dismount now")
     399                        used_size=_("Used: %s of %s")%(used,size)
     400               
     401                else:
     402                        img=Gtk.Image.new_from_file(MOUNT_OFF_IMAGE)
     403                        tooltip=_("Dismounted. Clicked to mount now")
     404                        used_size=_("Used: not available")     
     405
     406                return {"img":img ,"tooltip":tooltip, "used_size":used_size}   
     407
     408        #def item_status_info                   
     409
     410        def check_status(self):
     411               
     412                if not self.checking_status:
     413                        self.checking_status=True
     414                        self.init_connect_thread()
     415                        GLib.timeout_add(100,self.get_status_info,id)
     416
     417                return True
     418               
     419               
     420        #def check_status
     421       
     422        def get_status_info(self,id):
     423               
     424                if self.check_connect_t.is_alive():
     425                        return True
     426               
     427                else:   
     428                        self.checking_status=False
     429                        #self.connect_threads.pop(id)
     430                        for profile in self.profiles_info:
     431                                if self.connection:
     432                                        mountpoint=self.profiles_info[profile]["mountpoint"]
     433                                        status_info=self.LliurexGoogleDriveManager.check_mountpoint_status(mountpoint)
     434                                else:
     435                                        status_info={}
     436                                        status_info['status']=None
     437                                        status_info['size']=0
     438                                        status_info['used']=0
    296439                                       
    297440                                info=self.item_status_info(status_info)
    298441                                self.current_status[profile]=status_info["status"]
    299                        
    300                                 for item in self.menu.get_children():
    301                                         if item.size:
    302                                                 if item.profile==profile:
    303                                                         item.set_label(info["used_size"])
    304                         else:
    305                                 info={}
    306                                 info["tooltip"]=_("With out connect")
    307                                 info["used_size"]=_("Used: not available")
    308                                 img=Gtk.Image.new_from_file(MOUNT_WARNING_IMAGE)
    309                                 info["img"]=img
    310                                 for item in self.menu.get_children():
    311                                         if item.size:
    312                                                 if item.profile==profile:
    313                                                         item.set_label(info["used_size"])
    314                                 status=self.current_status[profile]
    315                                 if status:
    316                                         action=_("dismount")
    317                                 else:
    318                                         action=_("mount")       
    319                                 message=_("Unable to ") + action + " " + profile.encode("utf-8")
    320                                 self.show_message(message)
    321 
    322 
    323                         widget.set_tooltip_text(info["tooltip"])
    324                         widget.set_image(info["img"])   
    325                
    326                 return False
    327                        
    328        
    329         def     check_connection(self,id):
    330 
    331                 self.result_connect_threads[id]["value"]=self.LliurexGoogleDriveManager.check_google_connection()
    332        
    333         def open_folder(self,widget,profile):
    334 
    335                
    336                 mountpoint=self.profiles_info[profile]["mountpoint"]
    337                 cmd="caja " + mountpoint.encode("utf-8")
    338 
    339                 os.system(cmd) 
    340 
    341         #def open_folder       
    342 
    343         def open_gui(self,widget):
    344                
    345                 if not os.path.exists(LOCK_GUI):
    346                         cmd='/usr/bin/lliurex-gdrive' +"&"
    347                         os.system(cmd)
    348 
    349         #def open_gui
    350                
    351         def item_status_info(self,status_info):
    352        
    353                 size=status_info["size"]
    354                 used=status_info["used"]
    355 
    356                 if status_info["status"]:
    357                         img=Gtk.Image.new_from_file(MOUNT_ON_IMAGE)
    358                         tooltip=_("Dismount now")
    359                         used_size=_("Used: %s of %s")%(used,size)
    360                
    361                 else:
    362                         img=Gtk.Image.new_from_file(MOUNT_OFF_IMAGE)
    363                         tooltip=_("Mount now")
    364                         used_size=_("Used: not available")     
    365 
    366                 return {"img":img ,"tooltip":tooltip, "used_size":used_size}   
    367 
    368         #def item_status_info                   
    369 
    370         def check_status(self):
    371                
    372                 if not self.checking_status:
    373                         self.checking_status=True
    374                         id=self.generate_threads()
    375                         GLib.timeout_add(100,self.get_status_info,id)
    376 
    377                 return True
    378                
    379                
    380         #def check_status
    381        
    382         def get_status_info(self,id):
    383                
    384                 if self.connect_threads[id]["thread"].is_alive():
    385                         return True
    386                
    387                 else:   
    388                         self.checking_status=False
    389                         self.connect_threads.pop(id)
    390                         if self.result_connect_threads[id]["value"]:
    391                                 for profile in self.profiles_info:
    392                                         mountpoint=self.profiles_info[profile]["mountpoint"]
    393                                         status_info=self.LliurexGoogleDriveManager.check_mountpoint_status(mountpoint)
    394                                         info=self.item_status_info(status_info)
    395                                         self.current_status[profile]=status_info["status"]
     442                                                               
    396443                                for item in self.menu.get_children():
    397444                                        if item.profile==profile:
     
    401448                                                        item.set_tooltip_text(info["tooltip"])
    402449                                                        item.set_image(info["img"])
    403 
    404 
    405                         else:
    406                                 info={}
    407                                 img["tooltip"]=_("With out connect")
    408                                 img["used_size"]=_("Used: not available")
    409                                                        
    410                                 for profile in self.profiles_info:
    411                                         img=Gtk.Image.new_from_file(MOUNT_OFF_IMAGE)
    412                                         img["img"]=img
    413                                         for item in self.menu.get_children():
    414                                                 if item.profile==profile:
    415                                                         if item.size:
    416                                                                 item.set_label(info["used_size"])
    417                                                         if item.status:
    418                                                                 item.set_tooltip_text(info["tooltip"])
    419                                                                 item.set_image(info["img"])     
    420                        
    421                
    422                 self.result_connect_threads.pop(id)             
     450               
     451                #self.result_connect_threads.pop(id)           
    423452                return False   
    424453                                       
     454        def check_connect(self):
     455               
     456                self.connection=self.LliurexGoogleDriveManager.check_google_connection()
     457
    425458       
    426459        def show_message(self,message):
Note: See TracChangeset for help on using the changeset viewer.