mirror of
https://github.com/cheeaun/phanpy.git
synced 2025-02-24 00:38:49 +01:00
Finally DRY this saving status code
This commit is contained in:
parent
522dd08925
commit
13c3b8fa3b
4 changed files with 27 additions and 51 deletions
42
src/app.jsx
42
src/app.jsx
|
@ -20,7 +20,7 @@ import Settings from './pages/settings';
|
|||
import Status from './pages/status';
|
||||
import Welcome from './pages/welcome';
|
||||
import { getAccessToken } from './utils/auth';
|
||||
import states from './utils/states';
|
||||
import states, { saveStatus } from './utils/states';
|
||||
import store from './utils/store';
|
||||
|
||||
const { VITE_CLIENT_NAME: CLIENT_NAME } = import.meta.env;
|
||||
|
@ -300,18 +300,12 @@ async function startStream() {
|
|||
});
|
||||
}
|
||||
|
||||
states.statuses[status.id] = status;
|
||||
if (status.reblog) {
|
||||
states.statuses[status.reblog.id] = status.reblog;
|
||||
}
|
||||
saveStatus(status);
|
||||
}, 5000);
|
||||
stream.on('update', handleNewStatus);
|
||||
stream.on('status.update', (status) => {
|
||||
console.log('STATUS.UPDATE', status);
|
||||
states.statuses[status.id] = status;
|
||||
if (status.reblog) {
|
||||
states.statuses[status.reblog.id] = status.reblog;
|
||||
}
|
||||
saveStatus(status);
|
||||
});
|
||||
stream.on('delete', (statusID) => {
|
||||
console.log('DELETE', statusID);
|
||||
|
@ -332,16 +326,7 @@ async function startStream() {
|
|||
states.notificationsNew.unshift(notification);
|
||||
}
|
||||
|
||||
if (notification.status && !states.statuses[notification.status.id]) {
|
||||
states.statuses[notification.status.id] = notification.status;
|
||||
if (
|
||||
notification.status.reblog &&
|
||||
!states.statuses[notification.status.reblog.id]
|
||||
) {
|
||||
states.statuses[notification.status.reblog.id] =
|
||||
notification.status.reblog;
|
||||
}
|
||||
}
|
||||
saveStatus(notification.status, { override: false });
|
||||
});
|
||||
|
||||
stream.ws.onclose = () => {
|
||||
|
@ -393,10 +378,7 @@ function startVisibility() {
|
|||
newStatuses[0].id !== states.home[0].id
|
||||
) {
|
||||
states.homeNew = newStatuses.map((status) => {
|
||||
states.statuses[status.id] = status;
|
||||
if (status.reblog) {
|
||||
states.statuses[status.reblog.id] = status.reblog;
|
||||
}
|
||||
saveStatus(status);
|
||||
return {
|
||||
id: status.id,
|
||||
reblog: status.reblog?.id,
|
||||
|
@ -418,19 +400,7 @@ function startVisibility() {
|
|||
states.notificationsNew.unshift(notification);
|
||||
}
|
||||
|
||||
if (
|
||||
notification.status &&
|
||||
!states.statuses[notification.status.id]
|
||||
) {
|
||||
states.statuses[notification.status.id] = notification.status;
|
||||
if (
|
||||
notification.status.reblog &&
|
||||
!states.statuses[notification.status.reblog.id]
|
||||
) {
|
||||
states.statuses[notification.status.reblog.id] =
|
||||
notification.status.reblog;
|
||||
}
|
||||
}
|
||||
saveStatus(notification.status, { override: false });
|
||||
}
|
||||
} catch (e) {
|
||||
// Silently fail
|
||||
|
|
|
@ -22,7 +22,7 @@ import NameText from '../components/name-text';
|
|||
import enhanceContent from '../utils/enhance-content';
|
||||
import htmlContentLength from '../utils/html-content-length';
|
||||
import shortenNumber from '../utils/shorten-number';
|
||||
import states from '../utils/states';
|
||||
import states, { saveStatus } from '../utils/states';
|
||||
import store from '../utils/store';
|
||||
import useDebouncedCallback from '../utils/useDebouncedCallback';
|
||||
import visibilityIconsMap from '../utils/visibility-icons-map';
|
||||
|
@ -531,12 +531,10 @@ function Status({
|
|||
const newStatus = await masto.v1.statuses.unreblog(
|
||||
id,
|
||||
);
|
||||
states.statuses[newStatus.id] = newStatus;
|
||||
saveStatus(newStatus);
|
||||
} else {
|
||||
const newStatus = await masto.v1.statuses.reblog(id);
|
||||
states.statuses[newStatus.id] = newStatus;
|
||||
states.statuses[newStatus.reblog.id] =
|
||||
newStatus.reblog;
|
||||
saveStatus(newStatus);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
|
@ -568,10 +566,10 @@ function Status({
|
|||
const newStatus = await masto.v1.statuses.unfavourite(
|
||||
id,
|
||||
);
|
||||
states.statuses[newStatus.id] = newStatus;
|
||||
saveStatus(newStatus);
|
||||
} else {
|
||||
const newStatus = await masto.v1.statuses.favourite(id);
|
||||
states.statuses[newStatus.id] = newStatus;
|
||||
saveStatus(newStatus);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
|
@ -599,10 +597,10 @@ function Status({
|
|||
const newStatus = await masto.v1.statuses.unbookmark(
|
||||
id,
|
||||
);
|
||||
states.statuses[newStatus.id] = newStatus;
|
||||
saveStatus(newStatus);
|
||||
} else {
|
||||
const newStatus = await masto.v1.statuses.bookmark(id);
|
||||
states.statuses[newStatus.id] = newStatus;
|
||||
saveStatus(newStatus);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
|
|
|
@ -7,7 +7,7 @@ import { useSnapshot } from 'valtio';
|
|||
import Icon from '../components/icon';
|
||||
import Loader from '../components/loader';
|
||||
import Status from '../components/status';
|
||||
import states from '../utils/states';
|
||||
import states, { saveStatus } from '../utils/states';
|
||||
import useDebouncedCallback from '../utils/useDebouncedCallback';
|
||||
import useScroll from '../utils/useScroll';
|
||||
|
||||
|
@ -38,10 +38,7 @@ function Home({ hidden }) {
|
|||
return { done: true };
|
||||
}
|
||||
const homeValues = allStatuses.value.map((status) => {
|
||||
states.statuses[status.id] = status;
|
||||
if (status.reblog) {
|
||||
states.statuses[status.reblog.id] = status.reblog;
|
||||
}
|
||||
saveStatus(status);
|
||||
return {
|
||||
id: status.id,
|
||||
reblog: status.reblog?.id,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { proxy } from 'valtio';
|
||||
|
||||
export default proxy({
|
||||
const states = proxy({
|
||||
history: [],
|
||||
statuses: {},
|
||||
home: [],
|
||||
|
@ -19,3 +19,14 @@ export default proxy({
|
|||
showAccount: false,
|
||||
composeCharacterCount: 0,
|
||||
});
|
||||
export default states;
|
||||
|
||||
export function saveStatus(status, opts) {
|
||||
const { override } = Object.assign({ override: true }, opts);
|
||||
if (!status) return;
|
||||
if (!override && states.statuses[status.id]) return;
|
||||
states.statuses[status.id] = status;
|
||||
if (status.reblog) {
|
||||
states.statuses[status.reblog.id] = status.reblog;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue