Esempio n. 1
0
    def initialize(self):
        # Make Import For TimeData
        try:
            time_date_path = "/opt/mycroft/skills/skill-date-time.builderjer/__init__.py"
            time_date_id = "skilldatetime"
            datetimeskill = load_skill_module(time_date_path, time_date_id)
            from datetimeskill import TimeSkill
            self.dt_skill = TimeSkill()

        except:
            print("Failed To Import DateTime Skill")
Esempio n. 2
0
class Ziggy(MycroftSkill):
    def __init__(self):
        """ The __init__ method is called when the Skill is first constructed.
        It is often used to declare variables or perform setup actions, however
        it cannot utilise MycroftSkill methods as the class does not yet exist.
        """
        super(Ziggy, self).__init__(name="ZiggyAI")

    def initialize(self):
        # Make Import For TimeData
        try:
            time_date_path = "/opt/mycroft/skills/skill-date-time.builderjer/__init__.py"
            time_date_id = "skilldatetime"
            datetimeskill = load_skill_module(time_date_path, time_date_id)
            from datetimeskill import TimeSkill
            self.dt_skill = TimeSkill()

        except:
            print("Failed To Import DateTime Skill")

    @intent_handler(
        IntentBuilder('ShowHomeScreen').require('HomeScreenKeyword'))
    def handle_show_home_screen_intent(self, message):
        """ This is an Adapt intent handler, it is triggered by a keyword."""
        self.speak("show home screen")

    @intent_handler('HomeScreen.intent')
    def handle_how_are_you_intent(self, message):
        """ This is a Padatious intent handler.
        It is triggered using a list of sample phrases."""
        self.speak("home screen intent")

    @resting_screen_handler("ZiggyMain")
    def handle_idle(self, message):
        self.log.info("Ziggy main home screen")
        self.gui.clear()
        self.gui["title"] = self.name
        self.gui["time"] = self.dt_skill.get_display_current_time()
        self.gui["date"] = self.dt_skill.get_display_date()
        self.gui["weekday"] = self.dt_skill.get_weekday()
        self.gui.show_page("idle.qml")

    #
    # @intent_handler(IntentBuilder('HelloWorldIntent')
    #                 .require('HelloWorldKeyword'))
    # def handle_hello_world_intent(self, message):
    #     """ Skills can log useful information. These will appear in the CLI and
    #     the skills.log file."""
    #     self.log.info("There are five types of log messages: "
    #                   "info, debug, warning, error, and exception.")
    #     self.speak_dialog("hello.world")

    def stop(self):
        pass
Esempio n. 3
0
    def initialize(self):
        self.add_event('pixabay-skill.aiix.home',
                       self.handle_pixabay_homescreen)
        self.gui.register_handler("pixabay.show.image",
                                  self.handle_pixabay_show_image)
        self.gui.register_handler("pixabay.show.video",
                                  self.handle_pixabay_show_video)
        self.gui.register_handler("pixabay.gallery.next",
                                  self.handle_gallery_next_page)
        self.gui.register_handler("pixabay.gallery.previous",
                                  self.handle_gallery_previous_page)
        self.gui.register_handler("pixabay.idle.set_idle",
                                  self.handle_set_idlescreen_type)
        self.gui.register_handler("pixabay.idle.enableTime",
                                  self.handle_idle_enable_time)
        self.gui.register_handler("pixabay.idle.disableTime",
                                  self.handle_idle_disable_time)
        self.gui.register_handler("pixabay.idle.updateTime",
                                  self.handle_idle_update_time)
        self.gui.register_handler("pixabay.idle.removeConfigPage",
                                  self.handle_remove_configure_idle_screen)
        self.entKey = base64.b64decode(
            "MTcyMjI5NDctYTlmNTQxNmQ2ODhkNDVmNmJkZmY4ZWEzYQ==")
        self.video = Video(self.entKey)
        self.image = Image(self.entKey)
        self.shownPageNumber = None
        self.numberOfAvailablePages = None
        self.previousQuery = None
        self.currentType = None
        self.currentDir = dirname(dirname(abspath(__file__)))
        self.wantedDir = "pixabayData"
        self.dataPath = join(self.currentDir, self.wantedDir)
        self.videoPath = join(self.dataPath, "video.mp4")

        # Set All Paths
        try:
            os.mkdir(self.dataPath)
        except OSError as error:
            print("Directory Already Exist Skipping")
        self.storeDB = join(self.dataPath, 'pixabay-idle.db')
        self.idle_db = JsonStorage(self.storeDB)
        self.configDB = join(self.dataPath, 'pixabay-config.db')
        self.idle_config_db = JsonStorage(self.configDB)

        # Make Import For TimeData
        try:
            time_date_path = "/opt/mycroft/skills/mycroft-date-time.mycroftai/__init__.py"
            time_date_id = "datetimeskill"
            datetimeskill = load_skill_module(time_date_path, time_date_id)
            from datetimeskill import TimeSkill
            self.dt_skill = TimeSkill()
        except:
            print("Failed To Import DateTime Skill")
