37 from classes
import updates
38 from classes
import info
39 from classes.query
import File
40 from classes.logger
import log
41 from classes.app
import get_app
46 import simplejson
as json
50 ModelRefreshed = pyqtSignal()
53 QStandardItemModel.__init__(self)
62 selected_row = self.itemFromIndex(item).row()
63 files.append(self.item(selected_row, 5).text())
64 data.setText(json.dumps(files))
76 if len(action.key) >= 1
and action.key[0].lower() ==
"files":
78 if action.type ==
"insert":
86 log.info(
"updating files model.")
103 self.model.setHorizontalHeaderLabels([_(
"Thumb"), _(
"Name"), _(
"Tags"),
"",
"",
""])
106 files = File.filter()
110 path, filename = os.path.split(file.data[
"path"])
112 if "tags" in file.data.keys():
113 tags = file.data[
"tags"]
115 if "name" in file.data.keys():
116 name = file.data[
"name"]
118 if not win.actionFilesShowAll.isChecked():
119 if win.actionFilesShowVideo.isChecked():
120 if not file.data[
"media_type"] ==
"video":
122 elif win.actionFilesShowAudio.isChecked():
123 if not file.data[
"media_type"] ==
"audio":
125 elif win.actionFilesShowImage.isChecked():
126 if not file.data[
"media_type"] ==
"image":
130 if win.filesFilter.text() !=
"":
131 if not win.filesFilter.text().lower()
in filename.lower() \
132 and not win.filesFilter.text().lower()
in tags.lower() \
133 and not win.filesFilter.text().lower()
in name.lower():
137 if (file.data[
"media_type"] ==
"video" or file.data[
"media_type"] ==
"image"):
139 thumb_path = os.path.join(info.THUMBNAIL_PATH,
"{}.png".
format(file.id))
142 if not os.path.exists(thumb_path):
146 file_path = file.absolute_path()
149 clip = openshot.Clip(file_path)
150 reader = clip.Reader()
157 if file.data[
"media_type"] ==
"video":
158 overlay_path = os.path.join(info.IMAGES_PATH,
"overlay.png")
162 if 'start' in file.data.keys():
163 fps = file.data[
"fps"]
164 fps_float = float(fps[
"num"]) / float(fps[
"den"])
165 thumbnail_frame = round(float(file.data[
'start']) * fps_float) + 1
168 reader.GetFrame(thumbnail_frame).Thumbnail(thumb_path, 98, 64, os.path.join(info.IMAGES_PATH,
"mask.png"),
169 overlay_path,
"#000",
False)
176 msg.setText(_(
"{} is not a valid video, audio, or image file.".
format(filename)))
183 thumb_path = os.path.join(info.PATH,
"images",
"AudioThumbnail.png")
188 col = QStandardItem()
189 col.setIcon(QIcon(thumb_path))
190 col.setText((name[:9] +
'...')
if len(name) > 10
else name)
191 col.setToolTip(filename)
192 col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled)
196 col = QStandardItem(
"Name")
197 col.setData(filename, Qt.DisplayRole)
198 col.setText((name[:20] +
'...')
if len(name) > 15
else name)
199 col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled | Qt.ItemIsEditable)
203 col = QStandardItem(
"Tags")
204 col.setData(tags, Qt.DisplayRole)
206 col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled | Qt.ItemIsEditable)
210 col = QStandardItem(
"Type")
211 col.setData(file.data[
"media_type"], Qt.DisplayRole)
212 col.setText(file.data[
"media_type"])
213 col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDragEnabled | Qt.ItemIsEditable)
217 col = QStandardItem(
"Path")
218 col.setData(path, Qt.DisplayRole)
220 col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable | Qt.ItemIsDragEnabled)
224 col = QStandardItem(
"ID")
225 col.setData(file.data[
"id"], Qt.DisplayRole)
226 col.setText(file.data[
"id"])
227 col.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable | Qt.ItemIsDragEnabled)
231 if not file.data[
"id"]
in self.
model_ids:
232 self.model.appendRow(row)
233 self.
model_ids[file.data[
"id"]] = file.data[
"id"]
239 get_app().window.resize_contents()
242 self.model.ModelRefreshed.emit()
248 app.updates.add_listener(self)
252 self.model.setColumnCount(6)
def get_app()
Returns the current QApplication instance of OpenShot.
def __init__(self, parent=None)
def mimeData(self, indexes)
def changed(self, action)
def update_model(self, clear=True)
Interface for classes that listen for changes (insert, update, and delete).