mirror of
git://jb55.com/damus
synced 2024-09-30 00:40:45 +00:00
nav: compare searches for navigation decisions
In 7c98489
, routes are compared to the stack top before push.
Problem is, search comparison is not looking at the NostrFilter.
Instead, hash value involves two UUID-based fields (sub_id,
profiles_subid), so equality will always fail and result in a
"duplicated push".
As I do not know the context of such fields to deliberately
drop them, this patch is sent as a draft.
The basic idea is using the filter for comparison, so I added
a Hashable extension to NostrFilter where the subject of the
comparison may be fine-tuned.
Adding `hashtag` resolves #1367 but it's only a starting point.
Signed-off-by: Davide De Rosa <keeshux@gmail.com>
Reviewed-by: William Casarin <jb55@jb55.com>
Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
parent
7ae66b8490
commit
45904e1bf2
@ -7,6 +7,7 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
0E8A4BB72AE4359200065E81 /* NostrFilter+Hashable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E8A4BB62AE4359200065E81 /* NostrFilter+Hashable.swift */; };
|
||||
3165648B295B70D500C64604 /* LinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3165648A295B70D500C64604 /* LinkView.swift */; };
|
||||
3169CAE6294E69C000EE4006 /* EmptyTimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3169CAE5294E69C000EE4006 /* EmptyTimelineView.swift */; };
|
||||
3169CAED294FCCFC00EE4006 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3169CAEC294FCCFC00EE4006 /* Constants.swift */; };
|
||||
@ -481,6 +482,7 @@
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
0E8A4BB62AE4359200065E81 /* NostrFilter+Hashable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NostrFilter+Hashable.swift"; sourceTree = "<group>"; };
|
||||
3165648A295B70D500C64604 /* LinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkView.swift; sourceTree = "<group>"; };
|
||||
3169CAE5294E69C000EE4006 /* EmptyTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyTimelineView.swift; sourceTree = "<group>"; };
|
||||
3169CAEC294FCCFC00EE4006 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Constants.swift; path = damus/Util/Constants.swift; sourceTree = SOURCE_ROOT; };
|
||||
@ -1295,6 +1297,7 @@
|
||||
4C363A9928283854006E126D /* Reply.swift */,
|
||||
4C363A9B282838B9006E126D /* EventRef.swift */,
|
||||
4C363AA328296DEE006E126D /* SearchModel.swift */,
|
||||
0E8A4BB62AE4359200065E81 /* NostrFilter+Hashable.swift */,
|
||||
4C3AC79A28306D7B00E1F516 /* Contacts.swift */,
|
||||
4C285C85283892E7008A31F1 /* CreateAccountModel.swift */,
|
||||
4C63334F283D40E500B1C9C3 /* HomeModel.swift */,
|
||||
@ -2574,6 +2577,7 @@
|
||||
4C4793062A993E5300489948 /* json_parser.c in Sources */,
|
||||
4C4793052A993E3200489948 /* builder.c in Sources */,
|
||||
4C4793042A993DC000489948 /* midl.c in Sources */,
|
||||
0E8A4BB72AE4359200065E81 /* NostrFilter+Hashable.swift in Sources */,
|
||||
4C4793012A993CDA00489948 /* mdb.c in Sources */,
|
||||
4CE9FBBA2A6B3C63007E485C /* nostrdb.c in Sources */,
|
||||
ADFE73552AD4793100EC7326 /* QRScanNSECView.swift in Sources */,
|
||||
|
19
damus/Models/NostrFilter+Hashable.swift
Normal file
19
damus/Models/NostrFilter+Hashable.swift
Normal file
@ -0,0 +1,19 @@
|
||||
//
|
||||
// NostrFilter+Hashable.swift
|
||||
// damus
|
||||
//
|
||||
// Created by Davide De Rosa on 10/21/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
// FIXME: fine-tune here what's involved in comparing search filters
|
||||
extension NostrFilter: Hashable {
|
||||
static func == (lhs: Self, rhs: Self) -> Bool {
|
||||
lhs.hashtag == rhs.hashtag
|
||||
}
|
||||
|
||||
func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(hashtag)
|
||||
}
|
||||
}
|
@ -188,8 +188,7 @@ enum Route: Hashable {
|
||||
hasher.combine(reactions.target)
|
||||
case .Search(let search):
|
||||
hasher.combine("search")
|
||||
hasher.combine(search.sub_id)
|
||||
hasher.combine(search.profiles_subid)
|
||||
hasher.combine(search.search)
|
||||
case .EULA:
|
||||
hasher.combine("eula")
|
||||
case .Login:
|
||||
|
Loading…
Reference in New Issue
Block a user