Esempio n. 4
0
    def initialize(self):
        self.add_event("pixabay.gallery.set_wallpaper", self.set_wallpaper)
        now = datetime.datetime.now()
        callback_time = (datetime.datetime(now.year, now.month, now.day,
                                           now.hour, now.minute) +
                         datetime.timedelta(seconds=60))
        self.schedule_repeating_event(self.update_dt, callback_time, 10)
        self.skill_manager = SkillManager(self.bus)

        # Make Import For TimeData
        root_dir = self.root_dir.rsplit('/', 1)[0]
        try:
            time_date_path = str(
                root_dir) + "/mycroft-date-time.mycroftai/__init__.py"
            time_date_id = "datetimeskill"
            datetimeskill = load_skill_module(time_date_path, time_date_id)
            from datetimeskill import TimeSkill
            self.dt_skill = TimeSkill()
        except:
            print("Failed To Import DateTime Skill")
Esempio n. 5
0
    def initialize(self):
        now = datetime.datetime.now()
        callback_time = datetime.datetime(
            now.year, now.month, now.day, now.hour,
            now.minute) + datetime.timedelta(seconds=60)
        self.schedule_repeating_event(self.update_dt, callback_time, 10)
        self.skill_manager = SkillManager(self.bus)

        # Handler Registeration For Notifications
        self.add_event("homescreen.notification.set",
                       self.handle_display_notification)
        self.gui.register_handler("homescreen.notification.set",
                                  self.handle_display_notification)
        self.gui.register_handler("homescreen.notification.pop.clear",
                                  self.handle_clear_notification_data)
        self.gui.register_handler("homescreen.notification.pop.clear.delete",
                                  self.handle_clear_delete_notification_data)
        self.gui.register_handler("homescreen.notification.storage.clear",
                                  self.handle_clear_notification_storage)
        self.gui.register_handler("homescreen.notification.storage.item.rm",
                                  self.handle_clear_notification_storage_item)

        self.collect_wallpapers()

        # Import Date Time Skill As Date Time Provider
        # TODO - replace with Skills API call in 21.02
        root_dir = self.root_dir.rsplit("/", 1)[0]
        try:
            time_date_path = str(
                root_dir) + "/mycroft-date-time.mycroftai/__init__.py"
            time_date_id = "datetimeskill"
            datetimeskill = load_skill_module(time_date_path, time_date_id)
            from datetimeskill import TimeSkill

            self.dt_skill = TimeSkill()
        except:
            self.log.info("Failed To Import DateTime Skill")
