def start(self): filepath = self.lineEdit_filepath.text() title = self.lineEdit_title.text() slug = self.lineEdit_slug.text() date = self.lineEdit_time.text() if self.lineEdit_time.text() != '-- :' else '' img_url = self.lineEdit_img_url.text() preview = self.textEdit_preview.toPlainText() h2h3 = '1' if self.checkBox.isChecked() else '' if filepath == '' or title == '' or slug == '': QtWidgets.QMessageBox.warning(self, '创建页面', '文件路径、标题、页面缩略名为必填项', QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok) elif not os.path.exists(filepath): QtWidgets.QMessageBox.warning(self, '创建页面', '文件路径错误,文件不存在!', QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok) else: try: operation = Operation() r = operation.create_page(filepath, title, slug, date=date, img_url=img_url, preview=preview, h2h3=h2h3) except Exception as e: QtWidgets.QMessageBox.warning(self, '创建页面', '程序运行错误!\n%s'%str(e), QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok) else: if not r: QtWidgets.QMessageBox.warning(self, '创建页面', '创建页面失败!', QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok) else: reply = QtWidgets.QMessageBox.information(self, '创建页面', '创建页面成功!\n是否继续创建页面?', QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.Yes) if reply == QtWidgets.QMessageBox.No: self.close() self.Ui_clear() self.list_update_pages_signal.emit()
def start(self): filepath = self.lineEdit_filepath.text() title = self.lineEdit_title.text() row = self.comboBox_metas.currentIndex() meta = '' if row == -1 or row == 0 else self.metas_detail_list[self.comboBox_metas.currentIndex()]['mid'] date = self.lineEdit_time.text() if self.lineEdit_time.text() != '-- :' else '' img_url = self.lineEdit_img_url.text() preview = self.textEdit_preview.toPlainText() h2h3 = '1' if self.checkBox.isChecked() else '' if filepath == '' or title == '': QtWidgets.QMessageBox.warning(self, '创建文章', '文件路径、标题为必填项', QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok) elif not os.path.exists(filepath): QtWidgets.QMessageBox.warning(self, '创建文章', '文件路径错误,文件不存在!', QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok) else: try: operation = Operation() r = operation.write_post(filepath, title, meta, date, img_url, preview, h2h3) except Exception as e: QtWidgets.QMessageBox.warning(self, '创建文章', '程序运行错误!\n%s'%str(e), QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok) else: if not r: QtWidgets.QMessageBox.warning(self, '创建文章', '创建文章失败!', QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok) else: reply = QtWidgets.QMessageBox.information(self, '创建文章', '创建文章成功!\n是否继续创建文章?', QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.Yes) if reply == QtWidgets.QMessageBox.No: self.close() self.Ui_clear() self.list_update_passages_signal.emit()
def start(self): name = self.lineEdit_name.text() slug = self.lineEdit_slug.text() row = self.comboBox_metas.currentIndex() parent = 0 if row == -1 or row == 0 else self.metas_detail_list[ self.comboBox_metas.currentIndex()]['mid'] description = self.textEdit_description.toPlainText() try: operation = Operation() r = operation.update_meta(name, slug, parent, description, self.mid) except Exception as e: QtWidgets.QMessageBox.warning(self, '更新分类', '程序运行错误!\n%s' % str(e), QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok) else: dict = { '-1': '分类名称已经存在', '-2': '缩略名已经存在', '-3': '分类名称和缩略名都已存在', '-4': '未知错误' } if r < 0: QtWidgets.QMessageBox.warning(self, '更新分类', dict[str(r)], QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok) else: reply = QtWidgets.QMessageBox.information( None, '更新分类', '更新分类成功!\n分类:%s, mid:%d' % (name, r), QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok) if reply == QtWidgets.QMessageBox.Ok: self.close() self.Ui_clear() self.list_update_metas_signal.emit()
def delete_post(self, cid): operation = Operation() if operation.delete_post(cid): QMessageBox.information(None, '删除文章', '删除文章成功', QMessageBox.Ok, QMessageBox.Ok) self.list_update_passages_signal.emit() else: QMessageBox.warning(None, '删除文章', '删除文章失败!', QMessageBox.Ok, QMessageBox.Ok)
def delete_meta(self, metas_detail_list, row): operation = Operation() if operation.delete_meta(metas_detail_list, row): QMessageBox.information(None, '删除分类', '删除分类成功', QMessageBox.Ok, QMessageBox.Ok) self.list_update_metas_signal.emit() self.list_update_passages_signal.emit() else: QMessageBox.warning(None, '删除分类', '删除分类失败!', QMessageBox.Ok, QMessageBox.Ok)
def list_metas(self): self.operation = Operation() self.metas_detail_list = self.operation.get_metas() self.metas_name_list = [meta['name'] for meta in self.metas_detail_list] self.slm = QtCore.QStringListModel(); self.slm.setStringList(self.metas_name_list) self.listView_metas.setModel(self.slm) self.listView_metas.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) self.listView_metas.clicked.connect(self.clicked_meta)
def init_meta_detail(self): operation = Operation() dict = operation.get_meta_info(self.mid) self.lineEdit_name.setText(dict['name']) self.lineEdit_slug.setText(dict['slug']) row = -1 for i, meta in enumerate(self.metas_detail_list): if meta['mid'] == dict['parent']: row = i self.comboBox_metas.setCurrentIndex(row)
def update_blog_setting(self): choose_blog = self.get_current_blog_info() operation = Operation() operation.update_blog_setting(self.comboBox_blog.currentIndex(), choose_blog) #print(self.comboBox_blog.currentIndex()) choose_blog_num, self.blogs_detail_list = operation.get_settings_info() choose_blog = self.blogs_detail_list[choose_blog_num] self.init_blog_detail(choose_blog_num) QMessageBox.information(None, '更新博客配置', '更新成功', QMessageBox.Ok, QMessageBox.Ok)
def init_page_detail(self): operation = Operation() dict = operation.get_page_info(self.cid) self.lineEdit_title.setText(dict['title']) self.lineEdit_slug.setText(dict['slug']) self.lineEdit_time.setText(dict['date']) self.lineEdit_img_url.setText(dict['img_url']) self.textEdit_preview.setText(dict['preview']) self.checkBox.setChecked(True if dict['h2h3'] == '1' else False) dir_path = operation.typecho.localDir file_path = os.path.join(dir_path, dict['title'] + '.md') if os.path.exists(file_path): self.lineEdit_filepath.setText(file_path)
def get_dir(self): operation = Operation() localDir = operation.typecho.localDir dir = QtWidgets.QFileDialog.getExistingDirectory( None, '选择要创建的文章', localDir) self.lineEdit_localDir.setText(dir.replace('/', '\\')) #不转化的话莫名其妙地打开缓存目录失败
def start(self): operation = Operation() passages = operation.get_all_cids_with_title() self.count = len(passages) self.success = self.fail = 0 for passage in passages: try: self.label.setText('正在下载:%s' % passage['title']) operation.typecho.download_passage_with_img(passage['cid']) except Exception as e: #print(e) self.fail += 1 else: self.success += 1 self.progressBar.setProperty("value", (self.success+self.fail)//self.count) QtWidgets.QMessageBox.information(None, '全站备份', '备份完成!\n成功:%d\n失败:%d' %(self.success, self.fail), QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Ok)
def getfile(self): operation = Operation() localDir = operation.typecho.localDir filepath, _ = QtWidgets.QFileDialog.getOpenFileName(None, '选择要创建的文章', localDir,"markdown files (*.md)") self.lineEdit_filepath.setText(filepath) import re, os self.lineEdit_title.setText(re.sub(r'\.md$', '', os.path.split(filepath)[1]))
def not_qt_creater(self): operation = Operation() if operation.exists_settings(): self.show_func = lambda: self.init_blog_detail(self.comboBox_blog. currentIndex()) self.comboBox_blog.currentIndexChanged.connect(self.show_func) choose_blog_num, self.blogs_detail_list = operation.get_settings_info( ) choose_blog = self.blogs_detail_list[choose_blog_num] self.init_blog_detail(choose_blog_num) self.pushButton_add_blog.clicked.connect(self.add_blog_setting) self.pushButton_update_blog.clicked.connect( self.update_blog_setting) self.pushButton_choose_blog.clicked.connect( self.choose_blog_setting) self.toolButton.clicked.connect(self.get_dir)
def check_exists(self): choose_blog = self.get_current_blog_info() operation = Operation() for blog in self.blogs_detail_list: try: del blog['num'] except: pass if blog == choose_blog: return True return False
def init_post_detail(self): operation = Operation() dict = operation.get_post_info(self.cid) self.lineEdit_title.setText(dict['title']) self.lineEdit_time.setText(dict['date']) self.lineEdit_img_url.setText(dict['img_url']) self.textEdit_preview.setText(dict['preview']) self.checkBox.setChecked(True if dict['h2h3'] == '1' else False) import os dir_path = operation.typecho.localDir file_path = os.path.join(dir_path, dict['title'] + '.md') if os.path.exists(file_path): self.lineEdit_filepath.setText(file_path) row = -1 for i, meta in enumerate(self.metas_detail_list): if meta['mid'] == dict['mid']: row = i self.comboBox_metas.setCurrentIndex(row)
def add_blog_setting(self): if not self.check_exists(): choose_blog = self.get_current_blog_info() operation = Operation() operation.add_blog_setting(choose_blog) choose_blog_num, self.blogs_detail_list = operation.get_settings_info( ) choose_blog = self.blogs_detail_list[choose_blog_num] self.init_blog_detail(choose_blog_num) operation = Operation() choose_blog_num, self.blogs_detail_list = operation.get_settings_info( ) QMessageBox.information(None, '添加博客配置', '添加成功', QMessageBox.Ok, QMessageBox.Ok) else: QMessageBox.warning(None, '添加博客', '博客配置信息已存在!', QMessageBox.Ok, QMessageBox.Ok)
def getfile(self): operation = Operation() localDir = operation.typecho.localDir filepath, _ = QtWidgets.QFileDialog.getOpenFileName( None, '选择要更新的独立页面', localDir, "markdown files (*.md)") self.lineEdit_filepath.setText(filepath)
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(900, 575) font = QtGui.QFont() font.setBold(False) font.setUnderline(False) font.setWeight(50) MainWindow.setFont(font) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) self.tabWidget.setGeometry(QtCore.QRect(0, 0, 243, 546)) font = QtGui.QFont() font.setFamily("宋体") font.setPointSize(9) font.setBold(True) font.setUnderline(False) font.setWeight(75) self.tabWidget.setFont(font) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.listView_metas = QtWidgets.QListView(self.tab) self.listView_metas.setGeometry(QtCore.QRect(-1, -1, 241, 523)) self.listView_metas.setObjectName("listView_metas") self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.tabWidget.addTab(self.tab_2, "") self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget) self.horizontalLayoutWidget.setGeometry(QtCore.QRect(250, 20, 641, 451)) self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.listView_passages = QtWidgets.QListView(self.horizontalLayoutWidget) self.listView_passages.setObjectName("listView_passages") self.horizontalLayout.addWidget(self.listView_passages) self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget) self.gridLayoutWidget.setGeometry(QtCore.QRect(250, 480, 641, 91)) self.gridLayoutWidget.setObjectName("gridLayoutWidget") self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setObjectName("gridLayout") self.pushButton_create_post = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_create_post.setObjectName("pushButton_create_post") self.gridLayout.addWidget(self.pushButton_create_post, 0, 0, 1, 1) self.pushButton_update_post_fast = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_update_post_fast.setObjectName("pushButton_update_post_fast") self.gridLayout.addWidget(self.pushButton_update_post_fast, 2, 0, 1, 1) self.pushButton_update_post = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_update_post.setObjectName("pushButton_update_post") self.gridLayout.addWidget(self.pushButton_update_post, 1, 0, 1, 1) self.pushButton_create_page = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_create_page.setObjectName("pushButton_create_page") self.gridLayout.addWidget(self.pushButton_create_page, 0, 1, 1, 1) self.pushButton_update_page = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_update_page.setObjectName("pushButton_update_page") self.gridLayout.addWidget(self.pushButton_update_page, 1, 1, 1, 1) self.pushButton_update_page_fast = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_update_page_fast.setObjectName("pushButton_update_page_fast") self.gridLayout.addWidget(self.pushButton_update_page_fast, 2, 1, 1, 1) self.pushButton_create_meta = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_create_meta.setObjectName("pushButton_create_meta") self.gridLayout.addWidget(self.pushButton_create_meta, 0, 2, 1, 1) self.pushButton_update_meta = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_update_meta.setObjectName("pushButton_update_meta") self.gridLayout.addWidget(self.pushButton_update_meta, 1, 2, 1, 1) self.pushButton_delete_meta = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_delete_meta.setObjectName("pushButton_delete_meta") self.gridLayout.addWidget(self.pushButton_delete_meta, 2, 2, 1, 1) self.pushButton_download_with_img = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_download_with_img.setObjectName("pushButton_download_with_img") self.gridLayout.addWidget(self.pushButton_download_with_img, 2, 3, 1, 1) self.pushButton_download_and_open = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_download_and_open.setObjectName("pushButton_download_and_open") self.gridLayout.addWidget(self.pushButton_download_and_open, 1, 3, 1, 1) self.pushButton_download = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_download.setObjectName("pushButton_download") self.gridLayout.addWidget(self.pushButton_download, 0, 3, 1, 1) self.pushButton_settings = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_settings.setObjectName("pushButton_settings") self.gridLayout.addWidget(self.pushButton_settings, 2, 5, 1, 1) self.pushButton_backups_all = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_backups_all.setObjectName("pushButton_backups_all") self.gridLayout.addWidget(self.pushButton_backups_all, 1, 5, 1, 1) self.pushButton_delete_passage = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_delete_passage.setObjectName("pushButton_delete_passage") self.gridLayout.addWidget(self.pushButton_delete_passage, 2, 4, 1, 1) self.pushButton_open_file = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_open_file.setObjectName("pushButton_open_file") self.gridLayout.addWidget(self.pushButton_open_file, 0, 4, 1, 1) self.pushButton_open_dir = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_open_dir.setObjectName("pushButton_open_dir") self.gridLayout.addWidget(self.pushButton_open_dir, 1, 4, 1, 1) self.pushButton_open_url = QtWidgets.QPushButton(self.gridLayoutWidget) self.pushButton_open_url.setObjectName("pushButton_open_url") self.gridLayout.addWidget(self.pushButton_open_url, 0, 5, 1, 1) self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(250, 3, 26, 12)) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.label.setFont(font) self.label.setObjectName("label") self.pushButton_no_meta = QtWidgets.QPushButton(self.centralwidget) self.pushButton_no_meta.setGeometry(QtCore.QRect(30, 549, 75, 23)) self.pushButton_no_meta.setObjectName("pushButton_no_meta") self.pushButton_list_pages = QtWidgets.QPushButton(self.centralwidget) self.pushButton_list_pages.setGeometry(QtCore.QRect(140, 549, 75, 23)) self.pushButton_list_pages.setObjectName("pushButton_list_pages") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 900, 23)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.retranslateUi(MainWindow) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) self.not_qt_creater() def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Typecho博客管理姬 --by iyzyi")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "分类")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "标签")) self.pushButton_create_post.setText(_translate("MainWindow", "创建文章")) self.pushButton_update_post_fast.setText(_translate("MainWindow", "快速更新文章")) self.pushButton_update_post.setText(_translate("MainWindow", "更新文章")) self.pushButton_create_page.setText(_translate("MainWindow", "创建独立页面")) self.pushButton_update_page.setText(_translate("MainWindow", "更新独立页面")) self.pushButton_update_page_fast.setText(_translate("MainWindow", "快速更新独立页面")) self.pushButton_create_meta.setText(_translate("MainWindow", "创建分类")) self.pushButton_update_meta.setText(_translate("MainWindow", "更新分类")) self.pushButton_delete_meta.setText(_translate("MainWindow", "删除分类")) self.pushButton_download_with_img.setText(_translate("MainWindow", "下载含图片")) self.pushButton_download_and_open.setText(_translate("MainWindow", "下载并打开")) self.pushButton_download.setText(_translate("MainWindow", "下载内容")) self.pushButton_settings.setText(_translate("MainWindow", "客户端配置")) self.pushButton_backups_all.setText(_translate("MainWindow", "全站备份")) self.pushButton_delete_passage.setText(_translate("MainWindow", "删除文章")) self.pushButton_open_file.setText(_translate("MainWindow", "打开文件")) self.pushButton_open_dir.setText(_translate("MainWindow", "打开缓存目录")) self.pushButton_open_url.setText(_translate("MainWindow", "打开网页")) self.label.setText(_translate("MainWindow", "文章")) self.pushButton_no_meta.setText(_translate("MainWindow", "无分类")) self.pushButton_list_pages.setText(_translate("MainWindow", "独立页面")) def not_qt_creater(self): self.list_metas() self.list_posts(0) self.pushButton_list_pages.clicked.connect(self.list_pages) self.pushButton_no_meta.clicked.connect(self.list_no_meta_posts) def list_metas(self): self.operation = Operation() self.metas_detail_list = self.operation.get_metas() self.metas_name_list = [meta['name'] for meta in self.metas_detail_list] self.slm = QtCore.QStringListModel(); self.slm.setStringList(self.metas_name_list) self.listView_metas.setModel(self.slm) self.listView_metas.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) self.listView_metas.clicked.connect(self.clicked_meta) def list_passages(self, passages_detail_list): self.passages_detail_list = passages_detail_list self.passages_title_list = [passage['title'] for passage in self.passages_detail_list] slm = QtCore.QStringListModel() slm.setStringList(self.passages_title_list) self.listView_passages.setModel(slm) self.listView_passages.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) #禁止双击编辑文本 def list_posts(self, mid): self.posts_detail_list = self.operation.get_posts(mid) #print(self.posts_detail_list) self.list_passages(self.posts_detail_list) self.list_info = 'posts' def list_no_meta_posts(self): self.list_metas() self.no_meta_posts = self.operation.get_no_meta_posts() self.list_passages(self.no_meta_posts) self.list_info = 'posts' def list_pages(self): self.list_metas() self.pages_detail_list = self.operation.get_pages() self.list_passages(self.pages_detail_list) self.list_info = 'pages' def clicked_meta(self, qModelIndex): mid = self.metas_detail_list[qModelIndex.row()]['mid'] self.list_posts(mid) def cancel_selected_meta(self): #选中分类时点击创建独立页面,创建完成后文章列表显示独立页面,但是分类列表依然选中分类,不美观 pass
def open_dir(): operation = Operation() return operation.open_dir()
def open_file(): operation = Operation() return operation.open_file(mainwindow.passages_detail_list[ mainwindow.listView_passages.currentIndex().row()]['title'])
def download_passage_with_img(cid): operation = Operation() return operation.download_passage_with_img(cid)
def download_and_open_passage(): operation = Operation() return operation.download_and_open_passage( mainwindow.passages_detail_list[ mainwindow.listView_passages.currentIndex().row()]['cid'])
def update_page_fast(): operation = Operation() return operation.update_page_fast(mainwindow.passages_detail_list[ mainwindow.listView_passages.currentIndex().row()]['cid'])
def choose_blog_setting(self): operation = Operation() operation.choose_blog_setting(self.comboBox_blog.currentIndex()) self.change_choose_blog_signal.emit()