Review of "Salaat Prayer Times" version 2

Details Page Preview

Offline-capable prayer times, Adhan, and Quran player for GNOME. Features: -Working Quran player with multiple reciters. -Working Athan audio and notifications. -Automatic location finding and offline cache. -The widget can calculate prayer times offline. Keywords: muslim, islam, islamic, azan, athan, adhan, Quran

Extension Homepage
https://github.com/MazenMohamed203/SalaatprayertimesGnome

No comments.

Diff Against

Files

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

Shexli (experimental) warning 4

Shexli found 4 issues that may need reviewer attention.

EGO-X-004 warning

extensions should avoid synchronous file IO in shell code

Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.

File Operations

  • logic/api.js:181
    file.load_bytes(null, null)

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:191
    this._hijriItem = hijriItem
  • extension.js:185
            this._hijriLabel = new St.Label({
                text: '...',
                x_expand: true,
                style: 'text-align: center; font-style: italic; padding: 4px 8px;'
            })
  • extension.js:114
                this._nextPrayerLabel = new St.Label({
                    text: '...',
                    y_expand: true,
                    y_align: Clutter.ActorAlign.CENTER,
                    style: 'padding: 0px 8px;'
                })
  • extension.js:244
    this._offlineItem = offlineItem
  • extension.js:238
            this._offlineLabel = new St.Label({
                text: '',
                x_expand: true,
                style: 'text-align: center; color: #f9a825; font-weight: bold; padding: 2px 8px;'
            })
  • extension.js:294
            this._playPauseBtn = new St.Button({
                child: new St.Icon({ icon_name: 'media-playback-start-symbolic', icon_size: 24 })
            })
  • extension.js:271
    this._quranSeparator = new PopupMenu.PopupSeparatorMenuItem('Quran Player')
  • extension.js:265
    this._settingsItem = settingsItem
  • extension.js:252
            this._settingsLabel = new St.Label({
                text: this._t('Settings', 'الإعدادات'),
                y_expand: true,
                y_align: Clutter.ActorAlign.CENTER
            })
  • extension.js:202
    this._specialItem = specialItem
  • extension.js:196
            this._specialLabel = new St.Label({
                text: '',
                x_expand: true,
                style: 'text-align: center; font-weight: bold; padding: 0 8px 4px;'
            })
  • extension.js:274
    this._surahSubMenu = new PopupMenu.PopupSubMenuMenuItem('Select Surah (Loading...)')
  • extension.js:278
            this._verseLabel = new St.Label({
                text: 'Press Play to start recitation',
                style: 'text-align: center; max-width: 300px; padding: 10px; font-size: 1.1em;'
            })
  • extension.js:277
    this._verseTextItem = new PopupMenu.PopupBaseMenuItem({ reactive: false })

EGO-L-005 warning

owned object references should be released in disable()

Owned references that are cleaned up in `disable()` should also be released with `null` or `undefined`.

Destroy all objects

  • extension.js:191
    this._hijriItem = hijriItem
  • extension.js:185
            this._hijriLabel = new St.Label({
                text: '...',
                x_expand: true,
                style: 'text-align: center; font-style: italic; padding: 4px 8px;'
            })
  • extension.js:114
                this._nextPrayerLabel = new St.Label({
                    text: '...',
                    y_expand: true,
                    y_align: Clutter.ActorAlign.CENTER,
                    style: 'padding: 0px 8px;'
                })
  • extension.js:244
    this._offlineItem = offlineItem
  • extension.js:238
            this._offlineLabel = new St.Label({
                text: '',
                x_expand: true,
                style: 'text-align: center; color: #f9a825; font-weight: bold; padding: 2px 8px;'
            })
  • extension.js:294
            this._playPauseBtn = new St.Button({
                child: new St.Icon({ icon_name: 'media-playback-start-symbolic', icon_size: 24 })
            })
  • extension.js:271
    this._quranSeparator = new PopupMenu.PopupSeparatorMenuItem('Quran Player')
  • extension.js:265
    this._settingsItem = settingsItem
  • extension.js:252
            this._settingsLabel = new St.Label({
                text: this._t('Settings', 'الإعدادات'),
                y_expand: true,
                y_align: Clutter.ActorAlign.CENTER
            })
  • extension.js:202
    this._specialItem = specialItem
  • extension.js:196
            this._specialLabel = new St.Label({
                text: '',
                x_expand: true,
                style: 'text-align: center; font-weight: bold; padding: 0 8px 4px;'
            })
  • extension.js:274
    this._surahSubMenu = new PopupMenu.PopupSubMenuMenuItem('Select Surah (Loading...)')
  • extension.js:278
            this._verseLabel = new St.Label({
                text: 'Press Play to start recitation',
                style: 'text-align: center; max-width: 300px; padding: 10px; font-size: 1.1em;'
            })
  • extension.js:277
    this._verseTextItem = new PopupMenu.PopupBaseMenuItem({ reactive: false })

EGO-L-007 warning

main loop sources should be removed before being recreated

Main loop sources should be removed before creating a new source on the same field.

Remove main loop sources

  • extension.js:929
                this._adhanStopTimer = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 15, () => {
                    this._adhanStopTimer = null;
                    if (this._isAdhanPlaying) { this._adhanPlayer.stop(); this._onAdhanEnded(); }
                    return GLib.SOURCE_REMOVE;
                })

All Versions

Version Status
2 Unreviewed
1 Rejected