added dnd for selective download/send

This commit is contained in:
DYefremov
2020-06-08 13:16:50 +03:00
parent a941c96c61
commit 9a9229f67c
2 changed files with 304 additions and 157 deletions

View File

@@ -48,6 +48,52 @@ Author: Dmitriy Yefremov
<object class="GtkTreeModelSort" id="picons_dst_sort_model">
<property name="model">picons_dst_filter_model</property>
</object>
<object class="GtkMenu" id="picons_dest_view_popup_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="dest_transfer_to_popup_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Transfer to receiver</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_selective_send" object="picons_dest_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkMenuItem" id="dest_download_to_popup_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Download from the receiver</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_selective_download" object="picons_dest_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="dest_popup_separator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="dest_remove_popup_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Remove</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_local_remove" object="picons_dest_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkMenuItem" id="dest_remove_from_popup_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Remove from the receiver</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_selective_remove" object="picons_dest_view" swapped="no"/>
</object>
</child>
</object>
<object class="GtkListStore" id="picons_src_list_store">
<columns>
<!-- column-name picon -->
@@ -64,6 +110,51 @@ Author: Dmitriy Yefremov
<object class="GtkTreeModelSort" id="picons_src_sort_model">
<property name="model">picons_src_filter_model</property>
</object>
<object class="GtkMenu" id="picons_src_view_popup_menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="src_transfer_to_popup_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Transfer to receiver</property>
<signal name="activate" handler="on_selective_send" object="picons_src_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkMenuItem" id="src_download_to_popup_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Download from the receiver</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_selective_download" object="picons_src_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="src_popup_separator">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="src_remove_popup_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Remove</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_local_remove" object="picons_src_view" swapped="no"/>
</object>
</child>
<child>
<object class="GtkMenuItem" id="src_remove_from_popup_item">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Remove from the receiver</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_selective_remove" object="picons_src_view" swapped="no"/>
</object>
</child>
</object>
<object class="GtkListStore" id="providers_list_store">
<columns>
<!-- column-name logo -->
@@ -224,11 +315,12 @@ Author: Dmitriy Yefremov
<property name="tooltip_text" translatable="yes">Transfer to receiver</property>
<property name="always_show_image">True</property>
<signal name="clicked" handler="on_send" swapped="no"/>
<signal name="drag-data-received" handler="on_send_button_drag_data_received" swapped="no"/>
<child>
<object class="GtkImage" id="send_button_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-goto-top</property>
<property name="stock">gtk-go-up</property>
</object>
</child>
</object>
@@ -245,6 +337,7 @@ Author: Dmitriy Yefremov
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Download from the receiver</property>
<signal name="clicked" handler="on_download" swapped="no"/>
<signal name="drag-data-received" handler="on_download_button_drag_data_received" swapped="no"/>
<child>
<object class="GtkImage" id="download_button_image">
<property name="visible">True</property>
@@ -266,6 +359,7 @@ Author: Dmitriy Yefremov
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Remove all picons from the receiver</property>
<signal name="clicked" handler="on_remove" swapped="no"/>
<signal name="drag-data-received" handler="on_remove_button_drag_data_received" swapped="no"/>
<child>
<object class="GtkImage" id="remove_button_image">
<property name="visible">True</property>
@@ -373,111 +467,111 @@ Author: Dmitriy Yefremov
<property name="margin_bottom">5</property>
<signal name="notify::visible-child" handler="on_visible_page" swapped="no"/>
<child>
<object class="GtkFrame" id="explorer_frame">
<object class="GtkBox" id="explorer_box">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0.5</property>
<property name="shadow_type">in</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="explorer_box">
<property name="visible">True</property>
<object class="GtkBox" id="filter_service_box">
<property name="can_focus">False</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="orientation">vertical</property>
<property name="tooltip_text" translatable="yes">Filter services in the main list.</property>
<property name="halign">end</property>
<property name="valign">end</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="filter_service_box">
<object class="GtkLabel" id="filter_services_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Filter services in the main list.</property>
<property name="halign">end</property>
<property name="valign">end</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="filter_services_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="label" translatable="yes">Filter services</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="filter_services_switch">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="valign">center</property>
<signal name="state-set" handler="on_filter_services_switch" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">2</property>
</packing>
</child>
<property name="valign">center</property>
<property name="label" translatable="yes">Filter services</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkSearchBar" id="search_bar">
<object class="GtkSwitch" id="filter_services_switch">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">1</property>
<property name="margin_bottom">1</property>
<child>
<object class="GtkSearchEntry" id="picons_search_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_name">edit-find-symbolic</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
</object>
</child>
<property name="halign">end</property>
<property name="valign">center</property>
<signal name="state-set" handler="on_filter_services_switch" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkSearchBar" id="search_bar">
<property name="can_focus">False</property>
<property name="margin_top">1</property>
<property name="margin_bottom">1</property>
<child>
<object class="GtkSearchBar" id="filter_bar">
<property name="can_focus">False</property>
<property name="margin_top">1</property>
<property name="margin_bottom">1</property>
<child>
<object class="GtkSearchEntry" id="picons_filter_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_stock">gtk-spell-check</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
<signal name="search-changed" handler="on_picons_filter_changed" swapped="no"/>
</object>
</child>
<object class="GtkSearchEntry" id="picons_search_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_name">edit-find-symbolic</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkSearchBar" id="filter_bar">
<property name="can_focus">False</property>
<property name="margin_top">1</property>
<property name="margin_bottom">1</property>
<child>
<object class="GtkSearchEntry" id="picons_filter_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_stock">gtk-spell-check</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
<signal name="search-changed" handler="on_picons_filter_changed" swapped="no"/>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkFrame" id="explorer_paths_frame">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label_xalign">0.5</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkPaned" id="explorer_paned">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="margin_left">5</property>
<property name="margin_right">5</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="wide_handle">True</property>
<child>
<object class="GtkBox" id="src_picons_box">
@@ -572,7 +666,8 @@ Author: Dmitriy Yefremov
<property name="headers_visible">False</property>
<property name="tooltip_column">1</property>
<property name="activate_on_single_click">True</property>
<signal name="drag-data-get" handler="on_picons_src_view_drag_data_get" swapped="no"/>
<signal name="button-press-event" handler="on_popup_menu" object="picons_src_view_popup_menu" swapped="no"/>
<signal name="drag-data-get" handler="on_picons_view_drag_data_get" swapped="no"/>
<signal name="drag-data-received" handler="on_picons_src_view_drag_data_received" swapped="no"/>
<signal name="drag-drop" handler="on_picons_src_view_drag_drop" swapped="no"/>
<signal name="drag-end" handler="on_picons_src_view_drag_end" swapped="no"/>
@@ -724,7 +819,9 @@ Author: Dmitriy Yefremov
<property name="headers_visible">False</property>
<property name="tooltip_column">1</property>
<property name="activate_on_single_click">True</property>
<signal name="button-press-event" handler="on_popup_menu" object="picons_dest_view_popup_menu" swapped="no"/>
<signal name="cursor-changed" handler="on_picon_activated" swapped="no"/>
<signal name="drag-data-get" handler="on_picons_view_drag_data_get" swapped="no"/>
<signal name="realize" handler="on_picons_dest_view_realize" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="picons_dest_view_selection"/>
@@ -779,84 +876,84 @@ Author: Dmitriy Yefremov
</packing>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="explorer_paths_frame_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Current picons path:</property>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkInfoBar" id="explorer_info_bar">
<property name="can_focus">False</property>
<property name="message_type">other</property>
<child internal-child="action_area">
<object class="GtkButtonBox">
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="layout_style">end</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">4</property>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkInfoBar" id="explorer_info_bar">
<child internal-child="content_area">
<object class="GtkBox" id="explorer_info_bar_box">
<property name="can_focus">False</property>
<property name="message_type">other</property>
<child internal-child="action_area">
<object class="GtkButtonBox">
<property name="spacing">10</property>
<child>
<object class="GtkImage" id="picon_info_image">
<property name="width_request">128</property>
<property name="height_request">72</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">6</property>
<property name="layout_style">end</property>
<property name="stock">gtk-missing-image</property>
<property name="icon_size">6</property>
<signal name="drag-data-received" handler="on_picon_info_image_drag_data_received" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child internal-child="content_area">
<object class="GtkBox" id="explorer_info_bar_box">
<property name="can_focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkImage" id="picon_info_image">
<property name="width_request">128</property>
<property name="height_request">72</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-missing-image</property>
<property name="icon_size">6</property>
<signal name="drag-data-received" handler="on_picon_info_image_drag_data_received" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="picon_info_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
<object class="GtkLabel" id="picon_info_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel" id="picons_path_labe">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Current picons path:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
</object>
<packing>

