예제 #1
0
	def on_remove_task_button_clicked(self,*arg):
		def is_current_selection_null():
			if not self.current_selection or not self.current_selection[1] :
				dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.INFO,
		        Gtk.ButtonsType.OK, "Attention.......")
				dialog.format_secondary_text("NO File is selected.!")
				dialog.run()
				dialog.destroy()
				return True
			else:	
				return False
		def after_delete_task(data,error):
			self.info_label.set_text("Deletion is done")
			self.init_view(self.bdstoken)
			self.spinn.destroy()

		if is_current_selection_null(): 
			return
		store,treepaths = self.current_selection
	

		for tpath in treepaths:
			task = ()
			for i in store[tpath]:
				task = task + (i,)
				
			task_id = task[5]
			self.spinn = SpinnerDialog(self)
			self.spinn.show()
			self.info_label.set_text("Deleting task %s "%task[1])
			utils.async_call(cloudapi.delete_task, self.bdstoken,task_id ,
						 callback=after_delete_task)
예제 #2
0
    def on_start_task_button_clicked(self, *arg):
        if self.is_current_selection_null():
            return
        self.spinn = SpinnerDialog(self)
        self.spinn.show()
        store, treepaths = self.current_selection
        self.q = queue.LifoQueue()

        for tpath in treepaths:

            print(store[tpath][2], store[tpath][4])
            row = store[tpath]
            num = row[0]
            filename = row[2]
            path = row[4]
            isdir = row[5]
            fsid = row[6]
            spath = row[8]
            if not self.in_list(row, self.downlink):
                print(filename, fsid)
                npath = os.path.join(path, filename)
                utils.async_call(cloudapi.get_dlink,
                                 self.tokens,
                                 fsid,
                                 npath,
                                 num,
                                 callback=self.get_down_link)
                self.downlink.append((filename, None, spath, fsid))
        print('0000sync888', self.downlink)
예제 #3
0
    def __init__(self, parent, url):
        Gtk.Dialog.__init__(
            self,
            "Verification Code",
            parent,
            0,
        )
        self.file_list = []
        #self.downlink = []
        #self.tokens = tokens
        self.url = url
        #self.bdstoken,sign1,sign3,timestamp = self.tokens
        self.vcodefile = "image/vcode.jpeg"
        self.set_default_size(300, 200)
        self.set_border_width(10)
        label = Gtk.Label("Please input verification code above to proceed.")
        self.spinn = SpinnerDialog(self)
        self.spinn.show()
        self.vcodeimg = Gtk.Image.new()

        self.box = self.get_content_area()
        self.entry = Gtk.Entry()
        self.entry.connect("activate", self.on_enter_entry)
        self.entry.set_can_focus(True)
        self.entry.grab_focus()
        self.liststore = Gtk.ListStore(GdkPixbuf.Pixbuf)
        pix = GdkPixbuf.Pixbuf.new_from_file("image/loading.gif")
        self.liststore.append([pix])
        iconview = Gtk.IconView.new()
        iconview.set_model(self.liststore)
        iconview.set_pixbuf_column(0)
        #self.liststore.append([pix])
        self.show_vcode("image/loading.gif", None)  #"image/loading.gif",

        self.box.add(iconview)
        #pix = GdkPixbuf.Pixbuf.new_from_file("image/loading.gif")
        #Gtk.Image.new_from_pixbuf(pix)
        button = Gtk.Button("Refresh Code")
        button.connect("clicked", self.on_click_refresh_clicked)
        self.on_click_refresh_clicked(button)

        #self.entry.set_text("Input vcode above")

        self.okbtn = self.add_button("OK", 22)
        self.okbtn.connect("clicked", self.on_click_OK_clicked)
        self.box.set_child_packing(button, False, False, 1, Gtk.PackType.START)

        self.box.set_spacing(8)
        self.box.add(label)

        self.box.add(self.entry)
        self.box.add(button)
        #self.box.add(okbtn)

        self.box.show_all()
예제 #4
0
    def on_click_login(self, button):
        self.username = self.uentry.get_text()
        self.password = self.pentry.get_text()
        if not self.username or not self.password:
            self.info_label.set_text("Username or Password is blank.")
            return
        self.info_label.set_text("Going to index")
        logger.info("Username|Password %s %s" % (self.username, self.password))
        self.spinn = SpinnerDialog(self)
        self.spinn.show()
        utils.async_call(auth.index, callback=self.after_goto_index)
        #bdstoken,sign1,sign3,timestamp = auth.index()

        print("click")
예제 #5
0
 def init_view(self, path):
     self.current_selection = None
     self.current_path = path
     logger.debug("Current Path: %s" % self.current_path)
     #list_json = cloudapi.list_path(self.current_path,500,
     #								settings.DRY,self.bdstoken)
     utils.async_call(cloudapi.list_path,
                      self.current_path,
                      500,
                      settings.DRY,
                      self.bdstoken,
                      callback=self.populate_view)
     #logger.debug("Size of list json: %s"%str(len(list_json)))
     #file_list = cloudapi.get_list(list_json)
     #logger.debug("Size of file_list: %s"%str(len(file_list)))
     #self.liststore.clear()
     #self.fill_liststore(file_list)
     #self.loading_spin.start()
     #self.loading_spin.show_all()
     self.spinn = SpinnerDialog(self)
     self.spinn.show()
     file_list = []
     pix_list = self.get_pix_list(file_list)
     self.fill_liststore(pix_list)
