def SetRepoPinned(repoName: str, canUpdate: bool) -> None: config = LoadConfig() repoFolder = GetRepoFolderPath(repoName) folders = config.repositoryPair if folders.__contains__(repoName): summary = LoadSummary(repoFolder) summary.pinned = canUpdate StoreSummary(repoFolder, summary) else: raise RepoNotExistsException(repoName)
def GetRepoSummaries(self) -> list: foldersInfo = [] repos = self._config.repositoryPair for repoName in repos.keys(): folder = repos[repoName] summary = LoadSummary(folder) foldersInfo += [summary] return foldersInfo
def SyncRepository(self, repoName: str): summary = LoadSummary(self._GetRepoFolderPath(repoName)) repoFolder = self._GetRepoFolderPath(repoName) if summary is None: raise RepoNotExistsException(repoName) if summary.pinned is not False: return summary.recentlySyncedPosts = list() while len(summary.downloadQueue) > 0: fileName, fileInfo = summary.downloadQueue.popitem() fileUrl, fileMd5, postId = fileInfo["url"], fileInfo[ "md5"], fileInfo["id"] # some file needs you login to view it # if you are not yet login, same file still be detected during next update if fileUrl is None: continue self._downloader.Download(url=fileUrl, path=repoFolder + "/" + fileName, loginId=self._config.loginId, apiToken=self._config.apiToken) summary.recentlySyncedPosts += [fileName], summary.fileMetadata[fileName] = {"id": postId, "md5": fileMd5} StoreSummary(repoFolder, summary)
def _UpdateRepoSummaryFile(self, repoName: str) -> RepoSummary: repoFolder = self._GetRepoFolderPath(repoName) summary = LoadSummary(repoFolder) result = None # there is no "do not update" flag or "do not update" flag is set to false if summary.pinned is not True: if summary.repoType == "pool": result = self._UpdatePoolRepoSummaryFile(repoFolder, summary) elif summary.repoType == "posts": result = self._UpdatePostsRepoSummaryFile(repoFolder, summary) StoreSummary(repoFolder, result) else: result = summary return result
def info(self, repo: str): repos = LoadConfig().repositoryPair table = ptt.PrettyTable([ "Repo Name", "Identifier", "Type", "Local", "Server", "Pinned", "Last Update" ]) table.align = "l" # assemble all repo information into a table if repo in repos.keys(): summary = LoadSummary(repos[repo]) # make table output table.add_row([ repo, summary.repoIdentifier, summary.repoType, len(summary.fileMetadata), len(summary.downloadQueue), "Yes" if summary.pinned else "No", ConvertFloatTime(summary.updatedAt) ]) else: PrintError("Repo \"%s\" not exists." % repo) return print(table)
def update(self, name: str = ""): beginAt = time.time() summaries = dict() updatedCount = dict() pair = LoadConfig().repositoryPair print("Updating repository summaries ...") # update .summary files if name == "": # load all repo name repos = pair.keys() else: if name in LoadConfig().repositoryPair.keys(): repos = [name] else: PrintError("Repo \"%s\" not exists." % name) return for repoName in repos: try: # store original pic count in advance origCount = len(LoadSummary(pair[repoName]).downloadQueue) summary = manager.UpdateRepoSummaryFile(repoName) summaries[repoName] = summary updatedCount[repoName] = len(summary.downloadQueue) - origCount except RepoNotExistsException: PrintError("Repo \"%s\" not exists." % repoName) # display result as table table = ptt.PrettyTable(["Repo Name", "Type", "Identifier", "New"]) table.align = "l" for repoName in summaries.keys(): summary = summaries[repoName] table.add_row([ repoName, summary.repoType, summary.repoIdentifier, updatedCount[repoName] ]) print(table) print("Update complete in %s seconds." % int(time.time() - beginAt))
def GetRepoSummary(repoName: str) -> RepoSummary: folder = GetRepoFolderPath(repoName) return LoadSummary(folder)