Esempio n. 6
0
class MycroftHomescreen(MycroftSkill):
    # The constructor of the skill, which calls MycroftSkill's constructor
    def __init__(self):
        super(MycroftHomescreen, self).__init__(name="MycroftHomescreen")
        self.skill_manager = None
        self.notifications_model = []
        self.notifications_storage_model = []
        self.wallpaper_folder = path.dirname(__file__) + '/ui/wallpapers/'
        self.selected_wallpaper = self.settings.get("wallpaper", "default.png")
        self.wallpaper_collection = []

    def initialize(self):
        now = datetime.datetime.now()
        callback_time = datetime.datetime(
            now.year, now.month, now.day, now.hour,
            now.minute) + datetime.timedelta(seconds=60)
        self.schedule_repeating_event(self.update_dt, callback_time, 10)
        self.skill_manager = SkillManager(self.bus)

        # Handler Registeration For Notifications
        self.add_event("homescreen.notification.set",
                       self.handle_display_notification)
        self.gui.register_handler("homescreen.notification.set",
                                  self.handle_display_notification)
        self.gui.register_handler("homescreen.notification.pop.clear",
                                  self.handle_clear_notification_data)
        self.gui.register_handler("homescreen.notification.pop.clear.delete",
                                  self.handle_clear_delete_notification_data)
        self.gui.register_handler("homescreen.notification.storage.clear",
                                  self.handle_clear_notification_storage)
        self.gui.register_handler("homescreen.notification.storage.item.rm",
                                  self.handle_clear_notification_storage_item)

        self.collect_wallpapers()

        # Import Date Time Skill As Date Time Provider
        # TODO - replace with Skills API call in 21.02
        root_dir = self.root_dir.rsplit("/", 1)[0]
        try:
            time_date_path = str(
                root_dir) + "/mycroft-date-time.mycroftai/__init__.py"
            time_date_id = "datetimeskill"
            datetimeskill = load_skill_module(time_date_path, time_date_id)
            from datetimeskill import TimeSkill

            self.dt_skill = TimeSkill()
        except:
            self.log.info("Failed To Import DateTime Skill")

    #####################################################################
    # Homescreen Registeration & Handling

    @resting_screen_handler("Mycroft Homescreen")
    def handle_idle(self, _):
        self.log.debug('Activating Time/Date resting page')
        self.gui['time_string'] = self.dt_skill.get_display_current_time()
        self.gui['date_string'] = self.dt_skill.get_display_date()
        self.gui['weekday_string'] = self.dt_skill.get_weekday()
        self.gui['month_string'] = self.dt_skill.get_month_date()
        self.gui['year_string'] = self.dt_skill.get_year()
        self.gui['build_date'] = self.build_info.get('build_date', '')
        self.gui['selected_wallpaper'] = self.selected_wallpaper
        self.gui['notification'] = {}
        self.gui["notification_model"] = {
            "storedmodel": self.notifications_storage_model,
            "count": len(self.notifications_storage_model),
        }
        self.gui.show_page("idle.qml")

    def handle_idle_update_time(self):
        self.gui["time_string"] = self.dt_skill.get_display_current_time()
        self.gui["date_string"] = self.dt_skill.get_display_date()
        self.gui["weekday_string"] = self.dt_skill.get_weekday()
        self.gui["month_string"] = self.dt_skill.get_month_date()
        self.gui["year_string"] = self.dt_skill.get_year()

    def update_dt(self):
        self.gui["time_string"] = self.dt_skill.get_display_current_time()
        self.gui["date_string"] = self.dt_skill.get_display_date()
        self.gui["weekday_string"] = self.dt_skill.get_weekday()
        self.gui["month_string"] = self.dt_skill.get_month_date()
        self.gui["year_string"] = self.dt_skill.get_year()

    #####################################################################
    # Build Info

    @property
    def build_info(self):
        """The /etc/mycroft/build-info.json file as a Dict."""
        data = {}
        filename = "/etc/mycroft/build-info.json"
        if (self.config_core["enclosure"].get("development_device")
                and Path(filename).is_file()):
            with open(filename, "r") as build_info:
                data = json.loads(build_info.read())
        return data

    #####################################################################
    # Wallpaper Manager

    def collect_wallpapers(self):
        for dirname, dirnames, filenames in os.walk(self.wallpaper_folder):
            self.wallpaper_collection = filenames

    @intent_file_handler("change.wallpaper.intent")
    def change_wallpaper(self, message):
        # Get Current Wallpaper idx
        current_idx = self.get_wallpaper_idx(self.selected_wallpaper)
        collection_length = len(self.wallpaper_collection) - 1
        if not current_idx == collection_length:
            fidx = current_idx + 1
            self.selected_wallpaper = self.wallpaper_collection[fidx]
            self.settings["wallpaper"] = self.wallpaper_collection[fidx]

        else:
            self.selected_wallpaper = self.wallpaper_collection[0]
            self.settings["wallpaper"] = self.wallpaper_collection[0]

        self.gui['selected_wallpaper'] = self.selected_wallpaper

    def get_wallpaper_idx(self, filename):
        try:
            index_element = self.wallpaper_collection.index(filename)
            return index_element
        except ValueError:
            return None

    #####################################################################
    # Manage notifications

    def handle_display_notification(self, message):
        """ Get Notification & Action """
        notification_message = {
            "sender": message.data.get("sender", ""),
            "text": message.data.get("text", ""),
            "action": message.data.get("action", ""),
            "type": message.data.get("type", ""),
        }
        if notification_message not in self.notifications_model:
            self.notifications_model.append(notification_message)
            self.gui["notifcation_counter"] = len(self.notifications_model)
            self.gui["notification"] = notification_message
            time.sleep(2)
            self.bus.emit(Message("homescreen.notification.show"))

    def handle_clear_notification_data(self, message):
        """ Clear Pop Notification """
        notification_data = message.data.get("notification", "")
        self.notifications_storage_model.append(notification_data)
        for i in range(len(self.notifications_model)):
            if (self.notifications_model[i]["sender"]
                    == notification_data["sender"]
                    and self.notifications_model[i]["text"]
                    == notification_data["text"]):
                if not len(self.notifications_model) > 0:
                    del self.notifications_model[i]
                    self.notifications_model = []
                else:
                    del self.notifications_model[i]
                break

        self.gui["notification_model"] = {
            "storedmodel": self.notifications_storage_model,
            "count": len(self.notifications_storage_model),
        }
        self.gui["notification"] = {}

    def handle_clear_delete_notification_data(self, message):
        """ Clear Pop Notification & Delete Notification Data """
        notification_data = message.data.get("notification", "")
        for i in range(len(self.notifications_model)):
            if (self.notifications_model[i]["sender"]
                    == notification_data["sender"]
                    and self.notifications_model[i]["text"]
                    == notification_data["text"]):
                if not len(self.notifications_model) > 0:
                    del self.notifications_model[i]
                    self.notifications_model = []
                else:
                    del self.notifications_model[i]
                break

    def handle_clear_notification_storage(self, _):
        """ Clear All Notification Storage Model """
        self.notifications_storage_model = []
        self.gui["notification_model"] = {
            "storedmodel": self.notifications_storage_model,
            "count": len(self.notifications_storage_model),
        }

    def handle_clear_notification_storage_item(self, message):
        """ Clear Single Item From Notification Storage Model """
        notification_data = message.data.get("notification", "")
        for i in range(len(self.notifications_storage_model)):
            if (self.notifications_storage_model[i]["sender"]
                    == notification_data["sender"]
                    and self.notifications_storage_model[i]["text"]
                    == notification_data["text"]):
                self.notifications_storage_model.pop(i)
                self.gui["notification_model"] = {
                    "storedmodel": self.notifications_storage_model,
                    "count": len(self.notifications_storage_model),
                }

    def stop(self):
        pass
