Created
January 11, 2019 09:59
-
-
Save curtwagner1984/72ac593c7acc33d3037eae0f7e298171 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import datetime | |
| import PySide2 | |
| from PySide2.QtCore import QAbstractListModel, QModelIndex, Qt | |
| from database.models.subreddit import * | |
| from random import shuffle | |
| epoch = datetime.utcfromtimestamp(0) | |
| def unix_time(dt): | |
| return (dt - epoch).total_seconds() | |
| class SubmissionModel(QAbstractListModel): | |
| NameRole = Qt.UserRole + 1 | |
| TitleRole = Qt.UserRole + 2 | |
| UrlRole = Qt.UserRole + 3 | |
| TimeRole = Qt.UserRole + 4 | |
| IsVideoRole = Qt.UserRole + 5 | |
| UpvotesRole = Qt.UserRole + 6 | |
| SubRedditRole = Qt.UserRole + 7 | |
| IsUpvotedRole = Qt.UserRole + 8 | |
| SavedPathRole = Qt.UserRole + 9 | |
| _roles = {NameRole: b"name", | |
| TitleRole: b"title", | |
| UrlRole: b"url", | |
| TimeRole: b"time", | |
| IsVideoRole: b"is_video", | |
| UpvotesRole: b"upvotes", | |
| SubRedditRole: b"subreddit", | |
| IsUpvotedRole: b"is_upvoted", | |
| SavedPathRole: b"saved_path", | |
| } | |
| def __init__(self, parent=None): | |
| super(SubmissionModel, self).__init__(parent) | |
| self._submissions = [] | |
| def model_reset(self): | |
| self.beginResetModel() | |
| self._submissions.clear() | |
| self.endResetModel() | |
| def sort_by_upvotes(self): | |
| self._submissions.sort(key=lambda x: x.upvotes, reverse=True) | |
| def sort_by_create_time(self): | |
| self._submissions.sort(key=lambda x: x.date_of_submission, reverse=True) | |
| def sort_by_random(self): | |
| shuffle(self._submissions) | |
| def rowCount(self, parent=QModelIndex()): | |
| return len(self._submissions) | |
| def append_list(self, submission_list_to_add): | |
| if submission_list_to_add: | |
| current_count = self.rowCount() | |
| self.beginInsertRows(QModelIndex(), current_count, current_count + len(submission_list_to_add)) | |
| self._submissions = submission_list_to_add + self._submissions | |
| self.endInsertRows() | |
| def populate_from_list(self, submission_list): | |
| if submission_list: | |
| # current_count = self.rowCount() | |
| # self.beginInsertRows(QModelIndex(), current_count, current_count + len(submission_list)) | |
| self.beginResetModel() | |
| self._submissions = submission_list | |
| self.sort_by_random() | |
| # self._submissions.append(submission_list) | |
| self.endResetModel() | |
| def add_submission(self, submission: DbSubmissionQObject): | |
| try: | |
| assert isinstance(submission, DbSubmissionQObject) | |
| except AssertionError as e: | |
| print("Failed assertion in add_submission : {}".format(submission)) | |
| return | |
| if submission not in self._submissions: | |
| # print('Adding Submission {} to model'.format(submission)) | |
| self.beginInsertRows(QModelIndex(), self.rowCount(), self.rowCount()) | |
| self._submissions.append(submission) | |
| # print("Added submission:{}, to list".format(submission)) | |
| self.endInsertRows() | |
| else: | |
| print('Submission {} is already in the model'.format(submission)) | |
| def removeRows(self, row: int, count: int, parent: PySide2.QtCore.QModelIndex = ...): | |
| self.beginRemoveRows(QModelIndex(), row, row + count - 1) | |
| del self._submissions[row:row + count] | |
| print("Removed Item in {} place in the list".format(row)) | |
| self.endRemoveRows() | |
| return True | |
| def roleNames(self): | |
| return self._roles | |
| def data(self, index: PySide2.QtCore.QModelIndex, role: int = ...): | |
| try: | |
| submission = self._submissions[index.row()] | |
| try: | |
| assert isinstance(submission, DbSubmissionQObject) | |
| except AssertionError as e: | |
| return None | |
| except IndexError: | |
| return None | |
| if role == self.NameRole: | |
| return submission.name | |
| if role == self.TitleRole: | |
| return submission.title | |
| if role == self.UrlRole: | |
| return submission.url | |
| if role == self.TimeRole: | |
| delta = datetime.now() - submission.date_of_submission | |
| return "Submitted {} ago".format(str(delta)) | |
| if role == self.IsVideoRole: | |
| return submission.is_video | |
| if role == self.UpvotesRole: | |
| return submission.upvotes | |
| if role == self.SubRedditRole: | |
| return submission.subreddit_name | |
| if role == self.IsUpvotedRole: | |
| return submission.is_upvoted | |
| if role == self.SavedPathRole: | |
| return submission.saved_path | |
| return None |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment