Review of "ClimaCN" version 1

Details Page Preview

中国大陆的天气扩展:实时天气、逐日预报、空气质量与日月天文信息。

Extension Homepage
https://github.com/S3608362/gnome-shell-extension-climacn

No comments.

FAQ

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental) warning 3

Shexli found 3 issues that may need reviewer attention.

EGO-A-004 warning

extension files should not contain excessive ungated console logging

File contains 13 ungated console.log/warn/error calls (threshold: 5).

No excessive logging

  • extension.js:608
    console.error(`[ClimaCN] ${e}`)
  • extension.js:1066
    console.error(`[ClimaCN] Failed to load city data: ${e}`)
  • extension.js:1098
    console.error('[ClimaCN] 城市库表头缺少必要列,已放弃解析')
  • extension.js:1313
    console.error(`[ClimaCN] HTTP ${status}: ${body}`)
  • extension.js:1359
    console.error(`[ClimaCN] Open-Meteo HTTP ${message.status_code}`)
  • extension.js:1374
    console.error(`[ClimaCN] Open-Meteo parse error: ${e}`)
  • extension.js:1433
    console.error(`[ClimaCN] 响应缺少预期字段: ${JSON.stringify(json).slice(0, 300)}`)
  • extension.js:1456
    console.error(`[ClimaCN] Network/parse error: ${e}`)
  • extension.js:1489
    console.error(`[ClimaCN] 预报请求 HTTP ${message.status_code}`)
  • extension.js:1498
    console.error(`[ClimaCN] Forecast parse error: ${e}`)

EGO-L-002 warning

objects created by extension should be destroyed in disable()

Objects assigned in `enable()` are missing matching `.destroy()` calls in `disable()` or its helper methods.

Destroy all objects

  • extension.js:833
            this._aqiArea = new St.DrawingArea({
                style_class: 'climacn-aqi-ring',
                width: AQI_RING_SIZE,
                height: AQI_RING_SIZE,
                y_align: Clutter.ActorAlign.CENTER
            })
  • extension.js:822
            this._aqiGroup = new St.BoxLayout({
                style_class: 'climacn-aqi-group',
                y_align: Clutter.ActorAlign.CENTER,
                visible: false
            })
  • extension.js:1004
    this._attributionItem = new PopupMenu.PopupBaseMenuItem({ activate: false })
  • extension.js:1000
            this._attributionLabel = new St.Label({
                style_class: 'climacn-attribution',
                text: ''
            })
  • extension.js:845
            this._cityLabel = new St.Label({
                text: this._currentCityName,
                style_class: 'climacn-city-label',
                x_align: Clutter.ActorAlign.CENTER
            })
  • extension.js:943
            this._forecastContainer = new St.BoxLayout({
                style_class: 'climacn-forecast-box',
                vertical: true,
                x_expand: true
            })
  • extension.js:953
            this._forecastRowsBox = new St.BoxLayout({
                style_class: 'climacn-forecast-rows',
                vertical: true
            })
  • extension.js:948
            this._forecastTitle = new St.Label({
                text: _('未来 3 天预报'),
                style_class: 'climacn-forecast-title'
            })
  • extension.js:813
            this._headerCondition = new St.Label({
                style_class: 'climacn-header-condition',
                text: '--',
                y_align: Clutter.ActorAlign.CENTER
            })
  • extension.js:799
            this._headerIcon = new St.Icon({
                style_class: 'climacn-header-icon',
                icon_size: 40,
                y_align: Clutter.ActorAlign.CENTER
            })
  • extension.js:806
            this._headerTemp = new St.Label({
                style_class: 'climacn-header-temp',
                text: '--°',
                y_align: Clutter.ActorAlign.CENTER
            })
  • extension.js:994
    this._noticeItem = new PopupMenu.PopupBaseMenuItem({ activate: false })
  • extension.js:990
            this._noticeLabel = new St.Label({
                style_class: 'climacn-notice',
                text: ''
            })
  • extension.js:1010
    this._refreshItem = new PopupMenu.PopupImageMenuItem(_('刷新'), 'view-refresh-symbolic')
  • extension.js:1026
            this._searchEntry = new St.Entry({
                hint_text: _('搜索城市 (例: 北京/海淀/朝阳)...'),
                track_hover: true,
                can_focus: true,
                style_class: 'climacn-search-entry'
            })
  • extension.js:1048
    this._searchResultsSection = new PopupMenu.PopupMenuSection()
  • extension.js:1040
            this._searchStatusLabel = new St.Label({
                style_class: 'climacn-search-status'
            })
  • extension.js:764
            this._sunArcArea = new St.DrawingArea({
                style_class: 'climacn-sun-arc-canvas',
                x_expand: true,
                height: SUN_ARC_HEIGHT,
                y_align: Clutter.ActorAlign.CENTER
            })
  • extension.js:780
    this._sunArcItem = new PopupMenu.PopupBaseMenuItem({ activate: false })
  • extension.js:757
            this._sunriseLabel = new St.Label({
                text: '--:--',
                style_class: 'climacn-sun-time',
                y_align: Clutter.ActorAlign.CENTER
            })
  • extension.js:773
            this._sunsetLabel = new St.Label({
                text: '--:--',
                style_class: 'climacn-sun-time',
                y_align: Clutter.ActorAlign.CENTER
            })
  • extension.js:721
            this._tempLabel = new St.Label({
                style_class: 'climacn-temperature',
                text: '--°',
                y_align: Clutter.ActorAlign.CENTER
            })
  • extension.js:975
            this._trendArea = new St.DrawingArea({
                style_class: 'climacn-trend-chart',
                width: TREND_CHART_WIDTH,
                height: TREND_CHART_HEIGHT
            })
  • extension.js:972
    this._trendItem = new PopupMenu.PopupSubMenuMenuItem(_('10 天趋势'), false)
  • extension.js:715
            this._weatherIcon = new St.Icon({
                style_class: 'system-status-icon climacn-panel-icon',
                icon_size: 18,
                y_align: Clutter.ActorAlign.CENTER
            })

EGO-L-003 warning

signals connected by extension should be disconnected in disable()

Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.

Disconnect all signals

  • extension.js:770
    this._sunArcArea.connect('repaint', () => this._drawSunArc())

All Versions

Version Status
4 Unreviewed
3 Unreviewed
2 Rejected
1 Rejected

Previous Reviews on this Version

Ahoge_Chan auto- rejected
Auto-rejected because of new version 2 was uploaded