Guest User

Debug script

a guest
Oct 2nd, 2020
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //This Scriptable Widget is coded by Slowlydev (aka r/Sl0wly-edits, r/Slowlydev)
  2.  
  3. const DEV_MODE = true //for developer only
  4. const DEV_PREVIEW = "medium" //for developer only (this script is specialy made for a medium sized widget)
  5.  
  6. const API_KEY = "" //OpenWeather API Key
  7. const FORECAST_HOURS = "6" //recommended
  8. const UNITS = "metric" //metric for celsius and imperial for Fahrenheit
  9.  
  10. const CALENDAR_URL = "calshow://" //Apple Calendar App, if your favorite app does have a URL scheme feel free to change it
  11. const WEATHER_URL = "" //there is no URL for the Apple Weather App, if your favorite app does feel free to add it
  12.  
  13. const widgetBackground = new Color("#D6D6D6") //Widget Background
  14. const stackBackground = new Color("#FFFFFF") //Smaller Container Background
  15. const calendarColor = new Color("#EA3323") //Calendar Color
  16.  
  17. const stackSize = new Size(0, 65) //0 means its automatic
  18.  
  19. if (config.runsInWidget || DEV_MODE) {
  20.  
  21.     const date = new Date()
  22.     const dateNow = Date.now()
  23.  
  24.     let df_Name = new DateFormatter()
  25.     let df_Month = new DateFormatter()
  26.     df_Name.dateFormat = "EEEE"
  27.     df_Month.dateFormat = "MMMM"
  28.  
  29.     const dayName = df_Name.string(date)
  30.     const dayNumber = date.getDate().toString()
  31.     const monthName = df_Month.string(date)
  32.  
  33.     let loc = await Location.current()
  34.     let lat = loc["latitude"]
  35.     let lon = loc["longitude"]
  36.  
  37.     if (lat) { console.log("we have latitude") } else { console.log("we do not have latitude") }
  38.     if (lon) { console.log("we have longitude") } else { console.log("we do not have longitude") }
  39.     if (UNITS) { console.log("we have UNITS") } else { console.log("we do not have UNITS") }
  40.  
  41.     const weatherURL = `https://api.openweathermap.org/data/2.5/onecall?lat=${lat}&lon=${lon}&exclude=current,minutely,daily,alerts&units=${UNITS}&appid=${API_KEY}`
  42.     const weatherRequest = new Request(weatherURL)
  43.     const weaterData = await weatherRequest.loadJSON()
  44.  
  45.     console.log(weaterData)
  46.  
  47.     const hourlyForecasts = weaterData.hourly
  48.     let nextForecasts = []
  49.  
  50.     for (const hourlyForecast of hourlyForecasts) {
  51.  
  52.         if (nextForecasts.length == FORECAST_HOURS) { break }
  53.  
  54.         let dt = removeDigits(dateNow, 3)
  55.  
  56.         if (hourlyForecast.dt > dt) {
  57.             nextForecasts.push(hourlyForecast)
  58.         }
  59.     }
  60.  
  61.     const events = await CalendarEvent.today([])
  62.     let futureEvents = []
  63.  
  64.     for (const event of events) {
  65.         if (futureEvents.length == 1) { break }
  66.         if (event.startDate.getTime() > date.getTime() && !event.isAllDay) {
  67.             futureEvents.push(event)
  68.         }
  69.     }
  70.  
  71.     let widget = new ListWidget()
  72.     widget.backgroundColor = widgetBackground
  73.     widget.setPadding(10, 10, 10, 10)
  74.     //widget.spacing = -3
  75.  
  76.     //Top Row (Date & Event)
  77.     let topRow = widget.addStack()
  78.     topRow.layoutHorizontally()
  79.     topRow.url = CALENDAR_URL
  80.  
  81.     //Top Row Date
  82.     let dateStack = topRow.addStack()
  83.     dateStack.layoutHorizontally()
  84.     dateStack.centerAlignContent()
  85.     dateStack.setPadding(7, 7, 7, 7)
  86.  
  87.     dateStack.backgroundColor = stackBackground
  88.     dateStack.cornerRadius = 12
  89.     dateStack.size = stackSize
  90.  
  91.     dateStack.addSpacer()
  92.  
  93.     let dayNumberTxt = dateStack.addText(dayNumber)
  94.     dayNumberTxt.font = Font.semiboldSystemFont(26)
  95.     dayNumberTxt.textColor = Color.black()
  96.  
  97.     dateStack.addSpacer(7)
  98.  
  99.     let dateTextStack = dateStack.addStack()
  100.     dateTextStack.layoutVertically()
  101.  
  102.     let dayNameTxt = dateTextStack.addText(dayName)
  103.     dayNameTxt.font = Font.mediumSystemFont(12)
  104.     dayNameTxt.textColor = calendarColor
  105.  
  106.     let monthNameTxt = dateTextStack.addText(monthName)
  107.     monthNameTxt.font = Font.regularSystemFont(10)
  108.     monthNameTxt.textColor = Color.black()
  109.  
  110.     dateStack.addSpacer()
  111.  
  112.     topRow.addSpacer()
  113.  
  114.     //Top Row Event
  115.     let eventStack = topRow.addStack()
  116.     eventStack.layoutHorizontally()
  117.     eventStack.centerAlignContent()
  118.     eventStack.setPadding(7, 7, 7, 7)
  119.  
  120.     eventStack.backgroundColor = stackBackground
  121.     eventStack.cornerRadius = 12
  122.     eventStack.size = stackSize
  123.  
  124.     eventStack.addSpacer()
  125.  
  126.     if(futureEvents.length != 0) {
  127.  
  128.         const time = formatTime(futureEvents[0].startDate) + " - " + formatTime(futureEvents[0].endDate)
  129.         const eventColor = new Color("#" + futureEvents[0].calendar.color.hex)
  130.         const font = Font.lightSystemFont(20)
  131.         let calendarSymbol = SFSymbol.named("calendar")
  132.         calendarSymbol.applyFont(font)
  133.  
  134.         let eventIcon = eventStack.addImage(calendarSymbol.image)
  135.         eventIcon.imageSize = new Size(20, 20)
  136.         eventIcon.resizable = false
  137.         eventIcon.centerAlignImage()
  138.    
  139.         eventStack.addSpacer(7)
  140.    
  141.         let eventInfoStack = eventStack.addStack()
  142.         eventInfoStack.layoutVertically()
  143.    
  144.         let eventTitle = eventInfoStack.addText(futureEvents[0].title)
  145.         eventTitle.font = Font.mediumSystemFont(12)
  146.         eventTitle.textColor = eventColor
  147.         eventTitle.lineLimit = 1
  148.    
  149.         let eventTime = eventInfoStack.addText(time)
  150.         eventTime.font = Font.regularSystemFont(10)
  151.         eventTime.textColor = Color.black()
  152.         eventTime.textOpacity = 0.5
  153.  
  154.     } else {
  155.  
  156.         let nothingText = eventStack.addText("No more events due today")
  157.         nothingText.font = Font.regularSystemFont(12)
  158.         nothingText.textColor = Color.black()
  159.         nothingText.textOpacity = 0.5
  160.  
  161.     }
  162.  
  163.     eventStack.addSpacer()
  164.  
  165.     widget.addSpacer()
  166.  
  167.     //Bottom Row Weather
  168.     let weatherStack = widget.addStack()
  169.     weatherStack.layoutHorizontally()
  170.     weatherStack.centerAlignContent()
  171.     weatherStack.setPadding(7, 7, 7, 7)
  172.  
  173.     weatherStack.backgroundColor = stackBackground
  174.     weatherStack.cornerRadius = 12
  175.     weatherStack.size = stackSize
  176.  
  177.     for (const nextForecast of nextForecasts) {
  178.  
  179.         const iconURL = "https://openweathermap.org/img/wn/" + nextForecast.weather[0].icon + "@2x.png"
  180.         let iconRequest = new Request(iconURL);
  181.         let icon = await iconRequest.loadImage();
  182.  
  183.         weatherStack.addSpacer()
  184.  
  185.         //Hour Forecast Stack
  186.         let hourStack = weatherStack.addStack()
  187.         hourStack.layoutVertically()
  188.  
  189.         let hourTxt = hourStack.addText(formatAMPM(nextForecast.dt))
  190.         hourTxt.centerAlignText()
  191.         hourTxt.font = Font.systemFont(10)
  192.         hourTxt.textColor = Color.black()
  193.         hourTxt.textOpacity = 0.5
  194.  
  195.         let weatherIcon = hourStack.addImage(icon)
  196.         weatherIcon.centerAlignImage()
  197.         weatherIcon.size = new Size(25, 25)
  198.  
  199.         let tempTxt = hourStack.addText(Math.round(nextForecast.temp) + "°")
  200.         tempTxt.centerAlignText()
  201.         tempTxt.font = Font.systemFont(10)
  202.         tempTxt.textColor = Color.black()
  203.  
  204.     }
  205.  
  206.     weatherStack.addSpacer()
  207.  
  208.     Script.setWidget(widget)
  209.  
  210.     if (DEV_MODE) {
  211.         if (DEV_PREVIEW == "small") { widget.presentSmall() }
  212.         if (DEV_PREVIEW == "medium") { widget.presentMedium() }
  213.         if (DEV_PREVIEW == "large") { widget.presentLarge() }
  214.     }
  215.  
  216.     Script.complete()
  217. }
  218.  
  219. function removeDigits(x, n) { return (x - (x % Math.pow(10, n))) / Math.pow(10, n) }
  220.  
  221. function formatAMPM(UNIX_timestamp) {
  222.  
  223.     var date = new Date(UNIX_timestamp * 1000);
  224.     var hours = date.getHours();
  225.     var ampm = hours >= 12 ? 'PM' : 'AM';
  226.    
  227.     hours = hours % 12;
  228.     hours = hours ? hours : 12;
  229.    
  230.     var strTime = hours + ampm;
  231.     return strTime;
  232. }
  233.  
  234. function formatTime(date) {
  235.  
  236.     let df = new DateFormatter()
  237.  
  238.     df.useNoDateStyle()
  239.     df.useShortTimeStyle()
  240.  
  241.     return df.string(date)
  242. }
Add Comment
Please, Sign In to add comment