mirror of
https://github.com/nkanaev/yarr.git
synced 2025-05-24 00:33:14 +00:00
filter feed items
This commit is contained in:
parent
3cc7f09436
commit
7f8225b351
@ -259,6 +259,15 @@ func FeedHandler(rw http.ResponseWriter, req *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func findItems(db *storage.Storage, filter storage.ItemFilter) []storage.Item {
|
||||||
|
statusFilter := db.GetSettingsValue("filter")
|
||||||
|
if statusFilter != nil && len(statusFilter.(string)) != 0 {
|
||||||
|
status := storage.StatusValues[statusFilter.(string)]
|
||||||
|
filter.Status = &status
|
||||||
|
}
|
||||||
|
return db.ListItems(filter)
|
||||||
|
}
|
||||||
|
|
||||||
func FeedItemsHandler(rw http.ResponseWriter, req *http.Request) {
|
func FeedItemsHandler(rw http.ResponseWriter, req *http.Request) {
|
||||||
id, err := strconv.ParseInt(Vars(req)["id"], 10, 64)
|
id, err := strconv.ParseInt(Vars(req)["id"], 10, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -266,7 +275,7 @@ func FeedItemsHandler(rw http.ResponseWriter, req *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
rw.WriteHeader(http.StatusOK)
|
rw.WriteHeader(http.StatusOK)
|
||||||
items := db(req).ListItems(storage.ItemFilter{FeedID: &id})
|
items := findItems(db(req), storage.ItemFilter{FeedID: &id})
|
||||||
writeJSON(rw, items)
|
writeJSON(rw, items)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,7 +312,7 @@ func FolderItemsHandler(rw http.ResponseWriter, req *http.Request) {
|
|||||||
rw.WriteHeader(http.StatusBadRequest)
|
rw.WriteHeader(http.StatusBadRequest)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
items := db(req).ListItems(storage.ItemFilter{FolderID: &id})
|
items := findItems(db(req), storage.ItemFilter{FolderID: &id})
|
||||||
writeJSON(rw, items)
|
writeJSON(rw, items)
|
||||||
} else {
|
} else {
|
||||||
rw.WriteHeader(http.StatusMethodNotAllowed)
|
rw.WriteHeader(http.StatusMethodNotAllowed)
|
||||||
@ -312,7 +321,7 @@ func FolderItemsHandler(rw http.ResponseWriter, req *http.Request) {
|
|||||||
|
|
||||||
func ItemListHandler(rw http.ResponseWriter, req *http.Request) {
|
func ItemListHandler(rw http.ResponseWriter, req *http.Request) {
|
||||||
if req.Method == "GET" {
|
if req.Method == "GET" {
|
||||||
items := db(req).ListItems(storage.ItemFilter{})
|
items := findItems(db(req), storage.ItemFilter{})
|
||||||
writeJSON(rw, items)
|
writeJSON(rw, items)
|
||||||
} else {
|
} else {
|
||||||
rw.WriteHeader(http.StatusMethodNotAllowed)
|
rw.WriteHeader(http.StatusMethodNotAllowed)
|
||||||
|
@ -10,6 +10,21 @@ func settingsDefaults() map[string]interface{} {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Storage) GetSettingsValue(key string) interface{} {
|
||||||
|
row := s.db.QueryRow(`select val from settings where key=?`, key)
|
||||||
|
if row == nil {
|
||||||
|
return settingsDefaults()[key]
|
||||||
|
}
|
||||||
|
var val []byte
|
||||||
|
row.Scan(&val)
|
||||||
|
var valDecoded interface{}
|
||||||
|
if err := json.Unmarshal([]byte(val), &valDecoded); err != nil {
|
||||||
|
s.log.Print(err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return valDecoded
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Storage) GetSettings() map[string]interface{} {
|
func (s *Storage) GetSettings() map[string]interface{} {
|
||||||
result := settingsDefaults()
|
result := settingsDefaults()
|
||||||
rows, err := s.db.Query(`select key, val from settings;`)
|
rows, err := s.db.Query(`select key, val from settings;`)
|
||||||
|
@ -3,17 +3,16 @@
|
|||||||
var vm = new Vue({
|
var vm = new Vue({
|
||||||
el: '#app',
|
el: '#app',
|
||||||
created: function() {
|
created: function() {
|
||||||
this.refresh()
|
|
||||||
var vm = this
|
var vm = this
|
||||||
api.settings.get().then(function(data) {
|
api.settings.get().then(function(data) {
|
||||||
console.log(1)
|
|
||||||
vm.filterSelected = data.filter
|
vm.filterSelected = data.filter
|
||||||
console.log(1)
|
vm.refreshItems()
|
||||||
})
|
})
|
||||||
|
this.refreshFeeds()
|
||||||
},
|
},
|
||||||
data: function() {
|
data: function() {
|
||||||
return {
|
return {
|
||||||
'filterSelected': 'all',
|
'filterSelected': null,
|
||||||
'folders': [],
|
'folders': [],
|
||||||
'feeds': [],
|
'feeds': [],
|
||||||
'feedSelected': null,
|
'feedSelected': null,
|
||||||
@ -48,17 +47,40 @@ var vm = new Vue({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
'filterSelected': function(newVal) {
|
'filterSelected': function(newVal, oldVal) {
|
||||||
|
if (oldVal === null) return // do nothing, initial setup
|
||||||
|
var vm = this
|
||||||
api.settings.update({filter: newVal}).then(function() {
|
api.settings.update({filter: newVal}).then(function() {
|
||||||
this.$emit('refresh:items')
|
vm.refreshItems()
|
||||||
}.bind(this))
|
})
|
||||||
},
|
},
|
||||||
'feedSelected': function(newVal, oldVal) {
|
'feedSelected': function(newVal, oldVal) {
|
||||||
|
this.refreshItems()
|
||||||
|
},
|
||||||
|
'itemSelected': function(newVal, oldVal) {
|
||||||
|
this.itemSelectedDetails = this.itemsById[newVal]
|
||||||
|
if (this.itemSelectedDetails.status == 'unread') {
|
||||||
|
this.itemSelectedDetails.status = 'read'
|
||||||
|
api.items.update(this.itemSelectedDetails.id, {status: this.itemSelectedDetails.status})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
refreshFeeds: function() {
|
||||||
|
var vm = this
|
||||||
|
Promise
|
||||||
|
.all([api.folders.list(), api.feeds.list()])
|
||||||
|
.then(function(values) {
|
||||||
|
vm.folders = values[0]
|
||||||
|
vm.feeds = values[1]
|
||||||
|
})
|
||||||
|
},
|
||||||
|
refreshItems: function() {
|
||||||
var promise = null
|
var promise = null
|
||||||
if (newVal === null) {
|
if (!this.feedSelected) {
|
||||||
promise = api.items.list()
|
promise = api.items.list()
|
||||||
} else {
|
} else {
|
||||||
var parts = newVal.split(':', 2)
|
var parts = this.feedSelected.split(':', 2)
|
||||||
var type = parts[0]
|
var type = parts[0]
|
||||||
var guid = parts[1]
|
var guid = parts[1]
|
||||||
if (type === 'feed') {
|
if (type === 'feed') {
|
||||||
@ -71,24 +93,6 @@ var vm = new Vue({
|
|||||||
vm.items = items
|
vm.items = items
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
'itemSelected': function(newVal, oldVal) {
|
|
||||||
this.itemSelectedDetails = this.itemsById[newVal]
|
|
||||||
if (this.itemSelectedDetails.status == 'unread') {
|
|
||||||
this.itemSelectedDetails.status = 'read'
|
|
||||||
api.items.update(this.itemSelectedDetails.id, {status: this.itemSelectedDetails.status})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
refresh: function() {
|
|
||||||
var vm = this
|
|
||||||
Promise
|
|
||||||
.all([api.folders.list(), api.feeds.list()])
|
|
||||||
.then(function(values) {
|
|
||||||
vm.folders = values[0]
|
|
||||||
vm.feeds = values[1]
|
|
||||||
})
|
|
||||||
},
|
|
||||||
toggleFolderExpanded: function(folder) {
|
toggleFolderExpanded: function(folder) {
|
||||||
folder.is_expanded = !folder.is_expanded
|
folder.is_expanded = !folder.is_expanded
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user