Exemple #1
0
    def sync(self, medias):
        """
        :type medias: list[Media]
        """
        self.created_medias = []
        self.added_medias = []
        self.updated_medias = []

        created_dirs = []
        all_files = []
        self.log.info('Starting library sync...')
        for media in medias:
            f = StreamFile(media, self.path)
            path = f.path
            encoded_path = encode_fs(path, errors='ignore')
            all_files.append(path)
            if os.path.exists(encoded_path):
                if f.is_updated():
                    self.log.info("'%s' has updated" % path)
                    self.updated_medias.append(media)
                    f.touch()
            else:
                dirname = os.path.dirname(encoded_path) + "/"
                if dirname in created_dirs:
                    self.created_medias.append(f)
                    self.log.info("'%s' has created" % path)
                elif not os.path.exists(dirname):
                    os.mkdir(dirname)
                    created_dirs.append(dirname)
                    self.created_medias.append(media)
                    self.log.info("'%s' has created" % path)
                else:
                    self.added_medias.append(media)
                    self.log.info("'%s' has added" % path)
                f.create()

        self._remove_unwanted_files(all_files)
        self.log.info(
            'Library sync finished (%d file(s) created, %d added, %d updated, %d removed)',
            len(self.created_medias), len(self.added_medias),
            len(self.updated_medias), len(self.removed_files))
    def sync(self, medias):
        """
        :type medias: list[Media]
        """
        self.created_medias = []
        self.added_medias = []
        self.updated_medias = []

        created_dirs = []
        all_files = []
        self.log.info('Starting library sync...')
        for media in medias:
            f = StreamFile(media, self.path)
            path = f.path
            encoded_path = encode_fs(path, errors='ignore')
            all_files.append(path)
            if os.path.exists(encoded_path):
                if f.is_updated():
                    self.log.info("'%s' has updated" % path)
                    self.updated_medias.append(media)
                    f.touch()
            else:
                dirname = os.path.dirname(encoded_path) + "/"
                if dirname in created_dirs:
                    self.created_medias.append(f)
                    self.log.info("'%s' has created" % path)
                elif not os.path.exists(dirname):
                    os.mkdir(dirname)
                    created_dirs.append(dirname)
                    self.created_medias.append(media)
                    self.log.info("'%s' has created" % path)
                else:
                    self.added_medias.append(media)
                    self.log.info("'%s' has added" % path)
                f.create()

        self._remove_unwanted_files(all_files)
        self.log.info('Library sync finished (%d file(s) created, %d added, %d updated, %d removed)',
                      len(self.created_medias), len(self.added_medias), len(self.updated_medias),
                      len(self.removed_files))
Exemple #3
0
    def _remove_unwanted_files(self, all_files, path=None):
        if isinstance(all_files, list):
            all_files = set(all_files)
        if path is None:
            path = self.encoded_path

        files = os.listdir(path)
        existing_files = []
        for f in files:
            f = os.path.join(path, f)
            if os.path.isdir(f):
                self._remove_unwanted_files(all_files, f)
            else:
                existing_files.append(decode_fs(f))
        to_remove = [f for f in existing_files if f not in all_files]
        self.removed_files.extend(to_remove)
        for f in to_remove:
            self.log.info("'%s' has removed" % f)
            os.remove(encode_fs(f))

        files = os.listdir(path)
        if not files and self.encoded_path != path:
            self.log.info("'%s' has removed" % decode_fs(path))
            os.rmdir(path)
    def _remove_unwanted_files(self, all_files, path=None):
        if isinstance(all_files, list):
            all_files = set(all_files)
        if path is None:
            path = self.encoded_path

        files = os.listdir(path)
        existing_files = []
        for f in files:
            f = os.path.join(path, f)
            if os.path.isdir(f):
                self._remove_unwanted_files(all_files, f)
            else:
                existing_files.append(decode_fs(f))
        to_remove = [f for f in existing_files if f not in all_files]
        self.removed_files.extend(to_remove)
        for f in to_remove:
            self.log.info("'%s' has removed" % f)
            os.remove(encode_fs(f))

        files = os.listdir(path)
        if not files and self.encoded_path != path:
            self.log.info("'%s' has removed" % decode_fs(path))
            os.rmdir(path)
Exemple #5
0
 def encoded_path(self):
     return encode_fs(self.path, errors='ignore')
 def encoded_path(self):
     return encode_fs(self.path, errors='ignore')