View File

@@ -4,6 +4,7 @@ import shutil
import subprocess
import tempfile
from pathlib import Path
from urllib.parse import urlparse, unquote
from gi.repository import GLib, GdkPixbuf
@@ -50,11 +51,18 @@ class PiconsDialog:
"on_convert": self.on_convert,
"on_picons_src_changed": self.on_picons_src_changed,
"on_picons_dest_changed": self.on_picons_dest_changed,
"on_picons_view_drag_data_get": self.on_picons_view_drag_data_get,
"on_picons_src_view_drag_drop": self.on_picons_src_view_drag_drop,
"on_picons_src_view_drag_data_received": self.on_picons_src_view_drag_data_received,
"on_picons_src_view_drag_data_get": self.on_picons_src_view_drag_data_get,
"on_picons_src_view_drag_end": self.on_picons_src_view_drag_end,
"on_picon_info_image_drag_data_received": self.on_picon_info_image_drag_data_received,
"on_send_button_drag_data_received": self.on_send_button_drag_data_received,
"on_download_button_drag_data_received": self.on_download_button_drag_data_received,
"on_remove_button_drag_data_received": self.on_remove_button_drag_data_received,
"on_selective_send": self.on_selective_send,
"on_selective_download": self.on_selective_download,
"on_selective_remove": self.on_selective_remove,
"on_local_remove": self.on_local_remove,
"on_picons_dest_view_realize": self.on_picons_dest_view_realize,
"on_satellites_view_realize": self.on_satellites_view_realize,
"on_satellite_selection": self.on_satellite_selection,
@@ -106,6 +114,8 @@ class PiconsDialog:
self._enigma2_path_button = builder.get_object("enigma2_path_button")
self._save_to_button = builder.get_object("save_to_button")
self._send_button = builder.get_object("send_button")
self._download_button = builder.get_object("download_button")
self._remove_button = builder.get_object("remove_button")
self._cancel_button = builder.get_object("cancel_button")
self._enigma2_radio_button = builder.get_object("enigma2_radio_button")
self._neutrino_mp_radio_button = builder.get_object("neutrino_mp_radio_button")
@@ -203,7 +213,6 @@ class PiconsDialog:
def update_picons_from_file(self, view, uri):
""" Adds picons in the view on dragging from file system. """
from urllib.parse import unquote, urlparse
path = Path(urlparse(unquote(uri)).path.strip())
f_path = str(path.resolve())
if not f_path:
@@ -230,12 +239,30 @@ class PiconsDialog:
self._picons_src_view.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, [], Gdk.DragAction.COPY)
self._picons_src_view.drag_source_add_uri_targets()
self._picons_dest_view.enable_model_drag_source(Gdk.ModifierType.BUTTON1_MASK, [], Gdk.DragAction.COPY)
self._picons_dest_view.drag_source_add_uri_targets()
self._picons_src_view.enable_model_drag_dest([], Gdk.DragAction.DEFAULT | Gdk.DragAction.MOVE)
self._picons_src_view.drag_dest_add_text_targets()
self._picon_info_image.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY)
self._picon_info_image.drag_dest_add_uri_targets()
self._send_button.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY)
self._send_button.drag_dest_add_uri_targets()
self._download_button.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY)
self._download_button.drag_dest_add_uri_targets()
self._remove_button.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY)
self._remove_button.drag_dest_add_uri_targets()
def on_picons_view_drag_data_get(self, view, drag_context, data, info, time):
model, path = view.get_selection().get_selected_rows()
if path:
data.set_uris([Path(model[path][-1]).as_uri(),
Path(self._explorer_dest_path_button.get_filename()).as_uri()])
def on_picons_src_view_drag_drop(self, view, drag_context, x, y, time):
view.stop_emission_by_name("drag_drop")
targets = drag_context.list_targets()
@@ -300,12 +327,6 @@ class PiconsDialog:
info = self._app.get_hint_for_srv_list(srv)
self.append_output("Picon assignment for the service:\n{}\n{}\n".format(info, " * " * 30))
def on_picons_src_view_drag_data_get(self, view, drag_context, data, info, time):
model, path = view.get_selection().get_selected_rows()
if path:
data.set_uris([Path(model[path][-1]).as_uri(),
Path(self._explorer_dest_path_button.get_filename()).as_uri()])
def on_picons_src_view_drag_end(self, view, drag_context):
self.update_picons_dest_view(self._app.picons_buffer)
@@ -317,7 +338,6 @@ class PiconsDialog:
uris = data.get_uris()
if len(uris) == 2:
name, fav_id = self._current_picon_info
from urllib.parse import unquote, urlparse
src = urlparse(unquote(uris[0])).path
dst = "{}/{}".format(urlparse(unquote(uris[1])).path, name)
if src != dst:
@@ -330,6 +350,26 @@ class PiconsDialog:
gen = self.update_picon_in_lists(dst, fav_id)
GLib.idle_add(lambda: next(gen, False), priority=GLib.PRIORITY_LOW)
def on_send_button_drag_data_received(self, button, drag_context, x, y, data, info, time):
path = self.get_path_from_uris(data)
if path:
self.on_send(files_filter={path.name}, path=path.parent)
def on_download_button_drag_data_received(self, button, drag_context, x, y, data, info, time):
path = self.get_path_from_uris(data)
if path:
self.on_download(files_filter={path.name})
def on_remove_button_drag_data_received(self, button, drag_context, x, y, data, info, time):
path = self.get_path_from_uris(data)
if path:
self.on_remove(files_filter={path.name})
def get_path_from_uris(self, data):
uris = data.get_uris()
if len(uris) == 2:
return Path(urlparse(unquote(uris[0])).path).resolve()
def update_picon_in_lists(self, dst, fav_id):
picon = get_picon_pixbuf(dst)
p_pos = Column.SRV_PICON
@@ -339,21 +379,30 @@ class PiconsDialog:
# ******************** Download/Upload/Remove ************************* #
def on_selective_send(self, view):
self.on_send(files_filter=self.get_selected_paths(view))
path = self.get_selected_path(view)
if path:
self.on_send(files_filter={path.name}, path=path.parent)
def on_selective_download(self, view):
self.on_download(files_filter=self.get_selected_paths(view))
path = self.get_selected_path(view)
if path:
self.on_download(files_filter={path.name})
def on_selective_remove(self, view):
self.on_remove(files_filter=self.get_selected_paths(view))
path = self.get_selected_path(view)
if path:
self.on_remove(files_filter={path.name})
def on_send(self, item=None, files_filter=None):
dest_path = self.check_dest_path()
def on_local_remove(self, view):
pass
def on_send(self, item=None, files_filter=None, path=None):
dest_path = path or self.check_dest_path()
if not dest_path:
return
settings = Settings(self._settings.settings)
settings.picons_local_path = dest_path + "/"
settings.picons_local_path = "{}/".format(dest_path)
self.show_info_message(get_message("Please, wait..."), Gtk.MessageType.INFO)
self.run_func(lambda: upload_data(settings=settings,
download_type=DownloadType.PICONS,
@@ -362,8 +411,8 @@ class PiconsDialog:
Gtk.MessageType.INFO),
files_filter=files_filter))
def on_download(self, item=None, files_filter=None):
path = self.check_dest_path()
def on_download(self, item=None, files_filter=None, path=None):
path = path or self.check_dest_path()
if not path:
return
@@ -374,7 +423,7 @@ class PiconsDialog:
callback=self.append_output,
files_filter=files_filter), True)
def on_remove(self, item, files_filter=None):
def on_remove(self, item=None, files_filter=None):
if show_dialog(DialogType.QUESTION, self._dialog) == Gtk.ResponseType.CANCEL:
return
@@ -384,9 +433,10 @@ class PiconsDialog:
Gtk.MessageType.INFO),
files_filter=files_filter))
def get_selected_paths(self, view):
def get_selected_path(self, view):
model, paths = view.get_selection().get_selected_rows()
return {model[p][1] for p in paths}
if paths:
return Path(model[paths.pop()][-1]).resolve()
def check_dest_path(self):
""" Checks the destination path and returns if present. """