def analyzeText(self, command): if not self.startedReminder: self.startReminder() self.startedReminder = True if "wikipedia" in command: # top_grid = GridLayout( # # row_force_default = True, # # row_default_height = 40, # # col_force_default = True, # # col_default_width = 500 # ) # top_grid.cols = 1 # self.speak("Searching wikipedia") top_grid = GridLayout() top_grid.cols = 1 command = command.replace("wikipedia ", "") results = wikipedia.summary(command, sentences=2) label = Label(text=results) label.size_hint = (1, None) label.v_align = "middle" label.h_align = "middle" label.font_size = '18dp' # label.pos_hint = top_grid.width/2, top_grid.height/2 label.bind(size=label.setter('text_size')) top_grid.add_widget(label) button_grid = RelativeLayout() button_grid.cols = 1 cancelButton = Button(text="Close", size_hint=(.1, .075), pos_hint={ 'center_x': .95, 'center_y': .95 }) button_grid.add_widget(cancelButton) top_grid.add_widget(button_grid) # Instantiate the modal popup and display popup = Popup(title=f'Summary of "{command}"', content=top_grid, auto_dismiss=False) def onOpen(miss): # threading.Thread(target=self.speak, args=(results,)).start() self.speak(results) popup.bind(on_open=onOpen) cancelButton.bind(on_press=popup.dismiss) popup.open() cancelButton.bind(on_press=popup.dismiss) # elif "open youtube" in command: # webbrowser.open("www.youtube.com") elif "what can you do" in command: self.speak( "Hello! I am Unisys Natural Assistant. Let me take you through what I am capable of!" ) self.speak("Want me to send your emails? Done!") self.speak("Want me to search wikipedia? Done!") self.speak( "What about summarize your meetings and make your life easier? Done!" ) self.speak("Want me to open your favorite website? Done!") self.speak("Want me to take you through your day? Done!") self.speak("Want me to remind you that I am the best? Done!") self.speak("Okay! See you soon! sending you back to my creators!") elif "open" in command: command = command.replace("open", "").strip() self.speak(f"opening {command}") print(command) webbrowser.open(f"www.{command}.com") # elif "add" in command and ("todo" in command or "to do" in command): # r = sr.Recognizer() # with sr.Microphone() as source: # print('In Add Todo') # audio = r.listen(source) # time.sleep(1) # try: # todo = r.recognize_google(audio) # todos.append(todo.lower()) # print(todo) # except: # print("Error") # self.speak("Sorry I didn't understand that, please try again.") # elif "show" in command and "todo" in command: # for todo in todos: # self.speak(todo) elif "mail" in command: s = get_subject() m = get_mail() get_receivers() attatch = attachments() receivers_string = ",".join(str(x) for x in receivers) # message = MIMEMultipart("alternative") # message["Subject"] = subject # message["From"] = sender # message["To"] = receivers_string # text = MIMEText(mail, "plain") # message.attach(text) # attachments() # try: # with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp: # smtp.login(sender, EMAIL_PASSWORD) # smtp.sendmail(sender, receivers, message.as_string()) # print("Done") # except Exception as e: # print(e) top_grid = GridLayout(row_force_default=False, row_default_height=20, col_force_default=False, col_default_width=200) top_grid.cols = 2 top_grid.add_widget(Label(text="Subject: ")) subject = TextInput(text=s, multiline=True) top_grid.add_widget(subject) top_grid.add_widget(Label(text="Body: ")) mail = TextInput(text=m, multiline=True) top_grid.add_widget(mail) top_grid.add_widget(Label(text="Receiver(s): ")) receiver = TextInput(text=receivers_string, multiline=True) top_grid.add_widget(receiver) if attatch != None: top_grid.add_widget(Label(text="Attatchment(if any) : ")) attatch = TextInput(text=attatch, multiline=True) top_grid.add_widget(attatch) cancelButton = Button(text="Cancel") top_grid.add_widget(cancelButton) closeButton = Button(text="Send") top_grid.add_widget(closeButton) # Instantiate the modal popup and display popup = Popup(title='Email', content=top_grid, size_hint=(None, None), size=(900, 450), auto_dismiss=False) popup.open() def onClose(miss): popup.dismiss() message = MIMEMultipart("alternative") message["Subject"] = subject.text message["From"] = sender message["To"] = receiver.text text = MIMEText(mail.text, "plain") message.attach(text) if attatch != None: try: files = os.listdir() filename = attatch.text print(filename) with open(os.getcwd() + "\\" + filename, "rb") as attachment: part = MIMEBase("application", "octet-stream") part.set_payload(attachment.read()) encoders.encode_base64(part) part.add_header( "Content-Disposition", f"attachment; filename= {filename}", ) message.attach(part) except Exception as e: print(e) try: with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp: smtp.login(sender, EMAIL_PASSWORD) smtp.sendmail(sender, receivers, message.as_string()) print("Done") except Exception as e: print(e) closeButton.bind(on_press=onClose) cancelButton.bind(on_press=popup.dismiss) elif "directory" in command: print(os.getcwd()) # elif "reminder" in command: # MyPopup().open() # elif "show" in command and "reminder" in command: # myres = ShowReminders() # for res in myres: # self.speak(res) elif "add" in command and "reminder" in command: self.speak("Name of reminder") s = self.speechInput() top_grid = GridLayout(row_force_default=True, row_default_height=40, col_force_default=True, col_default_width=200) top_grid.cols = 2 while True: try: self.speak('Date') d = f'{next(dtf.find_dates(self.speechInput()))}'.split( ' ')[0] print(d) break except: pass while True: try: self.speak('Time') t = f'{next(dtf.find_dates(self.speechInput()))}'.split( ' ')[1] print(t) break except: pass top_grid.add_widget(Label(text="Subject: ")) subject = TextInput(text=s, multiline=True) top_grid.add_widget(subject) top_grid.add_widget(Label(text="Date(YYYY/MM/DD): ")) date = TextInput(text=d, multiline=False) top_grid.add_widget(date) top_grid.add_widget(Label(text="Start Time(hh:mm:ss): ")) t = TextInput(text=t, multiline=False) top_grid.add_widget(t) cancelButton = Button(text="Cancel") top_grid.add_widget(cancelButton) closeButton = Button(text="Set") top_grid.add_widget(closeButton) # Instantiate the modal popup and display popup = Popup(title='Set Reminder', content=top_grid, size_hint=(None, None), size=(900, 450), auto_dismiss=False) popup.open() def onClose(miss): popup.dismiss() AddNewReminder(subject.text, f'{date.text} {t.text}') closeButton.bind(on_press=onClose) cancelButton.bind(on_press=popup.dismiss) elif "calendar" in command: global isAuth global account if not isAuth: event = namedtuple("event", "Start Subject Duration") # #from here CLIENT_ID = outlook_client_id SECRET_ID = outlook_secret_id credentials = (CLIENT_ID, SECRET_ID) # protocol = MSGraphProtocol() # scopes = ['Calendars.Read', 'Calendars.ReadWrite'] # account = Account(credentials, protocol=protocol) protocol = MSGraphProtocol() scopes = ['Calendars.Read', 'Calendars.ReadWrite'] account = Account(credentials, protocol=protocol) account.con.scopes = account.protocol.get_scopes_for(scopes) print(account.con.get_authorization_url(scopes=scopes)[0]) webbrowser.open( account.con.get_authorization_url(scopes=scopes)[0]) top_grid = GridLayout(row_force_default=True, row_default_height=100, col_force_default=True, col_default_width=800) top_grid.cols = 1 # label = Label(text=reminder_text) top_grid.add_widget(Label(text="URL: ")) url = TextInput() top_grid.add_widget(url) # label.pos_hint = top_grid.width/2, top_grid.height/2 bottom_grid = GridLayout(row_force_default=True, row_default_height=40, col_force_default=True, col_default_width=100) bottom_grid.cols = 2 cancelButton = Button(text="Cancel") bottom_grid.add_widget(cancelButton) submitButton = Button(text="Submit") bottom_grid.add_widget(submitButton) top_grid.add_widget(bottom_grid) # submitButton = Button(text="Submit") # top_grid.add_widget(submitButton) # Instantiate the modal popup and display popup = Popup(title='Paste Authenticated URL', content=top_grid, size_hint=(None, None), size=(900, 450), auto_dismiss=False) popup.open() def onSubmit(miss): print(url.text) if account.con.request_token(url.text, scopes=scopes): print('Authenticated!') global isAuth isAuth = True popup.dismiss() submitButton.bind(on_press=onSubmit) cancelButton.bind(on_press=popup.dismiss) # if account.authenticate(scopes=scopes): # print('Authenticated!') # isAuth = True if "show" in command and isAuth: top_grid = GridLayout(row_force_default=True, row_default_height=40, col_force_default=True, col_default_width=200) top_grid.cols = 2 while True: try: self.speak('End Date') d = f'{next(dtf.find_dates(self.speechInput()))}'.split( ' ')[0] print(d) break except: pass # while True: # try: # self.speak('End Time') # t = f'{next(dtf.find_dates(self.speechInput()))}'.split(' ')[1] # print(t) # break # except: # pass top_grid.add_widget(Label(text="End Date(YYYY/MM/DD): ")) endDate = TextInput(text=d, multiline=False) top_grid.add_widget(endDate) # top_grid.add_widget(Label(text="End Time(hh:mm:ss): ")) # endTime = TextInput(text = t, multiline=False) # top_grid.add_widget(endTime) cancelButton = Button(text="Cancel") top_grid.add_widget(cancelButton) closeButton = Button(text="Search") top_grid.add_widget(closeButton) # Instantiate the modal popup and display popup = Popup(title='Calendar', content=top_grid, size_hint=(None, None), size=(900, 450), auto_dismiss=False) popup.open() def onClose(miss): popup.dismiss() schedule = account.schedule() calendar = schedule.get_default_calendar() print(endDate) end = list(map(int, str(endDate.text).split('-'))) # eTime = list(map(int, str(endTime.text).split(':'))) q = calendar.new_query('start').greater_equal( datetime.datetime.today()) q.chain('and').on_attribute('end').less_equal( datetime.datetime(end[0], end[1], end[2], 5, 30)) events = calendar.get_events(query=q, include_recurring=False) allevents = [] allevents_text = "" for event in events: print(event) new_event = parse_event(event) print(new_event["date"], new_event["subject"], new_event["from"], new_event["to"]) allevents.append( f'{new_event["subject"]} on {new_event["date"]} from {new_event["from"]} to {new_event["to"]}' ) allevents_text = f'{new_event["subject"]} on {new_event["date"]} from {new_event["from"]} to {new_event["to"]}' + allevents_text allevents_text += "\n" print(allevents_text) print(q) if len(allevents_text) > 0: top_grid1 = GridLayout(row_force_default=True, row_default_height=60, col_force_default=True, col_default_width=900) top_grid1.cols = 1 for e in allevents[::-1]: label1 = Label(text=e) top_grid1.add_widget(label1) # label.pos_hint = top_grid.width/2, top_grid.height/2 cancelButton1 = Button(text="Close") top_grid1.add_widget(cancelButton1) # Instantiate the modal popup and display popup1 = Popup(title='All Events', content=top_grid1, size_hint=(None, None), size=(900, 450), auto_dismiss=False) def onOpen1(miss): self.speak("Your Schedule Looks Like This") for e in allevents[::-1]: self.speak(e) popup1.bind(on_open=onOpen1) popup1.open() cancelButton1.bind(on_press=popup1.dismiss) closeButton.bind(on_press=onClose) cancelButton.bind(on_press=popup.dismiss) elif "add" in command and isAuth: # add_event(account) top_grid = GridLayout(row_force_default=True, row_default_height=40, col_force_default=True, col_default_width=200) top_grid.cols = 2 # global startDate # global endDate, startTime, endTime self.speak("Subject of the event") s = self.speechInput() while True: try: self.speak('Date') d = f'{next(dtf.find_dates(self.speechInput()))}'.split( ' ')[0] print(d) break except: pass while True: try: self.speak('Start Time') t = f'{next(dtf.find_dates(self.speechInput()))}'.split( ' ')[1] print(t) break except: pass while True: try: self.speak('End Time') t1 = f'{next(dtf.find_dates(self.speechInput()))}'.split( ' ')[1] print(t) break except: pass top_grid.add_widget(Label(text="Subject: ")) subject = TextInput(text=s, multiline=True) top_grid.add_widget(subject) top_grid.add_widget(Label(text="Start Date(DD-MM-YYYY): ")) startDate = TextInput(text=d, multiline=False) top_grid.add_widget(startDate) top_grid.add_widget(Label(text="Start Time(hh:mm): ")) startTime = TextInput(text=t, multiline=False) top_grid.add_widget(startTime) top_grid.add_widget(Label(text="End Date(DD-MM-YYYY): ")) endDate = TextInput(text=d, multiline=False) top_grid.add_widget(endDate) top_grid.add_widget(Label(text="End Time(hh:mm): ")) endTime = TextInput(text=t1, multiline=False) top_grid.add_widget(endTime) cancelButton = Button(text="Cancel") top_grid.add_widget(cancelButton) closeButton = Button(text="Set") top_grid.add_widget(closeButton) # Instantiate the modal popup and display popup = Popup(title='Outlook Calendar', content=top_grid, size_hint=(None, None), size=(900, 450), auto_dismiss=False) popup.open() def onClose(miss): try: popup.dismiss() schedule = account.schedule() calendar = schedule.get_default_calendar() new_event = calendar.new_event() new_event.subject = subject.text start = list(map(int, str(startDate.text).split('-'))) end = list(map(int, str(endDate.text).split('-'))) sTime = list(map(int, str(startTime.text).split(':'))) eTime = list(map(int, str(endTime.text).split(':'))) print(start, end, sTime, eTime) # new_event.start = datetime.datetime(2021, 3, 7, 14, 30) # new_event.end = datetime.datetime(2021, 3, 7, 15, 0) new_event.start = datetime.datetime( start[0], start[1], start[2], sTime[0], sTime[1]) new_event.end = datetime.datetime( end[0], end[1], end[2], eTime[0], eTime[1]) new_event.save() except Exception as e: print(e) closeButton.bind(on_press=onClose) cancelButton.bind(on_press=popup.dismiss) elif "mom" in command or ( ("minutes " in command or "summarize" in command or "summarise" in command) and "meeting" in command): top_grid = GridLayout(row_force_default=True, row_default_height=100, col_force_default=True, col_default_width=800) top_grid.cols = 1 # label = Label(text=reminder_text) top_grid.add_widget(Label(text="File Name: ")) fileName = TextInput() top_grid.add_widget(fileName) # label.pos_hint = top_grid.width/2, top_grid.height/2 bottom_grid = GridLayout(row_force_default=True, row_default_height=40, col_force_default=True, col_default_width=100) bottom_grid.cols = 2 cancelButton = Button(text="Cancel") bottom_grid.add_widget(cancelButton) submitButton = Button(text="Submit") bottom_grid.add_widget(submitButton) top_grid.add_widget(bottom_grid) # Instantiate the modal popup and display popup = Popup(title='Minutes Of Meeting', content=top_grid, size_hint=(None, None), size=(900, 450), auto_dismiss=False) popup.open() def onSubmit(miss): subprocess.Popen(f"python una_mom.py {fileName.text}") popup.dismiss() submitButton.bind(on_press=onSubmit) cancelButton.bind(on_press=popup.dismiss) else: self.speak('Error')