Esempio n. 7
0
class PixabaySkill(MycroftSkill):

    # The constructor of the skill, which calls MycroftSkill's constructor
    def __init__(self):
        super(PixabaySkill, self).__init__(name="PixabaySkill")

    def initialize(self):
        self.add_event('pixabay-skill.aiix.home',
                       self.handle_pixabay_homescreen)
        self.gui.register_handler("pixabay.show.image",
                                  self.handle_pixabay_show_image)
        self.gui.register_handler("pixabay.show.video",
                                  self.handle_pixabay_show_video)
        self.gui.register_handler("pixabay.gallery.next",
                                  self.handle_gallery_next_page)
        self.gui.register_handler("pixabay.gallery.previous",
                                  self.handle_gallery_previous_page)
        self.gui.register_handler("pixabay.idle.set_idle",
                                  self.handle_set_idlescreen_type)
        self.gui.register_handler("pixabay.idle.enableTime",
                                  self.handle_idle_enable_time)
        self.gui.register_handler("pixabay.idle.disableTime",
                                  self.handle_idle_disable_time)
        self.gui.register_handler("pixabay.idle.updateTime",
                                  self.handle_idle_update_time)
        self.gui.register_handler("pixabay.idle.removeConfigPage",
                                  self.handle_remove_configure_idle_screen)
        self.entKey = base64.b64decode(
            "MTcyMjI5NDctYTlmNTQxNmQ2ODhkNDVmNmJkZmY4ZWEzYQ==")
        self.video = Video(self.entKey)
        self.image = Image(self.entKey)
        self.shownPageNumber = None
        self.numberOfAvailablePages = None
        self.previousQuery = None
        self.currentType = None
        self.currentDir = dirname(dirname(abspath(__file__)))
        self.wantedDir = "pixabayData"
        self.dataPath = join(self.currentDir, self.wantedDir)
        self.videoPath = join(self.dataPath, "video.mp4")

        # Set All Paths
        try:
            os.mkdir(self.dataPath)
        except OSError as error:
            print("Directory Already Exist Skipping")
        self.storeDB = join(self.dataPath, 'pixabay-idle.db')
        self.idle_db = JsonStorage(self.storeDB)
        self.configDB = join(self.dataPath, 'pixabay-config.db')
        self.idle_config_db = JsonStorage(self.configDB)

        # Make Import For TimeData
        try:
            time_date_path = "/opt/mycroft/skills/mycroft-date-time.mycroftai/__init__.py"
            time_date_id = "datetimeskill"
            datetimeskill = load_skill_module(time_date_path, time_date_id)
            from datetimeskill import TimeSkill
            self.dt_skill = TimeSkill()
        except:
            print("Failed To Import DateTime Skill")

    def handle_pixabay_homescreen(self, message):
        self.handle_pixabay_display("Homescreen")

    @intent_file_handler("PixabaySearchImage.intent")
    def handle_pixabay_search_image_type(self, message):
        query = message.data["query"]
        self.previousQuery = query
        self.shownPageNumber = 1
        self.currentType = "Image"
        ims = self.image.search(q=query,
                                lang='en',
                                image_type='photo',
                                orientation='vertical',
                                category='all',
                                safesearch='true',
                                order='latest',
                                page=1,
                                per_page=6)
        totalImages = ims['total']
        totalHits = ims['totalHits']
        self.handle_number_of_pages(totalImages, totalHits)
        self.gui["currentPageNumber"] = self.shownPageNumber
        self.gui["showMoreAvailable"] = self.handle_show_more_available(
            self.shownPageNumber)
        self.gui["imageGalleryModel"] = ims['hits']
        self.handle_pixabay_display("ImageGallery")

    def handle_pixabay_show_image(self, message):
        self.gui["imageURL"] = message.data["largeImageURL"]
        self.handle_pixabay_display("Image")

    @intent_file_handler("PixabaySearchVideo.intent")
    def handle_pixabay_search_video_type(self, message):
        query = message.data["query"]
        self.previousQuery = query
        self.shownPageNumber = 1
        self.currentType = "Video"
        vis = self.video.search(q=query,
                                lang='en',
                                video_type='all',
                                category='all',
                                page=1,
                                per_page=6)
        totalImages = vis['total']
        totalHits = vis['totalHits']
        print(totalImages)
        print(totalHits)
        self.handle_number_of_pages(totalImages, totalHits)
        self.gui["currentPageNumber"] = self.shownPageNumber
        self.gui["showMoreAvailable"] = self.handle_show_more_available(
            self.shownPageNumber)
        self.gui["videoGalleryModel"] = vis['hits']
        addr = vis['hits']
        print(addr)
        self.handle_pixabay_display("VideoGallery")

    def handle_pixabay_show_video(self, message):
        orignalurl = message.data['videourl']
        videoURL = self.handle_pixabay_extract_video(orignalurl)
        self.gui["videoURL"] = videoURL
        self.handle_pixabay_display("Video")

    def handle_pixabay_extract_video(self, videoURL):
        extractvideofromloc = requests.get(videoURL, allow_redirects=False)
        actualVideoUrl = extractvideofromloc.headers['location']
        r = requests.get(actualVideoUrl, stream=True)
        with open(self.videoPath, 'wb') as f:
            for chunk in r.iter_content(chunk_size=1024 * 1024):
                if chunk:
                    f.write(chunk)
        videoURL = self.videoPath
        return videoURL

    def handle_pixabay_display(self, state):
        if state is "Image":
            self.gui["setMessage"] = ""
            self.gui.show_page("Image.qml", override_idle=True)
        elif state is "Video":
            self.gui["setMessage"] = ""
            self.gui.show_page("Video.qml", override_idle=True)
        elif state is "Homescreen":
            self.gui.show_page("Homepage.qml", override_idle=True)
        else:
            self.gui["pageState"] = state
            self.gui.show_page("pixabayLoader.qml", override_idle=True)

    def handle_gallery_next_page(self, message):
        galleryType = message.data["galleryType"]
        pageNumber = message.data["currentPageNumber"]
        if pageNumber < self.numberOfAvailablePages:
            pageNumber = self.shownPageNumber + 1
            self.shownPageNumber = pageNumber
            if galleryType == "Image":
                ims = self.image.search(q=self.previousQuery,
                                        lang='en',
                                        image_type='all',
                                        orientation='vertical',
                                        category='all',
                                        safesearch='true',
                                        order='latest',
                                        page=self.shownPageNumber,
                                        per_page=6)
                self.gui["currentPageNumber"] = self.shownPageNumber
                self.gui[
                    "showMoreAvailable"] = self.handle_show_more_available(
                        self.shownPageNumber)
                self.gui["imageGalleryModel"] = ims['hits']
            elif galleryType == "Video":
                vis = self.video.search(q=self.previousQuery,
                                        lang='en',
                                        video_type='all',
                                        category='all',
                                        page=self.shownPageNumber,
                                        per_page=6)
                self.gui["currentPageNumber"] = self.shownPageNumber
                self.gui[
                    "showMoreAvailable"] = self.handle_show_more_available(
                        self.shownPageNumber)
                self.gui["videoGalleryModel"] = vis['hits']
                self.handle_pixabay_display("VideoGallery")
            else:
                print("Valid Type Not Found")

    def handle_gallery_previous_page(self, message):
        galleryType = message.data["galleryType"]
        pageNumber = message.data["currentPageNumber"]
        if pageNumber > 1:
            pageNumber = self.shownPageNumber - 1
            self.shownPageNumber = pageNumber
            if galleryType == "Image":
                ims = self.image.search(q=self.previousQuery,
                                        lang='en',
                                        image_type='all',
                                        orientation='all',
                                        category='all',
                                        safesearch='true',
                                        order='latest',
                                        page=self.shownPageNumber,
                                        per_page=6)
                self.gui["currentPageNumber"] = self.shownPageNumber
                self.gui[
                    "showMoreAvailable"] = self.handle_show_more_available(
                        self.shownPageNumber)
                self.gui["imageGalleryModel"] = ims['hits']
            elif galleryType == "Video":
                vis = self.video.search(q=self.previousQuery,
                                        lang='en',
                                        video_type='all',
                                        category='all',
                                        page=self.shownPageNumber,
                                        per_page=6)
                self.gui["currentPageNumber"] = self.shownPageNumber
                self.gui[
                    "showMoreAvailable"] = self.handle_show_more_available(
                        self.shownPageNumber)
                self.gui["videoGalleryModel"] = vis['hits']
                self.handle_pixabay_display("VideoGallery")
            else:
                print("Valid Type Not Found")

    @intent_handler(
        IntentBuilder("HandleAudioGalleryNext").require(
            "PixabayGalleryNextKeyword").build())
    def handle_audio_gallery_next(self):
        currentPageNumber = self.shownPageNumber
        self.handle_gallery_next_page(
            Message(
                "data", {
                    "currentPageNumber": currentPageNumber,
                    "galleryType": self.currentType
                }))

    @intent_handler(
        IntentBuilder("HandleAudioGalleryNext").require(
            "PixabayGalleryPreviousKeyword").build())
    def handle_audio_gallery_previous(self):
        currentPageNumber = self.shownPageNumber
        self.handle_gallery_previous_page(
            Message(
                "data", {
                    "currentPageNumber": currentPageNumber,
                    "galleryType": self.currentType
                }))

    def handle_number_of_pages(self, total, totalhits):
        if total > totalhits:
            orgNumPage = totalhits / 6
            if orgNumPage > 10:
                self.numberOfAvailablePages = 10
                return 10
            else:
                orgNumPage = totalhits / 6
                self.numberOfAvailablePages = orgNumPage
                return orgNumPage

        elif total < totalhits:
            orgNumPage = total / 6
            if orgNumPage > 10:
                self.numberOfAvailablePages = 10
                return 10
            else:
                orgNumPage = totalhits / 6
                self.numberOfAvailablePages = orgNumPage
                return orgNumPage

        elif total == totalhits:
            orgNumPage = total / 6
            if orgNumPage > 10:
                self.numberOfAvailablePages = 10
                return 10
            else:
                self.numberOfAvailablePages = orgNumPage
                return orgNumPage

    def handle_show_more_available(self, currentPage):
        if currentPage < self.numberOfAvailablePages:
            return True
        else:
            return False

    def handle_set_idlescreen_type(self, message):
        idleType = message.data["idleType"]
        self.idle_db.clear()
        if idleType == "Image":
            idleImageURL = message.data["idleImageURL"]
            imageType = idleImageURL.split('.')[-1]
            imagePath = join(self.dataPath,
                             str("pixabay-idle" + "." + imageType))
            self.extract_image_for_idle(idleImageURL, imagePath)
            self.gui["idleType"] = "ImageIdle"
            self.gui["idleGenericURL"] = imagePath
            self.idle_db["idleInfo"] = {
                "idleType": "ImageIdle",
                "idleGenericURL": imagePath
            }
            self.idle_db.store()
            self.gui["setMessage"] = "New Homescreen Set"
        if idleType == "Video":
            idleVideoURL = message.data["idleVideoURL"]
            self.gui["idleType"] = "VideoIdle"
            self.gui["idleGenericURL"] = idleVideoURL
            self.idle_db["idleInfo"] = {
                "idleType": "VideoIdle",
                "idleGenericURL": idleVideoURL
            }
            self.idle_db.store()
            self.gui["setMessage"] = "New Homescreen Set"

    def handle_idlescreen_first_run(self):
        # Check If Idle Screen DB Exist and Not Empty
        # Retrive and Set Idle Screen if Available
        # If idle unset, get random and store
        if 'idleInfo' in self.idle_db.keys():
            self.gui["idleType"] = self.idle_db["idleInfo"]["idleType"]
            self.gui["idleGenericURL"] = self.idle_db["idleInfo"][
                "idleGenericURL"]

        else:
            imageURL = self.generate_random_idle()
            imageType = imageURL.split('.')[-1]
            imagePath = join(self.dataPath,
                             str("pixabay-idle" + "." + imageType))
            self.extract_image_for_idle(imageURL, imagePath)
            self.idle_db["idleInfo"] = {
                "idleType": "ImageIdle",
                "idleGenericURL": imagePath
            }
            self.idle_db.store()
            self.gui["idleType"] = "ImageIdle"
            self.gui["idleGenericURL"] = imagePath

        if 'showTime' in self.idle_config_db.keys():
            if self.idle_config_db["showTime"] == True:
                self.gui["showTime"] = True
                self.gui[
                    'time_string'] = self.dt_skill.get_display_current_time()
            else:
                self.gui["showTime"] = False
                self.gui["time_string"] = ""
        else:
            self.gui["showTime"] = False
            self.gui["time_string"] = ""

    def generate_random_idle(self):
        ims = self.image.search(q="galaxy",
                                lang='en',
                                image_type='photo',
                                orientation='vertical',
                                category='all',
                                safesearch='true',
                                order='latest',
                                page=4,
                                per_page=6)
        randomImageUrl = ims['hits'][4]["largeImageURL"]
        return randomImageUrl

    @resting_screen_handler('Pixabay')
    def handle_idle(self, message):
        self.gui.clear()
        self.log.debug('Activating Time/Date resting page')
        self.handle_idlescreen_first_run()
        self.gui.show_page('pixabayIdleLoader.qml')

    def extract_image_for_idle(self, url, localpath):
        try:
            image = requests.get(url)
        except OSError:
            return False
        if image.status_code == 200:
            with open(localpath, "wb") as k:
                k.write(image.content)
        else:
            print("Saving Image Failed")

    def handle_idle_enable_time(self):
        self.speak("I am enabling time")
        self.idle_config_db["showTime"] = True
        self.gui["showTime"] = True
        self.idle_config_db.store()
        # Send Time Data Here First
        self.handle_idle_update_time()

    def handle_idle_disable_time(self):
        self.speak("I am disabling time")
        self.idle_config_db["showTime"] = False
        self.gui["showTime"] = False
        self.idle_config_db.store()

    def handle_idle_update_time(self):
        self.gui['time_string'] = self.dt_skill.get_display_current_time()

    @intent_handler(
        IntentBuilder("PixabayIdleConfigure").require(
            "PixabayIdleConfigure").build())
    def handle_configure_idle_screen(self):
        self.gui.show_page("ConfigurePixabayIdle.qml")

    def handle_remove_configure_idle_screen(self):
        self.gui.remove_page("ConfigurePixabayIdle.qml")

    def stop(self):
        pass