예제 #6
0
	def __init__(self,parent,tokens,save_path):
		Gtk.Dialog.__init__(self, "Download Task", parent, 0)
		self.file_list = []
		#self.downlink = []
		self.tokens = tokens
		
		self.bdstoken,sign1,sign3,timestamp = self.tokens
		#self.file_list = nlist
		#self.remove_list = file_list
		self.current_selection = None
		self.save_path = save_path
		#self.draw_widget(file_list)
		#def draw_widget(self,file_list):
		self.set_default_size(800, 500)
		self.set_border_width(10)


		box = self.get_content_area()

		##							   num,filename,size,status,path,
		#                              0   1       2        3     4    
		self.liststore = Gtk.ListStore(int,str, str, str,str,str)
		#self.liststore.connect("row-changed",self.row_changed)
		self.spinn = SpinnerDialog(self)
		self.spinn.show()
		self.init_view(self.bdstoken)


		#creating the treeview, making it use the filter as a model, and adding the columns
		self.treeview = Gtk.TreeView(model=self.liststore)
		for i, column_title in enumerate(["Num","File", "Size","Status", "Path"]):
						
			renderer = Gtk.CellRendererText()
			column = Gtk.TreeViewColumn(column_title, renderer,text=i)
			self.treeview.append_column(column)

		self.treeview.props.activate_on_single_click = False
		self.treeview.connect("row-activated",self.on_row_double_click)


		self.selection = self.treeview.get_selection()
		self.selection.connect("changed", self.on_tree_selection_changed)
		self.selection.set_mode(Gtk.SelectionMode.MULTIPLE)


		self.buttons = list()
		for act in ["Add Magnet or Ed2k Link File","Select All","Unselect All", "Remove Task"]:
			button = Gtk.Button(act)
			self.buttons.append(button)
			funcname = "on_%s_button_clicked"%act.lower().replace(" ","_")
			
			func = getattr(self, funcname)
			button.connect("clicked", func)


		self.scrollable_treelist = Gtk.ScrolledWindow()
		self.scrollable_treelist.set_vexpand(True)

		box.pack_start(self.scrollable_treelist, True, True, 0)


		for i, button in enumerate(self.buttons):
			#box.pack_start(self.buttons[i], False,False, 0)
			self.add_action_widget(self.buttons[i],i+1)
		self.scrollable_treelist.add(self.treeview)
	

		self.infobar = Gtk.InfoBar()
		self.infobar.set_message_type(Gtk.MessageType.ERROR)
		#box.pack_end(self.infobar, False, False, 0)
		#grid.attach_next_to(self.infobar,lbutton,Gtk.PositionType.BOTTOM,13,1)
		box.add(self.infobar)
		info_content = self.infobar.get_content_area()
		self.info_label = Gtk.Label.new("Add magnet/ed2k file to add offline download task")
		info_content.pack_start(self.info_label, False, False, 0)

		
		self.infobar.hide()
		box.show_all()
예제 #7
0
	def on_add_magnet_or_ed2k_link_file_button_clicked(self,*arg):
		dialog = Gtk.FileChooserDialog("Please choose a file", self,
			Gtk.FileChooserAction.OPEN,
			(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
			 Gtk.STOCK_OPEN, Gtk.ResponseType.OK))

		response = dialog.run()
		if response == Gtk.ResponseType.OK:
			#linkfile = dialog.get_file().read()
			filename = dialog.get_filename()
			
			print("Open clicked")
			print("File selected: " + dialog.get_filename())
		elif response == Gtk.ResponseType.CANCEL:
			return
		
		dialog.destroy()
		
		link_list = open(filename).read()
		task_list = []
		invalid_list = []
		for line in link_list.split("\n"):
			line = line.strip()
			if line and ( line.startswith("magnet:?xt=urn") or \
				 line.startswith("ed2k://") ):
				task_list.append(line)
				
			elif line:
				invalid_list.append(line)
		if invalid_list:
				dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.QUESTION,
						Gtk.ButtonsType.OK, "Attention")
				dialog.format_secondary_text(
						"Only magnet or ed2k protocal is support! Invalid lines :%s"%str(invalid_list))
				response = dialog.run()
				dialog.destroy()
				return 
		print(self.save_path)
		
		maglist = [ i['source_url'] for i in self.task_list   if "magnet:?xt=urn:" in i['source_url'] ]
		logger.debug("maglist: %s "%str(maglist))
		
		for i,l in enumerate(task_list):
			mag = re.search('(&.*$)',l).group(1)
			task_name = dict(urllib.parse.parse_qsl(mag))['dn']
			txt = "%s out of %s | %s is running."%(str(i),len(task_list),str(task_name))
			logger.info(txt)
			self.info_label.set_text(txt)
			maglink = re.search("(magnet[^&]*)",l).group(1)
			logger.debug("maglink: %s "%maglink)
			self.spinn = SpinnerDialog(self)
			self.spinn.show()
			if maglink not in maglist:
				
				self.info_label.set_text("Adding task: %s "%task_name)
				taskjson = cloudapi.add_task(self.bdstoken, l,self.save_path,self)
				self.init_view(self.bdstoken)
				self.spinn.destroy()

				#taskjson = cloudapi.add_task(l,self.save_path)
				logger.debug("taskjson: %s "%taskjson)
				if 'task_id' in taskjson.keys():
					self.spinn = SpinnerDialog(self)
					self.spinn.show()
					self.info_label.set_text("Querying task: %s "%task_name)
					task_id = str(taskjson['task_id'])
					utils.async_call(cloudapi.query_task, self.bdstoken,task_id,
							 callback=self.after_query_task)
					self.spinn.destroy()
				else:
					error = taskjson['error_msg']
					logger.info(error)
					self.info_label.set_text(error)
					#self.spinn.destroy()
				
			else:
				info = "Already existed,pass"
				logger.info(info)
				self.info_label.set_text(info)
			
				self.spinn.destroy()