예제 #1
0
파일: photag.py 프로젝트: mikesbytes/photag
class Photag():
    def __init__(self):
        pass

    def newTag(self, event):
        text, okay = QInputDialog.getText(
            None,
            "New Tag",
            "Tag: ",
            QLineEdit.Normal,
        )
        if okay:
            split = str.split(text, '.')
            last_tag = None
            for tag_name in split:
                new_tag = self.db.session.query(Tag).filter(
                    Tag.name == tag_name).first()
                if not new_tag:
                    new_tag = Tag(name=tag_name, parent=last_tag)
                last_tag = new_tag
                self.db.session.add(new_tag)
                self.db.session.commit()
        self.form.tag_tree_view.model().reset()

    def tagCurrentSelected(self, index):
        node = index.internalPointer()
        selected = self.form.image_tree_view.selectionModel().selectedIndexes()
        for selection in selected:
            if selection.internalPointer().media:
                selection.internalPointer().media.tags.append(node.tag)
        self.db.session.commit()

    def updateMediaLabel(self, selected, old_selected):
        index = selected
        node = index.internalPointer()
        #print(node.media.getFullPath())
        if node.media:
            pm = QPixmap(node.media.getFullPath())
            self.form.media_label.setSPixmap(pm)

            # update tags in taglist
            taglist = self.form.current_tags_list
            taglist.clear()
            tags = node.media.tags
            for tag in tags:
                taglist.addItem(tag.name)
        elif node.query:
            self.form.thumbnail_list.clear()
            self.thumbnailer.cancelAllRequests()
            medias = node.query.medias
            for media in medias:
                self.thumbnailer.requestThumbnail(media)
            self.thumbnailer.conn.commit()

    def addThumb(self, thumb, filename):
        self.form.thumbnail_list.addItem(
            QListWidgetItem(QIcon(QPixmap(thumb)), filename))

    def walkAllRoots(self):
        self.db.walkAllRoots()

    def enterQuery(self):
        new_query = self.db.stringQuery(self.form.query_bar.text())
        self.form.image_tree_view.model().setQuery(new_query)

    def manageRoots(self):
        self.manageRootsForm = ManageRootsInterface(self.db)
        self.manageRootsForm.show()

    def imageTreeContextMenu(self, point):
        index = self.form.image_tree_view.indexAt(point)
        if index.isValid():
            query = index.internalPointer().query
            #this node is a directory
            if query and type(query) == DirQuery:
                self.db.walkDir(query.directory)

    def main(self):
        self.app = QApplication(sys.argv)
        self.form = MainInterface()
        self.form.show()

        # db stuff
        self.db = PhotagDB()

        #setup thumbnailer
        self.thumbnailerThread = QThread()
        self.thumbnailer = Thumbnailer()
        self.thumbnailer.moveToThread(self.thumbnailerThread)
        self.thumbnailer.thumbnailFetched.connect(self.addThumb)
        self.thumbnailerThread.started.connect(
            self.thumbnailer.processRequests)
        self.thumbnailerThread.start()

        # context menu
        self.form.image_tree_view.customContextMenuRequested.connect(
            self.imageTreeContextMenu)

        baseQuery = WholeTreeQuery(self.db)
        self.form.image_tree_view.setModel(ImageViewModel(baseQuery))
        self.form.tag_tree_view.setModel(TagViewModel(self.db))

        self.form.image_tree_view.selectionModel().currentChanged.connect(
            self.updateMediaLabel)
        self.form.action_new_tag.triggered.connect(self.newTag)
        self.form.action_walk_roots.triggered.connect(self.walkAllRoots)
        self.form.tag_tree_view.doubleClicked.connect(self.tagCurrentSelected)
        self.form.query_bar.returnPressed.connect(self.enterQuery)

        self.form.action_manage_roots.triggered.connect(self.manageRoots)

        self.app.exec_()