mirror of https://github.com/JustKato/FreePad.git
+ Deletion implemented
This commit is contained in:
parent
faff1ab527
commit
bf1d032e68
|
@ -26,6 +26,13 @@ type Post struct {
|
||||||
Views uint32 `json:"views"`
|
Views uint32 `json:"views"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Post) Delete() error {
|
||||||
|
filePath := path.Join(getStorageDirectory(), p.Name)
|
||||||
|
|
||||||
|
// Remove the file and return the result
|
||||||
|
return os.Remove(filePath)
|
||||||
|
}
|
||||||
|
|
||||||
// Get the path to the views JSON
|
// Get the path to the views JSON
|
||||||
func getViewsFilePath() (string, error) {
|
func getViewsFilePath() (string, error) {
|
||||||
// Get the path to the storage then append the const name for the storage file
|
// Get the path to the storage then append the const name for the storage file
|
||||||
|
@ -94,7 +101,7 @@ func LoadViewsCache() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddViewToPost(postName string) uint32 {
|
func AddViewToPost(postName string, incrementViews bool) uint32 {
|
||||||
// Lock the viewers mapping
|
// Lock the viewers mapping
|
||||||
viewersLock.Lock()
|
viewersLock.Lock()
|
||||||
|
|
||||||
|
@ -104,8 +111,10 @@ func AddViewToPost(postName string) uint32 {
|
||||||
ViewsCache[postName] = 0
|
ViewsCache[postName] = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if incrementViews {
|
||||||
// Add to the counter
|
// Add to the counter
|
||||||
ViewsCache[postName]++
|
ViewsCache[postName]++
|
||||||
|
}
|
||||||
|
|
||||||
// Unlock
|
// Unlock
|
||||||
viewersLock.Unlock()
|
viewersLock.Unlock()
|
||||||
|
@ -175,7 +184,7 @@ func getStorageDirectory() string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get a post from the file system
|
// Get a post from the file system
|
||||||
func GetPost(fileName string) Post {
|
func GetPost(fileName string, incrementViews bool) Post {
|
||||||
// Get the base storage directory and make sure it exists
|
// Get the base storage directory and make sure it exists
|
||||||
storageDir := getStorageDirectory()
|
storageDir := getStorageDirectory()
|
||||||
|
|
||||||
|
@ -183,7 +192,7 @@ func GetPost(fileName string) Post {
|
||||||
filePath := fmt.Sprintf("%s%s", storageDir, fileName)
|
filePath := fmt.Sprintf("%s%s", storageDir, fileName)
|
||||||
|
|
||||||
// Get the post views and add 1 to them
|
// Get the post views and add 1 to them
|
||||||
postViews := AddViewToPost(fileName)
|
postViews := AddViewToPost(fileName, incrementViews)
|
||||||
|
|
||||||
p := Post{
|
p := Post{
|
||||||
Name: fileName,
|
Name: fileName,
|
||||||
|
@ -316,7 +325,7 @@ func GetAllPosts() []Post {
|
||||||
// Go through all of the files
|
// Go through all of the files
|
||||||
for _, v := range files {
|
for _, v := range files {
|
||||||
// Process the file into a pad
|
// Process the file into a pad
|
||||||
postList = append(postList, GetPost(v.Name()))
|
postList = append(postList, GetPost(v.Name(), false))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the post list
|
// Return the post list
|
||||||
|
|
|
@ -64,7 +64,18 @@ func AdminRoutes(router *gin.RouterGroup) {
|
||||||
})
|
})
|
||||||
|
|
||||||
router.GET("/delete/:padname", func(ctx *gin.Context) {
|
router.GET("/delete/:padname", func(ctx *gin.Context) {
|
||||||
|
// Get the pad name that we bout' to delete
|
||||||
|
padName := ctx.Param("padname")
|
||||||
|
|
||||||
|
// Try and get the pad, check if valid
|
||||||
|
pad := objects.GetPost(padName, false)
|
||||||
|
|
||||||
|
// Delete the pad
|
||||||
|
err := pad.Delete()
|
||||||
|
fmt.Println(err)
|
||||||
|
|
||||||
|
// Redirect the user to the admin page
|
||||||
|
ctx.Redirect(http.StatusFound, "/admin/view")
|
||||||
})
|
})
|
||||||
|
|
||||||
// Admin view route
|
// Admin view route
|
||||||
|
@ -73,8 +84,6 @@ func AdminRoutes(router *gin.RouterGroup) {
|
||||||
// Get all of the pads as a listing
|
// Get all of the pads as a listing
|
||||||
padList := objects.GetAllPosts()
|
padList := objects.GetAllPosts()
|
||||||
|
|
||||||
fmt.Println(padList)
|
|
||||||
|
|
||||||
ctx.HTML(200, "admin_view.html", gin.H{
|
ctx.HTML(200, "admin_view.html", gin.H{
|
||||||
"title": "Admin",
|
"title": "Admin",
|
||||||
"padList": padList,
|
"padList": padList,
|
||||||
|
|
|
@ -41,7 +41,7 @@ func HomeRoutes(router *gin.Engine) {
|
||||||
}
|
}
|
||||||
postName = sanitize.XSS(sanitize.SingleLine(postName))
|
postName = sanitize.XSS(sanitize.SingleLine(postName))
|
||||||
|
|
||||||
post := objects.GetPost(postName)
|
post := objects.GetPost(postName, true)
|
||||||
|
|
||||||
c.HTML(200, "page.html", gin.H{
|
c.HTML(200, "page.html", gin.H{
|
||||||
"title": postName,
|
"title": postName,
|
||||||
|
|
|
@ -37,7 +37,10 @@
|
||||||
<div class="pad-name col-5">
|
<div class="pad-name col-5">
|
||||||
Pad Name
|
Pad Name
|
||||||
</div>
|
</div>
|
||||||
<div class="pad-last-modified col-5">
|
<div class="pad-last-view col-1">
|
||||||
|
Views
|
||||||
|
</div>
|
||||||
|
<div class="pad-last-modified col-4">
|
||||||
Create Date
|
Create Date
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
|
@ -54,11 +57,14 @@
|
||||||
{{ $element.Name }}
|
{{ $element.Name }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="pad-last-modified col-5">
|
<div class="pad-last-view col-1">
|
||||||
|
{{ $element.Views }}
|
||||||
|
</div>
|
||||||
|
<div class="pad-last-modified col-4">
|
||||||
{{ $element.LastModified }}
|
{{ $element.LastModified }}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<div onclick="doDelete(`{{ $element.Name }}`)" class="btn btn-danger">
|
<div onclick="doDelete({{ $element.Name }})" class="btn btn-danger">
|
||||||
Delete
|
Delete
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue