mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-05-02 10:32:07 -04:00
Compare commits
27 Commits
b9064d3bbb
...
164db6c949
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
164db6c949 | ||
|
|
e83c276bec | ||
|
|
d1466783d5 | ||
|
|
3cf7c39213 | ||
|
|
a297611bb4 | ||
|
|
2476075521 | ||
|
|
21a3ec1e5b | ||
|
|
4cf1b1a09f | ||
|
|
b9f33cabd6 | ||
|
|
50603c312a | ||
|
|
a40d287446 | ||
|
|
dc881e4618 | ||
|
|
d359603ca4 | ||
|
|
4e085b00b6 | ||
|
|
a5263bee85 | ||
|
|
a8c08729be | ||
|
|
6cec54d481 | ||
|
|
5701a7e831 | ||
|
|
b88f4471ac | ||
|
|
cb82d276d5 | ||
|
|
cf2d143d08 | ||
|
|
aaae1aab53 | ||
|
|
23e09d723e | ||
|
|
4dab8604b9 | ||
|
|
ff1ec871f2 | ||
|
|
436a585ec0 | ||
|
|
0fe6e2ea7a |
@@ -212,10 +212,9 @@ func (m *Manager) setupDataDeviceSync() {
|
||||
}
|
||||
|
||||
var offer any
|
||||
switch {
|
||||
case e.Id != nil:
|
||||
if e.Id != nil {
|
||||
offer = e.Id
|
||||
case e.OfferId != 0:
|
||||
} else if e.OfferId != 0 {
|
||||
m.offerMutex.RLock()
|
||||
offer = m.offerRegistry[e.OfferId]
|
||||
m.offerMutex.RUnlock()
|
||||
@@ -225,6 +224,10 @@ func (m *Manager) setupDataDeviceSync() {
|
||||
wasOwner := m.isOwner
|
||||
m.ownerLock.Unlock()
|
||||
|
||||
if offer == nil {
|
||||
return
|
||||
}
|
||||
|
||||
if wasOwner {
|
||||
return
|
||||
}
|
||||
@@ -233,11 +236,9 @@ func (m *Manager) setupDataDeviceSync() {
|
||||
m.currentOffer = offer
|
||||
|
||||
if prevOffer != nil && prevOffer != offer {
|
||||
m.releaseOffer(prevOffer)
|
||||
}
|
||||
|
||||
if offer == nil {
|
||||
return
|
||||
m.offerMutex.Lock()
|
||||
delete(m.offerMimeTypes, prevOffer)
|
||||
m.offerMutex.Unlock()
|
||||
}
|
||||
|
||||
m.offerMutex.RLock()
|
||||
@@ -291,33 +292,6 @@ func (m *Manager) setupDataDeviceSync() {
|
||||
log.Info("Data device setup complete")
|
||||
}
|
||||
|
||||
func (m *Manager) releaseOffer(offer any) {
|
||||
if offer == nil {
|
||||
return
|
||||
}
|
||||
typedOffer, ok := offer.(*ext_data_control.ExtDataControlOfferV1)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
m.offerMutex.Lock()
|
||||
delete(m.offerMimeTypes, offer)
|
||||
delete(m.offerRegistry, typedOffer.ID())
|
||||
m.offerMutex.Unlock()
|
||||
typedOffer.Destroy()
|
||||
}
|
||||
|
||||
func (m *Manager) releaseCurrentSource() {
|
||||
if m.currentSource == nil {
|
||||
return
|
||||
}
|
||||
source, ok := m.currentSource.(*ext_data_control.ExtDataControlSourceV1)
|
||||
m.currentSource = nil
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
source.Destroy()
|
||||
}
|
||||
|
||||
func (m *Manager) readAndStore(r *os.File, mimeType string) {
|
||||
defer r.Close()
|
||||
|
||||
@@ -421,7 +395,7 @@ func (m *Manager) deduplicateInTx(b *bolt.Bucket, hash uint64) error {
|
||||
if extractHash(v) != hash {
|
||||
continue
|
||||
}
|
||||
entry, err := decodeEntryMeta(v)
|
||||
entry, err := decodeEntry(v)
|
||||
if err == nil && entry.Pinned {
|
||||
continue
|
||||
}
|
||||
@@ -439,7 +413,7 @@ func (m *Manager) trimLengthInTx(b *bolt.Bucket) error {
|
||||
c := b.Cursor()
|
||||
var count int
|
||||
for k, v := c.Last(); k != nil; k, v = c.Prev() {
|
||||
entry, err := decodeEntryMeta(v)
|
||||
entry, err := decodeEntry(v)
|
||||
if err == nil && entry.Pinned {
|
||||
continue
|
||||
}
|
||||
@@ -482,14 +456,6 @@ func encodeEntry(e Entry) ([]byte, error) {
|
||||
}
|
||||
|
||||
func decodeEntry(data []byte) (Entry, error) {
|
||||
return decodeEntryFields(data, true)
|
||||
}
|
||||
|
||||
func decodeEntryMeta(data []byte) (Entry, error) {
|
||||
return decodeEntryFields(data, false)
|
||||
}
|
||||
|
||||
func decodeEntryFields(data []byte, withData bool) (Entry, error) {
|
||||
buf := bytes.NewReader(data)
|
||||
var e Entry
|
||||
|
||||
@@ -497,15 +463,8 @@ func decodeEntryFields(data []byte, withData bool) (Entry, error) {
|
||||
|
||||
var dataLen uint32
|
||||
binary.Read(buf, binary.BigEndian, &dataLen)
|
||||
switch {
|
||||
case withData:
|
||||
e.Data = make([]byte, dataLen)
|
||||
buf.Read(e.Data)
|
||||
default:
|
||||
if _, err := buf.Seek(int64(dataLen), io.SeekCurrent); err != nil {
|
||||
return e, err
|
||||
}
|
||||
}
|
||||
e.Data = make([]byte, dataLen)
|
||||
buf.Read(e.Data)
|
||||
|
||||
var mimeLen uint32
|
||||
binary.Read(buf, binary.BigEndian, &mimeLen)
|
||||
@@ -709,9 +668,14 @@ func sizeStr(size int) string {
|
||||
func (m *Manager) updateState() {
|
||||
history := m.GetHistory()
|
||||
|
||||
for i := range history {
|
||||
history[i].Data = nil
|
||||
}
|
||||
|
||||
var current *Entry
|
||||
if len(history) > 0 {
|
||||
c := history[0]
|
||||
c.Data = nil
|
||||
current = &c
|
||||
}
|
||||
|
||||
@@ -786,7 +750,7 @@ func (m *Manager) GetHistory() []Entry {
|
||||
c := b.Cursor()
|
||||
|
||||
for k, v := c.Last(); k != nil; k, v = c.Prev() {
|
||||
entry, err := decodeEntryMeta(v)
|
||||
entry, err := decodeEntry(v)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
@@ -971,7 +935,7 @@ func (m *Manager) ClearHistory() {
|
||||
var toDelete [][]byte
|
||||
c := b.Cursor()
|
||||
for k, v := c.First(); k != nil; k, v = c.Next() {
|
||||
entry, err := decodeEntryMeta(v)
|
||||
entry, err := decodeEntry(v)
|
||||
if err != nil || !entry.Pinned {
|
||||
toDelete = append(toDelete, k)
|
||||
}
|
||||
@@ -994,7 +958,7 @@ func (m *Manager) ClearHistory() {
|
||||
if b != nil {
|
||||
c := b.Cursor()
|
||||
for k, v := c.First(); k != nil; k, v = c.Next() {
|
||||
entry, _ := decodeEntryMeta(v)
|
||||
entry, _ := decodeEntry(v)
|
||||
if entry.Pinned {
|
||||
pinnedCount++
|
||||
}
|
||||
@@ -1102,7 +1066,6 @@ func (m *Manager) SetClipboard(data []byte, mimeType string) error {
|
||||
m.ownerLock.Unlock()
|
||||
})
|
||||
|
||||
m.releaseCurrentSource()
|
||||
m.currentSource = source
|
||||
m.sourceMutex.Lock()
|
||||
m.sourceMimeTypes = []string{mimeType}
|
||||
@@ -1182,11 +1145,9 @@ func (m *Manager) Close() {
|
||||
m.subscribers = make(map[string]chan State)
|
||||
m.subMutex.Unlock()
|
||||
|
||||
m.releaseCurrentSource()
|
||||
|
||||
if m.currentOffer != nil {
|
||||
m.releaseOffer(m.currentOffer)
|
||||
m.currentOffer = nil
|
||||
if m.currentSource != nil {
|
||||
source := m.currentSource.(*ext_data_control.ExtDataControlSourceV1)
|
||||
source.Destroy()
|
||||
}
|
||||
|
||||
if m.dataDevice != nil {
|
||||
@@ -1230,10 +1191,11 @@ func (m *Manager) clearOldEntries(days int) error {
|
||||
var toDelete [][]byte
|
||||
c := b.Cursor()
|
||||
for k, v := c.First(); k != nil; k, v = c.Next() {
|
||||
entry, err := decodeEntryMeta(v)
|
||||
entry, err := decodeEntry(v)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
// Skip pinned entries
|
||||
if entry.Pinned {
|
||||
continue
|
||||
}
|
||||
@@ -1348,7 +1310,7 @@ func (m *Manager) Search(params SearchParams) SearchResult {
|
||||
|
||||
c := b.Cursor()
|
||||
for k, v := c.Last(); k != nil; k, v = c.Prev() {
|
||||
entry, err := decodeEntryMeta(v)
|
||||
entry, err := decodeEntry(v)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
@@ -1373,6 +1335,7 @@ func (m *Manager) Search(params SearchParams) SearchResult {
|
||||
continue
|
||||
}
|
||||
|
||||
entry.Data = nil
|
||||
all = append(all, entry)
|
||||
}
|
||||
return nil
|
||||
@@ -1547,7 +1510,7 @@ func (m *Manager) PinEntry(id uint64) error {
|
||||
}
|
||||
c := b.Cursor()
|
||||
for k, v := c.First(); k != nil; k, v = c.Next() {
|
||||
entry, err := decodeEntryMeta(v)
|
||||
entry, err := decodeEntry(v)
|
||||
if err != nil || !entry.Pinned {
|
||||
continue
|
||||
}
|
||||
@@ -1565,6 +1528,7 @@ func (m *Manager) PinEntry(id uint64) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Check pinned count
|
||||
cfg := m.getConfig()
|
||||
pinnedCount := 0
|
||||
if err := m.db.View(func(tx *bolt.Tx) error {
|
||||
@@ -1574,7 +1538,7 @@ func (m *Manager) PinEntry(id uint64) error {
|
||||
}
|
||||
c := b.Cursor()
|
||||
for k, v := c.First(); k != nil; k, v = c.Next() {
|
||||
entry, err := decodeEntryMeta(v)
|
||||
entry, err := decodeEntry(v)
|
||||
if err == nil && entry.Pinned {
|
||||
pinnedCount++
|
||||
}
|
||||
@@ -1665,11 +1629,12 @@ func (m *Manager) GetPinnedEntries() []Entry {
|
||||
|
||||
c := b.Cursor()
|
||||
for k, v := c.Last(); k != nil; k, v = c.Prev() {
|
||||
entry, err := decodeEntryMeta(v)
|
||||
entry, err := decodeEntry(v)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if entry.Pinned {
|
||||
entry.Data = nil
|
||||
pinned = append(pinned, entry)
|
||||
}
|
||||
}
|
||||
@@ -1695,7 +1660,7 @@ func (m *Manager) GetPinnedCount() int {
|
||||
|
||||
c := b.Cursor()
|
||||
for k, v := c.First(); k != nil; k, v = c.Next() {
|
||||
entry, err := decodeEntryMeta(v)
|
||||
entry, err := decodeEntry(v)
|
||||
if err == nil && entry.Pinned {
|
||||
count++
|
||||
}
|
||||
@@ -1814,7 +1779,6 @@ func (m *Manager) CopyFile(filePath string) error {
|
||||
m.ownerLock.Unlock()
|
||||
})
|
||||
|
||||
m.releaseCurrentSource()
|
||||
m.currentSource = source
|
||||
|
||||
m.ownerLock.Lock()
|
||||
|
||||
Reference in New Issue
Block a user