Example #1
0
    def on_activated(self, view):
        project_directory = ""
        self.is_project_file = False
        self.project_folder = None

        current_window = sublime.active_window()
        if not current_window:
            return False

        file_name = view.file_name()
        folders = current_window.folders()

        if folders is None or file_name is None:
            return False

        if config["PROJECT_DIRECTORY"]:
            # sanitize project directory
            project_directory = config["PROJECT_DIRECTORY"]
            verbose("project", "project folder found {0}".format(project_directory))

        # find and build current project directory (modified by settings:project_directory)
        base_project_directory = False
        final_project_directory = False
        for folder in folders:
            final_project_directory = os.path.join(folder, project_directory)
            # does not require validation of folder since filename is always correct
            if final_project_directory in file_name:
                self.is_project_file = True
                base_project_directory = folder
                break

        # abort if file is not within a project
        if not self.is_project_file:
            sublime.status_message("FFP abort. File is not within a project {0}".format(project_directory))
            return False
        elif config["LOG"]:
            sublime.status_message("FFP enabled for file being in project {0}".format(final_project_directory))

        # save final project folder
        self.project_folder = final_project_directory

        # validate base directory
        path_to_base_directory = False
        if config["BASE_DIRECTORY"]:
            #
            # base_project_directory    | /path/to/sublime/project
            # project_folder            | /path/to/sublime/project/project_directory
            #
            # - path_to_base_directory  | /path/to/sublime/project/base_directory
            # + path_to_base_directory  | /path/to/sublime/project/project_directory/base_directory
            #
            path_to_base_directory = os.path.join(final_project_directory, config["BASE_DIRECTORY"])
            if not os.path.isdir(path_to_base_directory):

                # BASE_DIRECTORY is NOT a valid folder releative to (possibly modified) project_directory
                path_to_base_directory = os.path.join(base_project_directory, config["BASE_DIRECTORY"])

                if not os.path.isdir(path_to_base_directory):
                    print("FFP", "Error: setting's base_directory is not a valid directory in project")
                    print("FFP", "=> changing base_directory {0} to ''".format(config["BASE_DIRECTORY"]))
                    config["BASE_DIRECTORY"] = ""

                elif path_to_base_directory in final_project_directory:
                    # change BASE_DIRECTORY to be '' since its outside of project directory
                    print("FFP", "Error: setting's base_directory is within project directory")
                    print("FFP", "=> changing base_directory {0} to ''".format(config["BASE_DIRECTORY"]))
                    config["BASE_DIRECTORY"] = ""

                else:
                    # change BASE_DIRECTORY to be relative to modified project directory
                    path_to_base_directory = path_to_base_directory.replace(final_project_directory, "")
                    print("FFP", "Error: setting's base_directory is not relative to project directory")
                    print("FFP", "=> changing base_directory '{0}' to '{1}'".format(config["BASE_DIRECTORY"], path_to_base_directory))
                    config["BASE_DIRECTORY"] = Path.sanitize_base_directory(path_to_base_directory)

        # get file's current folder
        self.current_folder = Path.get_relative_folder(file_name, self.project_folder)

        if project_files:
            project_files.add(self.project_folder)