Skip to content

Commit

Permalink
feat: add option to paste files/links from clipboard
Browse files Browse the repository at this point in the history
  • Loading branch information
vzhd1701 committed Jul 27, 2022
1 parent 8b120e8 commit f300c22
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 23 deletions.
13 changes: 10 additions & 3 deletions gridplayer/player/managers/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -1109,18 +1109,25 @@
"icon": "minimize",
"func": "minimize",
},
"Add Files": {
"Add - Files": {
"title": translate("Actions", "Add Files"),
"key": "Ctrl+A",
"icon": "add-files",
"func": "add_videos",
},
"Add URL(s)": {
"Add - URL(s)": {
"title": translate("Actions", "Add URL(s)"),
"key": "Ctrl+U",
"icon": "add-files",
"icon": "add-url",
"func": "add_urls",
},
"Add - Clipboard": {
"title": translate("Actions", "From Clipboard"),
"key": "Ctrl+V",
"icon": "add-clipboard",
"func": "add_from_clipboard",
"enable_if": "is_clipboard_full",
},
"Open Playlist": {
"title": translate("Actions", "Open Playlist"),
"key": "Ctrl+O",
Expand Down
27 changes: 25 additions & 2 deletions gridplayer/player/managers/add_videos.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QFileDialog
from PyQt5.QtWidgets import QFileDialog, qApp

from gridplayer.dialogs.add_urls import QAddURLsDialog
from gridplayer.models.video import VideoURL, filter_video_uris
Expand All @@ -9,6 +9,7 @@
SUPPORTED_VIDEO_EXT,
)
from gridplayer.player.managers.base import ManagerBase
from gridplayer.utils.files import extract_mime_uris
from gridplayer.utils.qt import translate
from gridplayer.utils.url_resolve.static import PLUGIN_URLS

Expand All @@ -20,7 +21,12 @@ class AddVideosManager(ManagerBase):

@property
def commands(self):
return {"add_videos": self.cmd_add_videos, "add_urls": self.cmd_add_urls}
return {
"add_videos": self.cmd_add_videos,
"add_urls": self.cmd_add_urls,
"add_from_clipboard": self.cmd_add_from_clipboard,
"is_clipboard_full": self.is_clipboard_full,
}

def cmd_add_videos(self):
dialog = QFileDialog(
Expand Down Expand Up @@ -52,6 +58,23 @@ def cmd_add_urls(self):
if valid_urls:
self.videos_added.emit(valid_urls)

def cmd_add_from_clipboard(self):
if not self.is_clipboard_full():
return

clipboard_links = extract_mime_uris(qApp.clipboard().mimeData())

videos = filter_video_uris(clipboard_links)

if not videos:
self.error.emit(translate("Error", "No valid URLs or files found!"))
return

self.videos_added.emit(videos)

def is_clipboard_full(self):
return bool(extract_mime_uris(qApp.clipboard().mimeData()))


def _get_name_filters():
ext_types = [
Expand Down
14 changes: 7 additions & 7 deletions gridplayer/player/managers/drag_n_drop.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
from gridplayer.models.video import filter_video_uris
from gridplayer.player.managers.base import ManagerBase
from gridplayer.utils.files import (
drag_get_uris,
drag_get_video,
drag_has_video,
extract_mime_uris,
extract_mime_video,
get_playlist_path,
mime_has_video,
)


Expand Down Expand Up @@ -48,16 +48,16 @@ def mousePressEvent(self, event):
def dragEnterEvent(self, event):
drag_data = event.mimeData()

if not drag_get_uris(drag_data) and not drag_has_video(drag_data):
if not extract_mime_uris(drag_data) and not mime_has_video(drag_data):
return

event.setDropAction(Qt.MoveAction)
event.accept()

def dropEvent(self, event):
drop_data = event.mimeData()
drop_files = drag_get_uris(drop_data)
drop_video = drag_get_video(drop_data)
drop_files = extract_mime_uris(drop_data)
drop_video = extract_mime_video(drop_data)

# Add new video
if drop_files:
Expand All @@ -68,7 +68,7 @@ def dropEvent(self, event):
return self._drop_video_block(event, drop_video)

def dragMoveEvent(self, event):
drag_video = drag_get_video(event.mimeData())
drag_video = extract_mime_video(event.mimeData())

if drag_video:
src_video = self._ctx.video_blocks.by_id(drag_video.id)
Expand Down
9 changes: 7 additions & 2 deletions gridplayer/player/managers/menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"title": translate("Actions", "Audio Mode"),
"icon": "audio-mode",
},
"Add": {"title": translate("Actions", "Add"), "icon": "add"},
}
)

Expand Down Expand Up @@ -299,8 +300,12 @@
"Fullscreen",
"Minimize",
"---",
"Add Files",
"Add URL(s)",
(
"Add",
"Add - Files",
"Add - URL(s)",
"Add - Clipboard",
),
"Open Playlist",
"Save Playlist",
"Close Playlist",
Expand Down
12 changes: 4 additions & 8 deletions gridplayer/utils/files.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,20 @@
from gridplayer.utils.misc import is_url


def drag_has_video(dnd_data: QMimeData) -> bool:
def mime_has_video(dnd_data: QMimeData) -> bool:
return dnd_data.hasFormat("application/x-gridplayer-video")


def drag_get_video(dnd_data: QMimeData) -> Optional[VideoBlockMime]:
if not drag_has_video(dnd_data):
def extract_mime_video(dnd_data: QMimeData) -> Optional[VideoBlockMime]:
if not mime_has_video(dnd_data):
return None

return VideoBlockMime.parse_raw(
bytes(dnd_data.data("application/x-gridplayer-video")).decode("utf-8")
)


def drag_get_uris(dnd_data: QMimeData) -> List[str]:
return _extract_uris(dnd_data)


def _extract_uris(dnd_data: QMimeData) -> List[str]:
def extract_mime_uris(dnd_data: QMimeData) -> List[str]:
uris = []

if dnd_data.hasUrls():
Expand Down
4 changes: 4 additions & 0 deletions resources/icons/custom/051-add url.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions resources/icons/custom/052-media file.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 4 additions & 1 deletion resources/resources.csv
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ icon,icons/main/sys/windows.ico,main_ico_win
icon,icons/flags/en_US.svg,flag_en_US
icon,icons/flags/hu_HU.svg,flag_hu_HU
icon,icons/flags/ru_RU.svg,flag_ru_RU
icon-symbolic,icons/basic/003-add.svg,add-files
icon-symbolic,icons/basic/003-add.svg,add
icon-symbolic,icons/basic/138-pages.svg,add-clipboard
icon-symbolic,icons/basic/031-cancel.svg,close
icon-symbolic,icons/basic/042-sand clock.svg,processing
icon-symbolic,icons/basic/067-down arrow.svg,save-playlist
Expand Down Expand Up @@ -79,5 +80,7 @@ icon-symbolic,icons/custom/047-warning.svg,warning
icon-symbolic,icons/custom/048-settings.svg,settings
icon-symbolic,icons/custom/049-checkmark.svg,checkmark
icon-symbolic,icons/custom/050-track.svg,track
icon-symbolic,icons/custom/051-add url.svg,add-url
icon-symbolic,icons/custom/052-media file.svg,add-files
translation,translations/ru_RU.ts,ru_RU
translation,translations/hu_HU.ts,hu_HU

0 comments on commit f300c22

Please sign in to comment.