Esempio n. 8
0
class AndroidHomescreen(MycroftSkill):

    # The constructor of the skill, which calls MycroftSkill's constructor
    def __init__(self):
        super(AndroidHomescreen, self).__init__(name="AndroidHomescreen")
        self.allSkills = []
        self.enabledAndroidSkills = []
        self.androidSkillsList = []
        self.androidSkillObject = {}
        self.skill_manager = None

    def initialize(self):
        self.add_event("pixabay.gallery.set_wallpaper", self.set_wallpaper)
        now = datetime.datetime.now()
        callback_time = (datetime.datetime(now.year, now.month, now.day,
                                           now.hour, now.minute) +
                         datetime.timedelta(seconds=60))
        self.schedule_repeating_event(self.update_dt, callback_time, 10)
        self.skill_manager = SkillManager(self.bus)

        # Make Import For TimeData
        root_dir = self.root_dir.rsplit('/', 1)[0]
        try:
            time_date_path = str(
                root_dir) + "/mycroft-date-time.mycroftai/__init__.py"
            time_date_id = "datetimeskill"
            datetimeskill = load_skill_module(time_date_path, time_date_id)
            from datetimeskill import TimeSkill
            self.dt_skill = TimeSkill()
        except:
            print("Failed To Import DateTime Skill")

    @resting_screen_handler('AndroidHomescreen')
    def handle_idle(self, message):
        self.gui.clear()
        self.generate_homescreen_icons()
        self.log.debug('Activating Time/Date resting page')
        self.gui['time_string'] = self.dt_skill.get_display_current_time()
        self.gui['ampm_string'] = ''
        self.gui['date_string'] = self.dt_skill.get_display_date()
        self.gui['weekday_string'] = self.dt_skill.get_weekday()
        self.gui['month_string'] = self.dt_skill.get_month_date()
        self.gui['year_string'] = self.dt_skill.get_year()
        self.gui['skillLauncher'] = self.androidSkillObject
        self.gui.show_page('homescreen.qml')

    def handle_idle_update_time(self):
        self.gui['time_string'] = self.dt_skill.get_display_current_time()

    def generate_homescreen_icons(self):
        self.androidSkillsList.clear()
        skill_directories = self.skill_manager._get_skill_directories()
        print(skill_directories)
        for x in range(len(skill_directories)):
            if skill_directories[x] not in self.allSkills:
                self.allSkills.append(skill_directories[x])

        for x in range(len(self.allSkills)):
            skill_dir = self.allSkills[x]
            skill_android_file_resource = skill_dir + "/android.json"
            if path.exists(skill_android_file_resource) and path.isfile(
                    skill_android_file_resource):
                with open(skill_android_file_resource) as f:
                    print("I AM IN EXPAND ANDROID RESOURCE FILE")
                    expand_file = json.load(f)
                    icon_path = skill_dir + expand_file["android_icon"]
                    display_name = expand_file["android_name"]
                    invoke_handler = expand_file["android_handler"]
                    if not any(
                            d.get('skillPath', None) == skill_dir
                            for d in self.androidSkillsList):
                        self.androidSkillsList.append({
                            "skillPath":
                            skill_dir,
                            "skillIconPath":
                            icon_path,
                            "skillDisplayName":
                            display_name,
                            "skillHandler":
                            invoke_handler
                        })
                        print(self.androidSkillsList)

                    try:
                        sort_on = "skillDisplayName"
                        decorated = [(dict_[sort_on], dict_)
                                     for dict_ in self.androidSkillsList]
                        decorated.sort()
                        result = [dict_ for (key, dict_) in decorated]
                        print(result)
                    except Exception:
                        print("Error Sorting Application List")

        try:
            self.androidSkillObject["skillList"] = result
        except Exception:
            print("Error Getting Application List")

    def update_dt(self):
        self.gui['time_string'] = self.dt_skill.get_display_current_time()
        self.gui['date_string'] = self.dt_skill.get_display_date()

    def set_wallpaper(self, message):
        self.gui['wallpaper_path'] = message.data["imagePath"]

    def set_default_wallpaper(self, message):
        self.gui['wallpaper_path'] = self.root_dir + "/ui/img/seaside.jpg"

    def stop(self):
        pass