-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathdelete_file.lua
More file actions
137 lines (123 loc) · 3.88 KB
/
delete_file.lua
File metadata and controls
137 lines (123 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
local utils = require "mp.utils"
local msg = require "mp.msg"
require "mp.options"
options = {}
options.MoveToFolder = false
if package.config:sub(1,1) == "/" then
options.DeletedFilesPath = utils.join_path(os.getenv("HOME"), "delete_file")
ops = "unix"
else
options.DeletedFilesPath = utils.join_path(os.getenv("USERPROFILE"), "delete_file")
ops = "win"
end
read_options(options)
del_list = {}
function createDirectory()
if not utils.file_info(options.DeletedFilesPath) then
if not os.execute(string.format('mkdir "%s"', options.DeletedFilesPath)) then
msg.error("failed to create folder for moving deleted files")
end
end
end
function contains_item(l, i)
local _, file_name = utils.split_path(i)
for k, v in pairs(l) do
if v == i then
mp.osd_message("undeleting current file")
msg.info("undeleting file: ", file_name)
l[k] = nil
return true
end
end
mp.osd_message("deleting current file")
msg.info("deleting file: ", file_name)
return false
end
function mark_delete()
local work_dir = mp.get_property_native("working-directory")
local file_path = mp.get_property_native("path")
local s = file_path:find(work_dir, 0, true)
local final_path
if s and s == 0 then
final_path = file_path
else
final_path = utils.join_path(work_dir, file_path)
end
msg.debug("final_path: ", final_path)
if not contains_item(del_list, final_path) then
table.insert(del_list, final_path)
end
end
function delete()
if options.MoveToFolder then
--create folder if not exists
createDirectory()
end
for i, v in pairs(del_list) do
if options.MoveToFolder then
msg.info("moving: ", v)
local _, file_name = utils.split_path(v)
--this loop will add a number to the file name if it already exists in the directory
--But limit the number of iterations
for i = 1,100 do
if i > 1 then
if file_name:find("[.].+$") then
file_name = file_name:gsub("([.].+)$", string.format("_%d%%1", i))
else
file_name = string.format("%s_%d", file_name, i)
end
end
local movedPath = utils.join_path(options.DeletedFilesPath, file_name)
local fileInfo = utils.file_info(movedPath)
if not fileInfo then
local ok, err, code = os.rename(v, movedPath)
if not ok then
msg.error("could not move file: ", err, code)
end
break
else
msg.warn("File ("..file_name..") already exists")
end
end
else
msg.info("deleting: ", v)
local ok, err, code = os.remove(v)
if not ok then
msg.error("failed deleting file: ", err, code)
end
end
end
end
function showList()
local delString = "Delete Marks:\n"
for _,v in pairs(del_list) do
local dFile = v:gsub("/","\\")
delString = delString..dFile:match("\\*([^\\]*)$").."; "
end
if delString:find(";") then
mp.osd_message(delString)
return delString
elseif showListTimer then
showListTimer:kill()
end
end
showListTimer = mp.add_periodic_timer(1,showList)
showListTimer:kill()
function list_marks()
if showListTimer:is_enabled() then
showListTimer:kill()
mp.osd_message("",0)
else
local delString = showList()
if delString and delString:find(";") then
showListTimer:resume()
msg.info(delString)
else
showListTimer:kill()
end
end
end
mp.add_key_binding("ctrl+DEL", "delete_file", mark_delete)
mp.add_key_binding("alt+DEL", "list_marks", list_marks)
mp.add_key_binding("ctrl+shift+DEL", "clear_list", function() mp.osd_message("un-delete all"); del_list = {}; end)
mp.register_event("shutdown", delete)