From 9e06c5f9d4fcbd748d1cd8d2617fae274b43dc13 Mon Sep 17 00:00:00 2001 From: boatbomber Date: Wed, 31 May 2023 14:39:07 -0400 Subject: [PATCH 01/14] Add notification when prev place sync is detected --- plugin/src/App/init.lua | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/plugin/src/App/init.lua b/plugin/src/App/init.lua index 35df8ffb7..22a2aac85 100644 --- a/plugin/src/App/init.lua +++ b/plugin/src/App/init.lua @@ -65,6 +65,12 @@ function App:init() notifications = {}, toolbarIcon = Assets.Images.PluginButton, }) + + if priorHost and priorPort then + -- TODO: Build a system for notification actions and external dismissability + -- and then utilize them here + self:addNotification("You've previously synced this place. Would you like to reconnect?", 120) + end end function App:addNotification(text: string, timeout: number?) @@ -457,7 +463,11 @@ function App:render() }), }), - RojoNotifications = e("ScreenGui", {}, { + RojoNotifications = e("ScreenGui", { + ZIndexBehavior = Enum.ZIndexBehavior.Sibling, + ResetOnSpawn = false, + DisplayOrder = 100, + }, { layout = e("UIListLayout", { SortOrder = Enum.SortOrder.LayoutOrder, HorizontalAlignment = Enum.HorizontalAlignment.Right, From b1c9a67e2963fdebb5497334fec75e5049967e8e Mon Sep 17 00:00:00 2001 From: boatbomber Date: Wed, 31 May 2023 15:10:03 -0400 Subject: [PATCH 02/14] Make notifications return a dismiss function --- plugin/src/App/Notifications.lua | 16 +++++++--------- plugin/src/App/init.lua | 24 ++++++++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/plugin/src/App/Notifications.lua b/plugin/src/App/Notifications.lua index 5e1b0882c..70a519c22 100644 --- a/plugin/src/App/Notifications.lua +++ b/plugin/src/App/Notifications.lua @@ -28,10 +28,8 @@ function Notification:init() self.lifetime = self.props.timeout self.motor:onStep(function(value) - if value <= 0 then - if self.props.onClose then - self.props.onClose() - end + if value <= 0 and self.props.onClose then + self.props.onClose() end end) end @@ -91,7 +89,7 @@ function Notification:render() local textBounds = TextService:GetTextSize( self.props.text, 15, - Enum.Font.GothamSemibold, + Enum.Font.GothamMedium, Vector2.new(350, 700) ) @@ -137,7 +135,7 @@ function Notification:render() }), Info = e("TextLabel", { Text = self.props.text, - Font = Enum.Font.GothamSemibold, + Font = Enum.Font.GothamMedium, TextSize = 15, TextColor3 = theme.Notification.InfoColor, TextTransparency = transparency, @@ -180,15 +178,15 @@ local Notifications = Roact.Component:extend("Notifications") function Notifications:render() local notifs = {} - for index, notif in ipairs(self.props.notifications) do - notifs[notif] = e(Notification, { + for id, notif in self.props.notifications do + notifs["NotifID_" .. id] = e(Notification, { soundPlayer = self.props.soundPlayer, text = notif.text, timestamp = notif.timestamp, timeout = notif.timeout, layoutOrder = (notif.timestamp - baseClock), onClose = function() - self.props.onClose(index) + self.props.onClose(id) end, }) end diff --git a/plugin/src/App/init.lua b/plugin/src/App/init.lua index 22a2aac85..d2aef3679 100644 --- a/plugin/src/App/init.lua +++ b/plugin/src/App/init.lua @@ -57,6 +57,7 @@ function App:init() }) self.confirmationBindable = Instance.new("BindableEvent") self.confirmationEvent = self.confirmationBindable.Event + self.notifId = 0 self:setState({ appStatus = AppStatus.NotConnected, @@ -67,9 +68,9 @@ function App:init() }) if priorHost and priorPort then - -- TODO: Build a system for notification actions and external dismissability + -- TODO: Build a system for notification actions -- and then utilize them here - self:addNotification("You've previously synced this place. Would you like to reconnect?", 120) + local dismiss = self:addNotification("You've previously synced this place. Would you like to reconnect?", 120) end end @@ -78,21 +79,28 @@ function App:addNotification(text: string, timeout: number?) return end + self.notifId += 1 + local id = self.notifId + local notifications = table.clone(self.state.notifications) - table.insert(notifications, { + notifications[id] = { text = text, timestamp = DateTime.now().UnixTimestampMillis, timeout = timeout or 3, - }) + } self:setState({ notifications = notifications, }) + + return function() + self:closeNotification(id) + end end -function App:closeNotification(index: number) +function App:closeNotification(id: number) local notifications = table.clone(self.state.notifications) - table.remove(notifications, index) + notifications[id] = nil self:setState({ notifications = notifications, @@ -483,8 +491,8 @@ function App:render() notifs = e(Notifications, { soundPlayer = self.props.soundPlayer, notifications = self.state.notifications, - onClose = function(index) - self:closeNotification(index) + onClose = function(id) + self:closeNotification(id) end, }), }), From f8755eea62478ac4c23602d9c1e8be71480c5906 Mon Sep 17 00:00:00 2001 From: boatbomber Date: Wed, 31 May 2023 15:11:05 -0400 Subject: [PATCH 03/14] Save timestamps even on default address syncs --- plugin/src/App/init.lua | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/plugin/src/App/init.lua b/plugin/src/App/init.lua index d2aef3679..21ea321dc 100644 --- a/plugin/src/App/init.lua +++ b/plugin/src/App/init.lua @@ -67,7 +67,7 @@ function App:init() toolbarIcon = Assets.Images.PluginButton, }) - if priorHost and priorPort then + if self:getLastSyncTimestamp() then -- TODO: Build a system for notification actions -- and then utilize them here local dismiss = self:addNotification("You've previously synced this place. Would you like to reconnect?", 120) @@ -131,21 +131,27 @@ function App:setPriorEndpoint(host: string, port: string) end end - if host == Config.defaultHost and port == Config.defaultPort then - -- Don't save default - priorEndpoints[tostring(game.PlaceId)] = nil - else - priorEndpoints[tostring(game.PlaceId)] = { - host = host ~= Config.defaultHost and host or nil, - port = port ~= Config.defaultPort and port or nil, - timestamp = os.time(), - } - Log.trace("Saved last used endpoint for {}", game.PlaceId) - end + priorEndpoints[tostring(game.PlaceId)] = { + host = if host ~= Config.defaultHost then host else nil, + port = if port ~= Config.defaultPort then port else nil, + timestamp = os.time(), + } + Log.trace("Saved last used endpoint for {}", game.PlaceId) + Settings:set("priorEndpoints", priorEndpoints) end +function App:getLastSyncTimestamp() + local priorEndpoints = Settings:get("priorEndpoints") + if not priorEndpoints then return end + + local place = priorEndpoints[tostring(game.PlaceId)] + if not place then return end + + return place.timestamp +end + function App:getHostAndPort() local host = self.host:getValue() local port = self.port:getValue() From 52e2cdbd9bf7a0d87cba17bfcacbc8c16dcd8277 Mon Sep 17 00:00:00 2001 From: boatbomber Date: Wed, 31 May 2023 15:22:26 -0400 Subject: [PATCH 04/14] Add sync reminder setting --- .../src/App/StatusPages/Settings/Setting.lua | 1 + plugin/src/App/StatusPages/Settings/init.lua | 27 ++++++++++++------- plugin/src/App/init.lua | 2 +- plugin/src/Settings.lua | 1 + 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/plugin/src/App/StatusPages/Settings/Setting.lua b/plugin/src/App/StatusPages/Settings/Setting.lua index 8bf688f6b..04446f232 100644 --- a/plugin/src/App/StatusPages/Settings/Setting.lua +++ b/plugin/src/App/StatusPages/Settings/Setting.lua @@ -59,6 +59,7 @@ function Setting:render() LayoutOrder = self.props.layoutOrder, ZIndex = -self.props.layoutOrder, BackgroundTransparency = 1, + Visible = if self.props.visible == nil then true else self.props.visible, [Roact.Change.AbsoluteSize] = function(object) self.setContainerSize(object.AbsoluteSize) diff --git a/plugin/src/App/StatusPages/Settings/init.lua b/plugin/src/App/StatusPages/Settings/init.lua index 1d484423b..2e8c2ceb9 100644 --- a/plugin/src/App/StatusPages/Settings/init.lua +++ b/plugin/src/App/StatusPages/Settings/init.lua @@ -87,19 +87,20 @@ function SettingsPage:render() layoutOrder = 0, }), - OpenScriptsExternally = e(Setting, { - id = "openScriptsExternally", - name = "Open Scripts Externally", - description = "Attempt to open scripts in an external editor", - transparency = self.props.transparency, - layoutOrder = 1, - }), - ShowNotifications = e(Setting, { id = "showNotifications", name = "Show Notifications", description = "Popup notifications in viewport", transparency = self.props.transparency, + layoutOrder = 1, + }), + + SyncReminder = e(Setting, { + id = "syncReminder", + name = "Sync Reminder", + description = "Notify to sync when opening a place that has previously been synced", + transparency = self.props.transparency, + visible = Settings:getBinding("showNotifications"), layoutOrder = 2, }), @@ -111,12 +112,20 @@ function SettingsPage:render() layoutOrder = 3, }), + OpenScriptsExternally = e(Setting, { + id = "openScriptsExternally", + name = "Open Scripts Externally", + description = "EXPERIMENTAL! Attempt to open scripts in an external editor", + transparency = self.props.transparency, + layoutOrder = 4, + }), + TwoWaySync = e(Setting, { id = "twoWaySync", name = "Two-Way Sync", description = "EXPERIMENTAL! Editing files in Studio will sync them into the filesystem", transparency = self.props.transparency, - layoutOrder = 4, + layoutOrder = 5, }), LogLevel = e(Setting, { diff --git a/plugin/src/App/init.lua b/plugin/src/App/init.lua index 21ea321dc..54eb96d52 100644 --- a/plugin/src/App/init.lua +++ b/plugin/src/App/init.lua @@ -67,7 +67,7 @@ function App:init() toolbarIcon = Assets.Images.PluginButton, }) - if self:getLastSyncTimestamp() then + if Settings:get("syncReminder") and self:getLastSyncTimestamp() then -- TODO: Build a system for notification actions -- and then utilize them here local dismiss = self:addNotification("You've previously synced this place. Would you like to reconnect?", 120) diff --git a/plugin/src/Settings.lua b/plugin/src/Settings.lua index 0f23c86b0..f6368a4d5 100644 --- a/plugin/src/Settings.lua +++ b/plugin/src/Settings.lua @@ -13,6 +13,7 @@ local defaultSettings = { openScriptsExternally = false, twoWaySync = false, showNotifications = true, + syncReminder = true, playSounds = true, typecheckingEnabled = false, logLevel = "Info", From ddca269959cd74ca951be0b0e37b91ae7ac06498 Mon Sep 17 00:00:00 2001 From: boatbomber Date: Wed, 31 May 2023 15:24:32 -0400 Subject: [PATCH 05/14] Update debug settings order to always be after user facing settings --- plugin/src/App/StatusPages/Settings/init.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin/src/App/StatusPages/Settings/init.lua b/plugin/src/App/StatusPages/Settings/init.lua index 2e8c2ceb9..f83e145ca 100644 --- a/plugin/src/App/StatusPages/Settings/init.lua +++ b/plugin/src/App/StatusPages/Settings/init.lua @@ -133,7 +133,7 @@ function SettingsPage:render() name = "Log Level", description = "Plugin output verbosity level", transparency = self.props.transparency, - layoutOrder = 5, + layoutOrder = 100, options = invertedLevels, showReset = Settings:getBinding("logLevel"):map(function(value) @@ -149,7 +149,7 @@ function SettingsPage:render() name = "Typechecking", description = "Toggle typechecking on the API surface", transparency = self.props.transparency, - layoutOrder = 6, + layoutOrder = 101, }), Layout = e("UIListLayout", { From e35830ad12575cd359ba906a218a347703488729 Mon Sep 17 00:00:00 2001 From: boatbomber Date: Wed, 31 May 2023 16:10:30 -0400 Subject: [PATCH 06/14] Add notification actions --- plugin/src/App/Notifications.lua | 85 ++++++++++++++++++++++---------- plugin/src/App/init.lua | 25 ++++++++-- 2 files changed, 81 insertions(+), 29 deletions(-) diff --git a/plugin/src/App/Notifications.lua b/plugin/src/App/Notifications.lua index 70a519c22..5223965be 100644 --- a/plugin/src/App/Notifications.lua +++ b/plugin/src/App/Notifications.lua @@ -7,6 +7,7 @@ local Packages = Rojo.Packages local Roact = require(Packages.Roact) local Flipper = require(Packages.Flipper) +local Log = require(Packages.Log) local bindingUtil = require(script.Parent.bindingUtil) @@ -14,6 +15,7 @@ local Theme = require(Plugin.App.Theme) local Assets = require(Plugin.Assets) local BorderedContainer = require(Plugin.App.Components.BorderedContainer) +local TextButton = require(Plugin.App.Components.TextButton) local baseClock = DateTime.now().UnixTimestampMillis @@ -84,7 +86,9 @@ function Notification:willUnmount() end function Notification:render() - local time = DateTime.fromUnixTimestampMillis(self.props.timestamp) + local transparency = self.binding:map(function(value) + return 1 - value + end) local textBounds = TextService:GetTextSize( self.props.text, @@ -93,14 +97,43 @@ function Notification:render() Vector2.new(350, 700) ) - local transparency = self.binding:map(function(value) - return 1 - value - end) + local actionButtons = {} + local buttonsX = 0 + if self.props.actions then + local count = 0 + for key, action in self.props.actions do + actionButtons[key] = e(TextButton, { + text = action.text, + style = action.style, + onClick = function() + local success, err = pcall(action.onClick, self) + if not success then + Log.warn("Error in notification action: " .. tostring(err)) + end + end, + layoutOrder = -action.layoutOrder, + transparency = transparency, + }) + + buttonsX += TextService:GetTextSize( + action.text, 18, Enum.Font.GothamMedium, + Vector2.new(math.huge, math.huge) + ).X + 30 + + count += 1 + end + + buttonsX += (count - 1) * 5 + end + + local paddingY, logoSize = 20, 32 + local actionsY = if self.props.actions then 35 else 0 + local contentX = math.max(textBounds.X, buttonsX) local size = self.binding:map(function(value) return UDim2.fromOffset( - (35+40+textBounds.X)*value, - math.max(14+20+textBounds.Y, 32+20) + (35 + 40 + contentX) * value, + 5 + actionsY + paddingY + math.max(logoSize, textBounds.Y) ) end) @@ -120,18 +153,18 @@ function Notification:render() transparency = transparency, size = UDim2.new(1, 0, 1, 0), }, { - TextContainer = e("Frame", { - Size = UDim2.new(0, 35+textBounds.X, 1, -20), - Position = UDim2.new(0, 0, 0, 10), + Contents = e("Frame", { + Size = UDim2.new(0, 35 + contentX, 1, -paddingY), + Position = UDim2.new(0, 0, 0, paddingY/2), BackgroundTransparency = 1 }, { Logo = e("ImageLabel", { ImageTransparency = transparency, Image = Assets.Images.PluginButton, BackgroundTransparency = 1, - Size = UDim2.new(0, 32, 0, 32), - Position = UDim2.new(0, 0, 0.5, 0), - AnchorPoint = Vector2.new(0, 0.5), + Size = UDim2.new(0, logoSize, 0, logoSize), + Position = UDim2.new(0, 0, 0, 0), + AnchorPoint = Vector2.new(0, 0), }), Info = e("TextLabel", { Text = self.props.text, @@ -148,20 +181,21 @@ function Notification:render() LayoutOrder = 1, BackgroundTransparency = 1, }), - Time = e("TextLabel", { - Text = time:FormatLocalTime("LTS", "en-us"), - Font = Enum.Font.Code, - TextSize = 12, - TextColor3 = theme.Notification.InfoColor, - TextTransparency = transparency, - TextXAlignment = Enum.TextXAlignment.Left, - - Size = UDim2.new(1, -35, 0, 14), - Position = UDim2.new(0, 35, 1, -14), - - LayoutOrder = 1, + Actions = if self.props.actions then e("Frame", { + Size = UDim2.new(1, -40, 0, 35), + Position = UDim2.new(1, 0, 1, 0), + AnchorPoint = Vector2.new(1, 1), BackgroundTransparency = 1, - }), + }, { + Layout = e("UIListLayout", { + FillDirection = Enum.FillDirection.Horizontal, + HorizontalAlignment = Enum.HorizontalAlignment.Right, + VerticalAlignment = Enum.VerticalAlignment.Center, + SortOrder = Enum.SortOrder.LayoutOrder, + Padding = UDim.new(0, 5), + }), + Buttons = Roact.createFragment(actionButtons), + }) else nil, }), Padding = e("UIPadding", { @@ -184,6 +218,7 @@ function Notifications:render() text = notif.text, timestamp = notif.timestamp, timeout = notif.timeout, + actions = notif.actions, layoutOrder = (notif.timestamp - baseClock), onClose = function() self.props.onClose(id) diff --git a/plugin/src/App/init.lua b/plugin/src/App/init.lua index 54eb96d52..c689dfd14 100644 --- a/plugin/src/App/init.lua +++ b/plugin/src/App/init.lua @@ -68,13 +68,29 @@ function App:init() }) if Settings:get("syncReminder") and self:getLastSyncTimestamp() then - -- TODO: Build a system for notification actions - -- and then utilize them here - local dismiss = self:addNotification("You've previously synced this place. Would you like to reconnect?", 120) + self:addNotification("You've previously synced this place. Would you like to reconnect?", 300, { + Connect = { + text = "Connect", + style = "Solid", + layoutOrder = 1, + onClick = function(notification) + notification:dismiss() + self:startSession() + end + }, + Dismiss = { + text = "Dismiss", + style = "Bordered", + layoutOrder = 2, + onClick = function(notification) + notification:dismiss() + end, + }, + }) end end -function App:addNotification(text: string, timeout: number?) +function App:addNotification(text: string, timeout: number?, actions: { [string]: {text: string, style: string, layoutOrder: number, onClick: (any) -> ()} }?) if not Settings:get("showNotifications") then return end @@ -87,6 +103,7 @@ function App:addNotification(text: string, timeout: number?) text = text, timestamp = DateTime.now().UnixTimestampMillis, timeout = timeout or 3, + actions = actions, } self:setState({ From 3dfd3f5a3f8dd074a8e6ed32cd59399aac759a2f Mon Sep 17 00:00:00 2001 From: boatbomber Date: Wed, 31 May 2023 16:26:37 -0400 Subject: [PATCH 07/14] Don't prompt during play sessions --- plugin/src/App/init.lua | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/plugin/src/App/init.lua b/plugin/src/App/init.lua index c689dfd14..468518469 100644 --- a/plugin/src/App/init.lua +++ b/plugin/src/App/init.lua @@ -1,5 +1,6 @@ local Players = game:GetService("Players") local ServerStorage = game:GetService("ServerStorage") +local RunService = game:GetService("RunService") local Rojo = script:FindFirstAncestor("Rojo") local Plugin = Rojo.Plugin @@ -67,7 +68,11 @@ function App:init() toolbarIcon = Assets.Images.PluginButton, }) - if Settings:get("syncReminder") and self:getLastSyncTimestamp() then + if + RunService:IsEdit() + and Settings:get("syncReminder") + and self:getLastSyncTimestamp() + then self:addNotification("You've previously synced this place. Would you like to reconnect?", 300, { Connect = { text = "Connect", From 9b82d0d3e943507bca963bfc587a4eff7ae0439d Mon Sep 17 00:00:00 2001 From: boatbomber Date: Wed, 31 May 2023 17:04:28 -0400 Subject: [PATCH 08/14] Don't prompt if already connected --- plugin/src/App/init.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/plugin/src/App/init.lua b/plugin/src/App/init.lua index 468518469..8b3349c34 100644 --- a/plugin/src/App/init.lua +++ b/plugin/src/App/init.lua @@ -70,6 +70,7 @@ function App:init() if RunService:IsEdit() + and self.serveSession == nil and Settings:get("syncReminder") and self:getLastSyncTimestamp() then From 5c0a63bf1daa0956061ab2117f620e3373fcb8a9 Mon Sep 17 00:00:00 2001 From: boatbomber Date: Sun, 4 Jun 2023 10:31:49 -0700 Subject: [PATCH 09/14] Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b0a7b948a..a34ac1737 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,10 @@ ## Unreleased Changes * Significantly improved performance of `rojo sourcemap`. ([#668]) +* Added sync reminder notification. ([#689]) [#668]: https://github.com/rojo-rbx/rojo/pull/668 +[#689]: https://github.com/rojo-rbx/rojo/pull/689 ## [7.3.0] - April 22, 2023 * Added `$attributes` to project format. ([#574]) From 1450661ae1627be4e9b950c6330e6e1d4a9e4045 Mon Sep 17 00:00:00 2001 From: boatbomber Date: Mon, 5 Jun 2023 18:28:33 -0700 Subject: [PATCH 10/14] Dont remind in template or local files --- plugin/src/App/init.lua | 34 ++++++++++++++++++++++------------ plugin/src/ignorePlaceIds.lua | 21 +++++++++++++++++++++ 2 files changed, 43 insertions(+), 12 deletions(-) create mode 100644 plugin/src/ignorePlaceIds.lua diff --git a/plugin/src/App/init.lua b/plugin/src/App/init.lua index 8b3349c34..14c475d25 100644 --- a/plugin/src/App/init.lua +++ b/plugin/src/App/init.lua @@ -20,6 +20,7 @@ local ApiContext = require(Plugin.ApiContext) local PatchSet = require(Plugin.PatchSet) local preloadAssets = require(Plugin.preloadAssets) local soundPlayer = require(Plugin.soundPlayer) +local ignorePlaceIds = require(Plugin.ignorePlaceIds) local Theme = require(script.Theme) local Page = require(script.Page) @@ -134,12 +135,28 @@ function App:getPriorEndpoint() local priorEndpoints = Settings:get("priorEndpoints") if not priorEndpoints then return end - local place = priorEndpoints[tostring(game.PlaceId)] + local id = tostring(game.PlaceId) + if ignorePlaceIds[id] then return end + + local place = priorEndpoints[id] if not place then return end return place.host, place.port end +function App:getLastSyncTimestamp() + local priorEndpoints = Settings:get("priorEndpoints") + if not priorEndpoints then return end + + local id = tostring(game.PlaceId) + if ignorePlaceIds[id] then return end + + local place = priorEndpoints[id] + if not place then return end + + return place.timestamp +end + function App:setPriorEndpoint(host: string, port: string) local priorEndpoints = Settings:get("priorEndpoints") if not priorEndpoints then @@ -154,7 +171,10 @@ function App:setPriorEndpoint(host: string, port: string) end end - priorEndpoints[tostring(game.PlaceId)] = { + local id = tostring(game.PlaceId) + if ignorePlaceIds[id] then return end + + priorEndpoints[id] = { host = if host ~= Config.defaultHost then host else nil, port = if port ~= Config.defaultPort then port else nil, timestamp = os.time(), @@ -165,16 +185,6 @@ function App:setPriorEndpoint(host: string, port: string) Settings:set("priorEndpoints", priorEndpoints) end -function App:getLastSyncTimestamp() - local priorEndpoints = Settings:get("priorEndpoints") - if not priorEndpoints then return end - - local place = priorEndpoints[tostring(game.PlaceId)] - if not place then return end - - return place.timestamp -end - function App:getHostAndPort() local host = self.host:getValue() local port = self.port:getValue() diff --git a/plugin/src/ignorePlaceIds.lua b/plugin/src/ignorePlaceIds.lua new file mode 100644 index 000000000..19c449e8d --- /dev/null +++ b/plugin/src/ignorePlaceIds.lua @@ -0,0 +1,21 @@ +return { + ["0"] = true, -- Local file + ["95206881"] = true, -- Baseplate + ["6560363541"] = true, -- Classic Baseplate + ["95206192"] = true, -- Flat Terrain + ["13165709401"] = true, -- Modern City + ["520390648"] = true, -- Village + ["203810088"] = true, -- Castle + ["366130569"] = true, -- Suburban + ["215383192"] = true, -- Racing + ["264719325"] = true, -- Pirate Island + ["203812057"] = true, -- Obby + ["379736082"] = true, -- Starting Place + ["301530843"] = true, -- Line Runner + ["92721754"] = true, -- Capture The Flag + ["301529772"] = true, -- Team/FFA Arena + ["203885589"] = true, -- Combat + ["10275826693"] = true, -- Concert + ["5353920686"] = true, -- Move It Simulator + ["6936227200"] = true, -- Mansion Of Wonder +} \ No newline at end of file From 21019ab76db12d79f2d0125e0f6d1b6a8b8dd598 Mon Sep 17 00:00:00 2001 From: boatbomber Date: Mon, 5 Jun 2023 18:31:40 -0700 Subject: [PATCH 11/14] Fix eof whitespace --- plugin/src/ignorePlaceIds.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/src/ignorePlaceIds.lua b/plugin/src/ignorePlaceIds.lua index 19c449e8d..5d6431dd2 100644 --- a/plugin/src/ignorePlaceIds.lua +++ b/plugin/src/ignorePlaceIds.lua @@ -18,4 +18,4 @@ return { ["10275826693"] = true, -- Concert ["5353920686"] = true, -- Move It Simulator ["6936227200"] = true, -- Mansion Of Wonder -} \ No newline at end of file +} From 91c833e2906268b486a2aa56bc5820e1e8eb11fb Mon Sep 17 00:00:00 2001 From: boatbomber Date: Mon, 5 Jun 2023 18:44:57 -0700 Subject: [PATCH 12/14] Add header comment to ignore list --- plugin/src/ignorePlaceIds.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugin/src/ignorePlaceIds.lua b/plugin/src/ignorePlaceIds.lua index 5d6431dd2..40ad8f58a 100644 --- a/plugin/src/ignorePlaceIds.lua +++ b/plugin/src/ignorePlaceIds.lua @@ -1,3 +1,9 @@ +--[[ + These are place ids that will not have metadata saved for them, + such as last sync address or time. This is because they are not unique + so storing metadata for them does not make sense as these ids are reused. +--]] + return { ["0"] = true, -- Local file ["95206881"] = true, -- Baseplate From 21fac6ab5080093a61ed1d349161dda1c07d5119 Mon Sep 17 00:00:00 2001 From: boatbomber Date: Sun, 2 Jul 2023 21:56:41 -0700 Subject: [PATCH 13/14] Update plugin/src/App/StatusPages/Settings/Setting.lua Co-authored-by: Chris Chang <51393127+chriscerie@users.noreply.github.com> --- plugin/src/App/StatusPages/Settings/Setting.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/src/App/StatusPages/Settings/Setting.lua b/plugin/src/App/StatusPages/Settings/Setting.lua index 04446f232..0c0de9f42 100644 --- a/plugin/src/App/StatusPages/Settings/Setting.lua +++ b/plugin/src/App/StatusPages/Settings/Setting.lua @@ -59,7 +59,7 @@ function Setting:render() LayoutOrder = self.props.layoutOrder, ZIndex = -self.props.layoutOrder, BackgroundTransparency = 1, - Visible = if self.props.visible == nil then true else self.props.visible, + Visible = self.props.visible, [Roact.Change.AbsoluteSize] = function(object) self.setContainerSize(object.AbsoluteSize) From 7f8c86faa41ccaeb52b55ceefb0393bcb5e97dd8 Mon Sep 17 00:00:00 2001 From: boatbomber Date: Tue, 4 Jul 2023 13:03:14 -0700 Subject: [PATCH 14/14] Padding around div operator Co-authored-by: Micah --- plugin/src/App/Notifications.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/src/App/Notifications.lua b/plugin/src/App/Notifications.lua index 5223965be..120a5aa5d 100644 --- a/plugin/src/App/Notifications.lua +++ b/plugin/src/App/Notifications.lua @@ -155,7 +155,7 @@ function Notification:render() }, { Contents = e("Frame", { Size = UDim2.new(0, 35 + contentX, 1, -paddingY), - Position = UDim2.new(0, 0, 0, paddingY/2), + Position = UDim2.new(0, 0, 0, paddingY / 2), BackgroundTransparency = 1 }, { Logo = e("ImageLabel", {