Commit Graph

  • b51335768f
    Mostly fixed multi opening period widgets! - The opening status label on widgets should update properly on time now. - Improved some of the logic related to determining opening statuses. Guards exist! - Reduced the text sizes so that more of the location names fits in the widgets. Also ensures that the full opening times will be displayed (this always worked for 24-hour time but wasn't guaranteed to fit for 12-hour time). main NinjaCheetah 2026-01-14 21:43:33 -05:00
  • 71c37749e3
    Fixed multi opening period locations in widgets Widgets for locations with multiple opening periods will still only display the first time span, but the bar will now show multiple filled in sections and the opening status label will correctly represent both periods. NinjaCheetah 2026-01-14 00:16:40 -05:00
  • f78de2f6ff
    Fixed manually widget timeline refresh Also fixes widgets displaying locations open until midnight NinjaCheetah 2026-01-13 18:13:27 -05:00
  • 26e419a41b
    Added caching, background refresh, and first widget - The main dining location information is now cached on download. - The freshness of the cache is checked whenever it's loaded, and if the last refreshed date is not today's date then it's dropped and the app refreshes from the API normally. - This reduces load times if you open the app multiple times a day. The data won't change during the day, so you can load it the first time and then use the cache the rest of the time. - Refreshing via pull to refresh or the refresh button still refreshes the cache from the server. - Added a background refresh task. - TigerDine now registered a background fetch task with the device that will update the location information up to a maximum of 4 times per day. The cache is checked first, so a new request will only be made if the cache is stale. - This allows for automatic notification scheduling at times other than when the app is launched. As long as background tasks can run, notifications will be automatically scheduled when necessary. - Depending on the timing, this may allow you to never see any load times in TigerDine, since the cache might already be up to date before you use the app for the first time in a day. - Started adding widgets! - TigerDine now offers an hours widget that lets you put the hours for a specified location on your home screen, along with a visual indicator of when that location is open today. - The widget automatically feeds off of TigerDine's cache, so hey, no extra network requests required! - This widget currently DOES NOT support multi-opening locations like Brick City Cafe or Gracie's. This is still a work in progress. NinjaCheetah 2026-01-09 19:19:04 -05:00
  • d3d060b5e2
    Started work on refactors - The favorites model now lives inside of the base dining model, since it was only ever used in places where the main dining model was also available and is only relevant when the dining model is available. - Removed unnecessary instances of models that were going unused. - Moved the favorite/map/menu buttons in the top right of the DetailView into the right side toolbar. - This frees up a good bit of space at the top of the DetailView and looks cleaner, especially with iOS 26's new toolbar style. - Actually added a copyright string to the about screen. More refactors, both internally and for the UI, will be coming soon. NinjaCheetah 2026-01-07 19:29:30 -05:00
  • 6794c66c37
    Re-add the xcodeproj because what NinjaCheetah 2025-12-24 16:44:01 -05:00
  • 23ebc9d848
    Replace all instances of "RIT Dining" with "TigerDine" The project and some files were still named that way, so that's been fixed now. The bundle ID is stuck that way forever but oh well. Nobody will see that. NinjaCheetah 2025-12-24 16:41:18 -05:00
  • 6fd11575af
    Add sounds for visiting chef notifications Oops, I missed that this had to be manually set up. Now requests the .sound permission and sets the default sound for notifications when scheduling them. NinjaCheetah 2025-12-08 14:33:38 -05:00
  • 20f1b3df59
    Quck fixes - Maps button now works properly, I figured out the URL scheme needed to direct to a map location - Notifications will now be automatically rescheduled when changing the notification offset NinjaCheetah 2025-12-08 12:31:29 -05:00
  • 207fa788e1
    Added notifications for visiting chefs You can now get notified when visiting chefs are on campus! A menu is available from the toolbar on the main screen that allows you to enable notifications and configure what visiting chefs you want to be notified for. You can also toggle if you want to be notified 1, 2, or 3 hours before the chef arrives on campus. Other changes in this commit: - Updated maps URL to be compatible with the new RIT map (however they don't open correctly- this is outside of my control) - Removed button linking to OnDemand at the request of RIT ITS NinjaCheetah 2025-12-08 01:45:30 -05:00
  • d7096980d7
    Update README.md NinjaCheetah 2025-11-13 22:41:21 -05:00
  • 6613630aa2
    Add privacy policy for App Store release NinjaCheetah 2025-11-13 00:17:54 -05:00
  • 662fece439
    Fixed dietary restrictions not immediately applying to menu The vegetarian/vegan/no beef/no pork toggles will now immediately update the menu listing as intended. NinjaCheetah 2025-11-12 23:26:15 -05:00
  • 5895313488
    Properly include icon composer made icon NinjaCheetah 2025-11-12 22:53:00 -05:00
  • e5d87ca488
    Changed icon to new RIT-trademark-free one Replaced the icon with a more generic tiger pawprint so that I'm not using an RIT trademark, so that I'm prepared for the first App Store release. Also added information about where menu information is being sourced from on the about screen, and fixed a bug where vegetarian/vegan/no beef/no pork toggles would not be written to UserDefaults. NinjaCheetah 2025-11-12 21:56:50 -05:00
  • 32203033b6
    Added filtering options to dining menu view There is now a filter button by the search bar in the menu view for locations! This opens a menu that allows you to filter by diets and to filter out any allergens that you need to avoid. These options are all written to UserDefaults, allowing you to set your options once and have them persist across menus and sessions. Also started on some refactors, these will be furthered in a later commit. NinjaCheetah 2025-11-12 00:18:09 -05:00
  • 85aa9e636d
    Improvements to FD MealPlanner integration - Detailed nutrition facts are now shown on the menu item view - Fixed The College Grind not having a "View Menu" button (IDs were mapped incorrectly) - Menu items are now sorted alphabetically - "Allergens" section now hidden on the menu item view if the item contains no allergens - Duplicate items will no longer be added to the menu item list, so no more issues with items randomly appearing and disappearing (thanks FD MealPlanner for having duplicates in the first place) NinjaCheetah 2025-11-10 01:58:23 -05:00
  • c7639de06b
    Added dining location menus from FD MealPlanner API Dining locations that also exist on FD MealPlanner now have a "View Menu" button under the favorite/OnDemand/map buttons that take you to a new view that pulls the location's menu from FD MealPlanner. You can view all of the menu items that have actually been added to that site, and tap them for more details (which will be expanded on later). Searching the item list is supported, with more filtering options coming in the next update. Meal periods can be browsed using the clock button in the top right for locations that are open more than once per day. Other changes: - App renamed from "RIT Dining" to "TigerDine" to not get me in trouble for an App Store release - Slightly changed the way that dining locations' short descriptions and current open times are displayed in the detail view - Fixed the box truck icon used in the food truck view being squished NinjaCheetah 2025-11-08 22:33:20 -05:00
  • 2c512180d9
    Added OnDemand link and improved about screen - All open dining locations now have a small shopping cart button in the top right that opens up OnDemand - The about screen is organized much better and has a clear disclaimer about this not being an RIT-affiliated project NinjaCheetah 2025-11-02 17:00:39 -05:00
  • dec8788276
    Added weekend food truck information You can now see the list of food trucks that are coming to RIT on the weekends and their hours. This data is scraped directly from the RIT Events website which means that accessing it isn't the best, but it works. The code behind it is really bad right now, but it works as expected currently and will be improved soon™️ NinjaCheetah 2025-10-06 00:37:59 -04:00
  • dba5511ed5
    Rewrote huge chunks of backend code to use a model A model is now used to store all of the dining location information. This means that the data is now shared between all views, making it much easier to refresh and removing lots of excess API calls. dining-all is now called for the current day and the following 6 days on app launch and on refresh, but beyond that no additional API calls need to be made (excluding occupancy info). This means no more loading screens between views! The window for hours in DetailView has been shifted to now show the current day and the next 6 days rather than the hours for each day in the current calendar week. This makes a lot more sense, because who cares what last Tuesday's hours were on Saturday, you'd rather know what's coming up in the next week. The visiting chef screen now supports scrolling through 7 days of visiting chefs instead of just today and tomorrow. Some basic frameworks laid for the visiting chef notification feature, however it does not work yet and is not exposed in the app. Also fixed sorting and searching bugs introduced by changes in the previous commit. NinjaCheetah 2025-10-02 01:01:18 -04:00
  • f01c041885
    Rewrote lots of bad "async" code Code that should've been fully async that was not previously actually async, such as the networking code, is now actually async. This makes it much easier to read and means that it makes a lot more sense in the context of the program. This also means that all uses of DispatchQueue.main.sync{} and DispatchQueue.main.async{} are now gone. DetailView's fetching code benefitted the most from these changes, and is now just one iterative function instead of two cursed functions involving callbacks. As a result, you can now also pull down on the detail view to refresh the data, which is handy. Note that occupancy isn't updated when doing this currently due to a task issue I haven't figured out yet, but you can just go back out and in to update that anyway. ContentView will also now automatically refresh the data if the last refreshed date is no longer today, so if you let the app sit in the background and then focus it, dates should automatically update to being for today. NinjaCheetah 2025-10-01 00:13:55 -04:00
  • 059209c9e5
    Fixed bug reading weekly schedules The app was previously not checking if the current day of the week was within the list of weekdays that the regular opening schedule was valid for. This lead to the app frequently claiming a location was open on the weekend when it wasn't, which burned me personally several times. I've gone to like 4 locations this weekend under the assumption they were open because my own app said so, and finally I was like "hey maybe this isn't the data being bad and I've messed something up" and lo and behold, I did. Oops. Also removes the middleman API call to get the MDO ID from the main location ID, as I realized the location info from TigerCenter actually includes the MDO ID already. This simplifies the code for getting the occupancy of a location by a good bit and just makes me happy. NinjaCheetah 2025-09-28 11:20:46 -04:00
  • f8e4c37cd4
    Major sorting/filtering improvements This update mostly includes improvements related to sorting and filtering the main dining location list, including: - Favorites! You can mark locations as your favorites by swiping them on the list or pressing the star button on their detail page. Favorites are sorted to the top. - "Hide Closed Locations" has been moved to a dedicated sort/filter button in the bottom left corner. This looks best on iOS 26+, where it sits nicely to the left of the search bar. - Added an "Open Locations First" option to sort open locations above closed locations, if you want to know what's open quicker without entirely hiding closed locations. Other improvements: - Made most asynchronous code properly async instead of bouncing between DispatchQueue.main.async{} and .sync{}. - Added a timer to refresh open statuses every 3 seconds while on the main list, so that when the time changes the open statuses will change appropriately. It seemed silly to force you to fetch the data again just to do a quick "hey is current time in range?". - Made date formatter shared so there aren't 3 separate copies of it. NinjaCheetah 2025-09-25 12:52:50 -04:00
  • c505de4b5a
    Added occupancy info to DetailView The details page for a location now shows an indicator of how busy a location is based on data from the RIT maps API, which kindly offers the current and maximum occupancies for locations around campus. This is displayed the same way that the RIT website displays it, with 0-5 person icons that are filled in based on the percentage occupied the location is. This API can be *really* slow sometimes, so this data is fetched indepdently of the main load, because it could end up massively slowing down the app to not display the main info until after the occupancy data loads. A small spinner is used to indicate that occupancy data is loading, and the indicators are partially transparent until the data is loaded. Also fixed a bug where locations with multiple opening periods could have exceptions for the same time period, resulting in duplicated time slots. Thanks Brick City Cafe! This is fixed by making sure that times are not already present in the openTimes/closeTimes arrays before adding them. NinjaCheetah 2025-09-20 17:41:08 -04:00
  • b8a9c5cdd6
    Fixed PayPal link, made open locations only persistent NinjaCheetah 2025-09-17 22:56:29 -04:00
  • 2c607553ac
    Added donation view It seems reasonable to ask for some money here or there, since my Apple Developer Program membership was quite expensive just for this app NinjaCheetah 2025-09-17 22:38:09 -04:00
  • 9d16be646a
    Various minor fixes and improvements - Visiting chef screen now shows "No visiting chefs today" instead of nothing when there are, get this, no visiting chefs today - 24-hour locations (Bytes) will no longer show as "Closing Soon" for the last 30 minutes of the day only to reset back to "Open" at midnight - The app will now display a network error instead of loading indefinitely if an error occurs while fetching dining data - Other minor spacing and layout changes NinjaCheetah 2025-09-14 23:36:11 -04:00
  • 24b71b7b3f
    Improved visiting chef and daily specials information Reworked the detail view for locations to use the screen space more effectively and show the day's visiting chefs and daily specials, as well as the hours for the entire week. The visiting chef screen has also been massively reworked to show all visiting chefs under what location they're in, with their times for the day and an indicator marking their status (one of: "Here Now", "Arriving Later", "Ariving Soon", "Leaving Soon", and "Left For Today"). These markers are also used in location's detail view. There's also an arrow in the top right that switches the visiting chef screen from today's visiting chefs to tomorrow's, so you can scout out what you might want to get tomorrow. Locations are also now sorted alphabetically on the main menu, to make finding the location you're looking for easier. NinjaCheetah 2025-09-11 16:27:42 -04:00
  • ea2538ce18
    Improved DetailView, preliminary visiting chef support The DetailView now presents information in a more appealing way, and also fetches the opening hours for the entire week, so you can see more than just the current day's hours for a location. Also added preliminary support for parsing visiting chef information. Times are not being parsed yet because the formatting for them is super bad and inconsistent, but the names and descriptions are parsed. A "Today's Visiting Chefs" button has been added to the top of ContentView that brings you to a basic screen listing all of the locations with visiting chefs and telling you what they are. Currently times are presented as part of the name of the location like they are in the TigerCenter response data. NinjaCheetah 2025-09-08 01:26:31 -04:00
  • 30c025e113
    Lots of code cleanup Separated types out into their own file to make them easier to keep track of, and described what they're all for better. Also removed unnecessary "Location" type used in ContentView to display data, because it was almost an exact duplicate of the type that it was being created from. Removing that removed a lot of pointless extra logic, and should make the processs of how it pulls and parses the data easier to understand. Multiple open periods for one location are also now sorted, so that the earliest open time will be shown first. Some locations have them flipped in the response data, so they were backwards before. NinjaCheetah 2025-09-02 15:03:43 -04:00
  • 9f1d5c2078
    Added filtering options and basic detail view NinjaCheetah 2025-09-01 15:46:03 -04:00
  • 3f812495b0
    Added support for Gracie's multiple open times NinjaCheetah 2025-09-01 11:21:38 -04:00
  • f12f12bac8
    Add license and gitignore NinjaCheetah 2025-09-01 10:38:04 -04:00
  • c2fe65cb59
    Initial commit NinjaCheetah 2025-09-01 10:36:24 -04:00
  • 7534ad69fe
    Initial Commit NinjaCheetah 2025-08-31 10:38:38 -04:00