import urllib import nautilus import pwd import getpass import grp import subprocess import os import os.path import locale import gettext locale.textdomain("lliurex-homework-harvester") gettext.textdomain("lliurex-homework-harvester") _=locale.gettext class LliurexHomeworkExtension(nautilus.MenuProvider): def __init__(self): self.file_list=[] #def init def get_groups(self,user): groups=[] for g in grp.getgrall(): if user in g.gr_mem: groups.append(g.gr_name) return groups #def get_groups def check_ownership(self,user,path): info=os.stat(path) path_user_owner=info[4] path_group_owner=info[5] info=pwd.getpwnam(user) user_uid=info[2] group_uid=info[3] if path_user_owner==user_uid or path_group_owner==group_uid: return True else: return False #def check_ownership def teachers_cb(self,menu,path): command=[] command.append("/usr/bin/lliurex-homework-harvester") command.append(path) subprocess.Popen(command,stdout=subprocess.PIPE) #def teachers_cb def students_cb(self,menu,files): command=[] command.append("/usr/bin/lliurex-homework-sender") for file in files: command.append(file) subprocess.Popen(command,stdout=subprocess.PIPE) #def students_cb def get_file_items(self, window, files): file_list=[] for file in files: filename = urllib.unquote(file.get_uri()[7:]) file_list.append(str(filename)) user=getpass.getuser() group_list=self.get_groups(user) if "teachers" in group_list: #one item only if len(file_list)>1 or len(file_list)==0: return #folders only if not os.path.isdir(file_list[0]): return if not self.check_ownership(user,file_list[0]): return item = nautilus.MenuItem('Nautilus::set_harverst_folder', _('Set this folder to receive homeworks...'), _('Set this folder to receive homeworks'), 'go-jump') item.connect('activate', self.teachers_cb, file_list[0]) return item, elif "students" in group_list: #STUDENT SIDE #files only for item in file_list: if not os.path.isfile(item): return item = nautilus.MenuItem('Nautilus::send_homework', _('Send file to teacher...'), _('Send file to teacher'), 'go-jump') item.connect('activate', self.students_cb, file_list) return item, else: return