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 Status from './pages/status';
|
||||||
import Welcome from './pages/welcome';
|
import Welcome from './pages/welcome';
|
||||||
import { getAccessToken } from './utils/auth';
|
import { getAccessToken } from './utils/auth';
|
||||||
import states from './utils/states';
|
import states, { saveStatus } from './utils/states';
|
||||||
import store from './utils/store';
|
import store from './utils/store';
|
||||||
|
|
||||||
const { VITE_CLIENT_NAME: CLIENT_NAME } = import.meta.env;
|
const { VITE_CLIENT_NAME: CLIENT_NAME } = import.meta.env;
|
||||||
|
@ -300,18 +300,12 @@ async function startStream() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
states.statuses[status.id] = status;
|
saveStatus(status);
|
||||||
if (status.reblog) {
|
|
||||||
states.statuses[status.reblog.id] = status.reblog;
|
|
||||||
}
|
|
||||||
}, 5000);
|
}, 5000);
|
||||||
stream.on('update', handleNewStatus);
|
stream.on('update', handleNewStatus);
|
||||||
stream.on('status.update', (status) => {
|
stream.on('status.update', (status) => {
|
||||||
console.log('STATUS.UPDATE', status);
|
console.log('STATUS.UPDATE', status);
|
||||||
states.statuses[status.id] = status;
|
saveStatus(status);
|
||||||
if (status.reblog) {
|
|
||||||
states.statuses[status.reblog.id] = status.reblog;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
stream.on('delete', (statusID) => {
|
stream.on('delete', (statusID) => {
|
||||||
console.log('DELETE', statusID);
|
console.log('DELETE', statusID);
|
||||||
|
@ -332,16 +326,7 @@ async function startStream() {
|
||||||
states.notificationsNew.unshift(notification);
|
states.notificationsNew.unshift(notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (notification.status && !states.statuses[notification.status.id]) {
|
saveStatus(notification.status, { override: false });
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
stream.ws.onclose = () => {
|
stream.ws.onclose = () => {
|
||||||
|
@ -393,10 +378,7 @@ function startVisibility() {
|
||||||
newStatuses[0].id !== states.home[0].id
|
newStatuses[0].id !== states.home[0].id
|
||||||
) {
|
) {
|
||||||
states.homeNew = newStatuses.map((status) => {
|
states.homeNew = newStatuses.map((status) => {
|
||||||
states.statuses[status.id] = status;
|
saveStatus(status);
|
||||||
if (status.reblog) {
|
|
||||||
states.statuses[status.reblog.id] = status.reblog;
|
|
||||||
}
|
|
||||||
return {
|
return {
|
||||||
id: status.id,
|
id: status.id,
|
||||||
reblog: status.reblog?.id,
|
reblog: status.reblog?.id,
|
||||||
|
@ -418,19 +400,7 @@ function startVisibility() {
|
||||||
states.notificationsNew.unshift(notification);
|
states.notificationsNew.unshift(notification);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
saveStatus(notification.status, { override: false });
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Silently fail
|
// Silently fail
|
||||||
|
|
|
@ -22,7 +22,7 @@ import NameText from '../components/name-text';
|
||||||
import enhanceContent from '../utils/enhance-content';
|
import enhanceContent from '../utils/enhance-content';
|
||||||
import htmlContentLength from '../utils/html-content-length';
|
import htmlContentLength from '../utils/html-content-length';
|
||||||
import shortenNumber from '../utils/shorten-number';
|
import shortenNumber from '../utils/shorten-number';
|
||||||
import states from '../utils/states';
|
import states, { saveStatus } from '../utils/states';
|
||||||
import store from '../utils/store';
|
import store from '../utils/store';
|
||||||
import useDebouncedCallback from '../utils/useDebouncedCallback';
|
import useDebouncedCallback from '../utils/useDebouncedCallback';
|
||||||
import visibilityIconsMap from '../utils/visibility-icons-map';
|
import visibilityIconsMap from '../utils/visibility-icons-map';
|
||||||
|
@ -531,12 +531,10 @@ function Status({
|
||||||
const newStatus = await masto.v1.statuses.unreblog(
|
const newStatus = await masto.v1.statuses.unreblog(
|
||||||
id,
|
id,
|
||||||
);
|
);
|
||||||
states.statuses[newStatus.id] = newStatus;
|
saveStatus(newStatus);
|
||||||
} else {
|
} else {
|
||||||
const newStatus = await masto.v1.statuses.reblog(id);
|
const newStatus = await masto.v1.statuses.reblog(id);
|
||||||
states.statuses[newStatus.id] = newStatus;
|
saveStatus(newStatus);
|
||||||
states.statuses[newStatus.reblog.id] =
|
|
||||||
newStatus.reblog;
|
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
@ -568,10 +566,10 @@ function Status({
|
||||||
const newStatus = await masto.v1.statuses.unfavourite(
|
const newStatus = await masto.v1.statuses.unfavourite(
|
||||||
id,
|
id,
|
||||||
);
|
);
|
||||||
states.statuses[newStatus.id] = newStatus;
|
saveStatus(newStatus);
|
||||||
} else {
|
} else {
|
||||||
const newStatus = await masto.v1.statuses.favourite(id);
|
const newStatus = await masto.v1.statuses.favourite(id);
|
||||||
states.statuses[newStatus.id] = newStatus;
|
saveStatus(newStatus);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
@ -599,10 +597,10 @@ function Status({
|
||||||
const newStatus = await masto.v1.statuses.unbookmark(
|
const newStatus = await masto.v1.statuses.unbookmark(
|
||||||
id,
|
id,
|
||||||
);
|
);
|
||||||
states.statuses[newStatus.id] = newStatus;
|
saveStatus(newStatus);
|
||||||
} else {
|
} else {
|
||||||
const newStatus = await masto.v1.statuses.bookmark(id);
|
const newStatus = await masto.v1.statuses.bookmark(id);
|
||||||
states.statuses[newStatus.id] = newStatus;
|
saveStatus(newStatus);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
|
|
@ -7,7 +7,7 @@ import { useSnapshot } from 'valtio';
|
||||||
import Icon from '../components/icon';
|
import Icon from '../components/icon';
|
||||||
import Loader from '../components/loader';
|
import Loader from '../components/loader';
|
||||||
import Status from '../components/status';
|
import Status from '../components/status';
|
||||||
import states from '../utils/states';
|
import states, { saveStatus } from '../utils/states';
|
||||||
import useDebouncedCallback from '../utils/useDebouncedCallback';
|
import useDebouncedCallback from '../utils/useDebouncedCallback';
|
||||||
import useScroll from '../utils/useScroll';
|
import useScroll from '../utils/useScroll';
|
||||||
|
|
||||||
|
@ -38,10 +38,7 @@ function Home({ hidden }) {
|
||||||
return { done: true };
|
return { done: true };
|
||||||
}
|
}
|
||||||
const homeValues = allStatuses.value.map((status) => {
|
const homeValues = allStatuses.value.map((status) => {
|
||||||
states.statuses[status.id] = status;
|
saveStatus(status);
|
||||||
if (status.reblog) {
|
|
||||||
states.statuses[status.reblog.id] = status.reblog;
|
|
||||||
}
|
|
||||||
return {
|
return {
|
||||||
id: status.id,
|
id: status.id,
|
||||||
reblog: status.reblog?.id,
|
reblog: status.reblog?.id,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { proxy } from 'valtio';
|
import { proxy } from 'valtio';
|
||||||
|
|
||||||
export default proxy({
|
const states = proxy({
|
||||||
history: [],
|
history: [],
|
||||||
statuses: {},
|
statuses: {},
|
||||||
home: [],
|
home: [],
|
||||||
|
@ -19,3 +19,14 @@ export default proxy({
|
||||||
showAccount: false,
|
showAccount: false,
|
||||||
composeCharacterCount: 0,
|
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